Opening PDF from web app

25 次查看(过去 30 天)
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.

采纳的回答

Kojiro Saito
Kojiro Saito 2023-5-10
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 个评论
Kojiro Saito
Kojiro Saito 2023-5-11
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 2023-5-11
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.

请先登录,再进行评论。

更多回答(1 个)

Praveen Reddy
Praveen Reddy 2023-5-10
编辑:Praveen Reddy 2023-5-10
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 个评论
Justin
Justin 2023-5-10
编辑:Justin 2023-5-10
Thanks, but the '-browser' option doesn't seem to change behaviour in deployed Web App, it still downloads rather than opens the PDF file.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 MATLAB Web App Server 的更多信息

标签

产品


版本

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by