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

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

Импортируйте 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","jpg");
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