Изображение гиперссылки

Этот пример показывает, как задать области в изображении как гиперссылки. Можно задать гиперссылки так, чтобы они соединились с целевой веб-страницей или перешли к другому местоположению в том же отчете.

Импортируйте DOM и пакеты API Отчета, таким образом, вы не должны использовать долго, полностью определенные имена классов.

import mlreportgen.dom.*
import mlreportgen.report.*

Создайте и откройте отчет.

% To create an HTML report, change "pdf” to “html” or "html-file" for a 
% multifile or single-file report, respectively.
rpt = Report("myreport","pdf");
open(rpt);

Добавьте абзац в отчет.

content = "Click on a subplot to navigate to the corresponding " + ...
    "trigonometric function documentation.";
add(rpt,Paragraph(content));

Создайте фигуру с несколькими подграфиками для различных тригонометрических функций.

figH = figure;
x = linspace(0,10);

sinePlot = subplot(3,2,1,"Units","pixels");
plot(x,sin(x));
title("Sine: sin(x)");

cosinePlot = subplot(3,2,2,"Units","pixels");
plot(x,cos(x));
title("Cosine: cos(x)");

secantPlot = subplot(3,2,3,"Units","pixels");
plot(x,sec(x));
title("Secant: sec(x)");

cosecantPlot = subplot(3,2,4,"Units","pixels");
plot(x,csc(x));
title("Cosecant: csc(x)");

tangentPlot = subplot(3,2,5,"Units","pixels");
plot(x,tan(x));
title("Tangent: tan(x)");

cotangentPlot = subplot(3,2,6,"Units","pixels");
plot(x,cot(x));
title("Cotangent: cot(x)");

Используйте генератор отчетов фигуры, чтобы получить снимок состояния фигуры. Используйте Изображение DOM, чтобы включать снимок состояния в отчет.

figReporter = Figure("Source",figH,"SnapshotFormat","pdf");
imgPath = getSnapshotImage(figReporter,rpt);

figImg = Image(imgPath);

Создайте карту изображения на снимке состояния с областью изображения для каждого подграфика. Функция getCoords, заданная в конце этого примера, получает координаты каждого подграфика. Цель для области изображения подграфика поставлена, чтобы быть веб-страницей документации для тригонометрической функции, которая используется, чтобы создать тот подграфик. Затем добавьте снимок состояния в отчет.

map = ImageMap;

sinePlotCoords = getCoords(sinePlot);
sinePlotArea = ImageArea("https://www.mathworks.com/help/matlab/ref/sin.html", ...
    "Sine",sinePlotCoords);
append(map,sinePlotArea);

cosinePlotCoords = getCoords(cosinePlot);
cosinePlotArea = ImageArea("https://www.mathworks.com/help/matlab/ref/cos.html", ...
    "Cosine",cosinePlotCoords);
append(map,cosinePlotArea);

secantPlotCoords = getCoords(secantPlot);
secantPlotArea = ImageArea("https://www.mathworks.com/help/matlab/ref/sec.html", ...
    "Secant",secantPlotCoords);
append(map,secantPlotArea);

cosecantPlotCoords = getCoords(cosecantPlot);
cosecantPlotArea = ImageArea("https://www.mathworks.com/help/matlab/ref/csc.html", ...
    "Cosecant",cosecantPlotCoords);
append(map,cosecantPlotArea);

tangentPlotCoords = getCoords(tangentPlot);
tangentPlotArea = ImageArea("https://www.mathworks.com/help/matlab/ref/tan.html", ...
    "Tangent",tangentPlotCoords);
append(map,tangentPlotArea);

cotangentPlotCoords = getCoords(cotangentPlot);
cotangentPlotArea = ImageArea("https://www.mathworks.com/help/matlab/ref/cot.html", ...
    "Cotangent",cotangentPlotCoords);
append(map,cotangentPlotArea);

figImg.Map = map;
add(rpt,figImg);

Удалите окно рисунка. Закройте и просмотрите отчет.

close(rpt);
delete(figH);
rptview(rpt);

Следующая функция вычисляет и возвращает верхние левые и нижние правые координаты для заданного подграфика в его родительской фигуре. Эти координаты вычисляются путем преобразования координат осей подграфика, которые основаны на системе координат фигуры, где ее контрольная точка является нижней левой частью к системе координат DOM ImageArea, где ее контрольная точка является верхним левым из изображения.

function coords = getCoords(subplot)
    subplotWidth = subplot.Position(3);
    subplotHeight = subplot.Position(4);
    
    fig = subplot.Parent;
    figHeight = fig.Position(4);
    
    x1 = subplot.Position(1);
    y1 = figHeight - (subplot.Position(2) + subplotHeight);
    
    x2 = x1 + subplotWidth;
    y2 = y1 + subplotHeight;
    
    coords = [x1, y1, x2, y2];
end