Opening PDF from web app

25 visualizaciones (últimos 30 días)
Justin
Justin el 3 de Mayo de 2023
Comentada: Justin el 11 de Mayo de 2023
Hi, I'm trying to let the user open a help file in PDF format in the Web App version of a tool.
In the Matlab app version I can just do web('UserGuide.pdf') and so long as the file is on the path it works. Or I can find Acrobat on the local machine and use system().
However, when I compile to Web App neither of those options work (and given how small the .ctf file is, it doesn't look like it saves non-Matlab files even if they are called by the app).
Any suggestions much appreciated. I don't really mind if it opens in browser or Acrobat.

Respuesta aceptada

Kojiro Saito
Kojiro Saito el 10 de Mayo de 2023
web('xxx.pdf') works in compiled Web App, but you need to add the pdf in the "Files required for your app to run" panal by editing project (.prf) file.
In the Web App, web('xxx.pdf') will download the pdf file to the client not viewing in the Web browser. So, I would use uihtml and hyperlink (<a> tag).
After adding HTML component in the design view, adding the following startup function.
function startupFcn(app)
if isdeployed
app.HTML.HTMLSource = fullfile(ctfroot, mfilename, 'test.html');
else
app.HTML.HTMLSource = fullfile(pwd, 'test.html');
end
end
In the test.html file, write the following.
<html>
<a href='some.pdf' target="_blank">Link</a>
</html>
Then, adding pdf and html file in the "Files required for your app to run" panel.
  5 comentarios
Kojiro Saito
Kojiro Saito el 11 de Mayo de 2023
I think you're getting closer.
If additional files (test.html and xxx.pdf, in this case) are included with "Files required for your app to run" in the Web App Compiler or "mcc -a test.html -a xxx.pdf" command, the files are extracted in the ctfroot folder.
For example, in Windows and MATLAB Runtime is R2022b, pdfApp.ctf would be extracted in
C:\ProgramData\MathWorks\webapps\R2022b\USR\.appCache\mcrCache9.13\pdfApp0\
and this folder can be checked with ctfroot command.
if isdeployed
app.Label.Text = ctfroot;
end
Also, test.html and xxx.pdf files will be located in
C:\ProgramData\MathWorks\webapps\R2022b\USR\.appCache\mcrCache9.13\pdfApp0\pdfApp
and this folder can be checked with fullfile(ctfroot, mfilename) command because mfilename returns pdfApp if executed in pdfApp.ctf.
If the same ctf file will be uploaded, ctfroot will be changed to
C:\ProgramData\MathWorks\webapps\R2022b\USR\.appCache\mcrCache9.13\pdfApp1\
I guess the folder name would be "6 characters + number" (pdfApp0, pdfApp1, ..., pdfApp10,..) but ctfroot command knows the exact location.
That's why I use "app.HTML.HTMLSource = fullfile(ctfroot, mfilename, 'test.html')" command. You should check where test.html and xxx.pdf files are located in the server side and check the location of ctfroot and fullfile(ctfroot, mfilename).
Justin
Justin el 11 de Mayo de 2023
OK, thanks, the issue was mfilename. Without input arguments it returns the classdef file name for the calling method, which is different to the app name. The folder with the PDF in takes the app name. Anyway, have hard coded that bit and it is working.
Now it opens the PDF in a new window so long as the user has their browser as the default for opening PDFs, otherwise it does the download thing.
Thanks again for your help.

Iniciar sesión para comentar.

Más respuestas (1)

Praveen Reddy
Praveen Reddy el 10 de Mayo de 2023
Editada: Praveen Reddy el 10 de Mayo de 2023
Hi Justin,
I understand that you are trying to open pdf files from MATLAB app using ‘web()’ function and the same is not working when you compile it to Web App. The limitation to ‘web()’ function is that it does not support the text:// URL scheme when opening pages in the system browser or from a deployed application. If you are trying to deploy an application that calls web function using the MATLAB Compiler product, use the ‘-browser’ option to open all pages in the system browser.
Please refer to the following MATLAB documentation to know more about ‘-browser’ option in ‘web()’ function:
  1 comentario
Justin
Justin el 10 de Mayo de 2023
Editada: Justin el 10 de Mayo de 2023
Thanks, but the '-browser' option doesn't seem to change behaviour in deployed Web App, it still downloads rather than opens the PDF file.

Iniciar sesión para comentar.

Categorías

Más información sobre MATLAB Web App Server en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by