首页 > 解决方案 > 在没有 pdf 阅读器的应用程序内显示 pdf

问题描述

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

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

标签: codenameone

解决方案


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

幸运的是,有一个折衷的解决方案可以在 Android 和 iOS 上运行良好,尽管存在一些差异。如果您启用了 CEF(https://www.codenameone.com/blog/big-changes-jcef.html),它也适用于模拟器。

这是一个示例代码。请注意,您不需要登录谷歌,但有使用限制(达到通过谷歌文档在 WebView 中查看 pdf 文件的带宽限制):

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,但这是最复杂的情​​况。对此有商业解决方案,但我不想向任何人做广告。


推荐阅读