在没有pdf阅读器的情况下在应用内显示pdf

时间:2020-08-09 08:23:31

标签: codenameone

我的目标是在表单内查看pdf,就像浏览器组件在表单内显示的方式一样。我已经尝试过here中的代码,但是可以在外部pdf阅读器中打开pdf。我的目标是在应用程序中显示pdf内容。因此,我认为我要么必须在浏览器组件内显示pdf,要么集成一个外部pdf阅读器api才能在表单内打开pdf。现在,我需要以下任一方面的帮助:

  1. 如何在浏览器组件中显示pdf 或
  2. 是否可以将pdf阅读器api集成到我的应用中,以便pdf在表单或容器内打开?

1 个答案:

答案 0 :(得分:2)

在html中,“对象”标签可让您在支持该标签的浏览器中轻松查看pdf。不幸的是,在桌面浏览器中可以显示带有object标签的pdf而不出现问题,而在本机应用程序中则不起作用:特别是,Android 10完全不支持(它将显示白屏),而iOS 13部分支持它,仅显示第一页并将其拉伸到屏幕大小,而不考虑pdf页面的比例(不允许进入下一页)。

幸运的是,有一个折衷解决方案在Android和iOS上都可以很好地运行,尽管有所不同。如果您启用了CEF(https://www.codenameone.com/blog/big-changes-jcef.html),它也可以在模拟器中使用。

这是示例代码。请注意,您无需登录Google,但是有使用限制(Reaching the bandwidth limit for viewing pdf files in WebView through Google docs):

String pdfUrl = "https://www.galgani.it/pdf/linguaggi_programmazione.pdf";
Form hi = new Form("PDF Viewer", new BorderLayout());
BrowserComponent browser = new BrowserComponent();
browser.setURL("https://docs.google.com/viewer?url=" + pdfUrl);
hi.add(BorderLayout.CENTER, browser);
hi.show();

如果您不想陷入Google的鸟笼及其使用限制中,则可以使用以下JavaScript来实现自己的跨平台解决方案:https://mozilla.github.io/pdf.js/

最后,您可以使用本机界面来使用第三方库来查看pdf,但这是最复杂的情​​况。有商业解决方案,但我不想向任何人做广告。