codenameone - 在没有 pdf 阅读器的应用程序内显示 pdf
问题描述
我的目标是在表单中查看 pdf,就像浏览器组件在表单中显示的方式一样。我已经尝试过这里的代码,但是会在外部 pdf 阅读器中打开 pdf。我的目标是在应用程序中显示 pdf 内容。所以我认为我要么必须在浏览器组件中显示 pdf,要么集成外部 pdf 阅读器 api 以在表单中打开 pdf。现在,我需要以下任何一个方面的帮助:
- 如何在浏览器组件中显示 pdf 或
- 是否有我可以集成到我的应用程序中的 pdf 阅读器 api,以便 pdf 在表单或容器中打开?
解决方案
在 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,但这是最复杂的情况。对此有商业解决方案,但我不想向任何人做广告。
推荐阅读
- laravel - 如何在 laravel eloquent 中基于一对多关系中的单列删除所有行?
- javascript - 反应js在显示后从状态填写表格
- python - 现有类不在目录中
- python - 带break的基本python while循环
- javascript - 如何在 .innerHTML 中显示对象中所选答案的结果
- python - 我们如何在 python 的 2D 列表中的同一个地方附加不同的单词?
- python-3.x - Python 3 导入 pynput xlib 警告
- azure - Azure Durable Functions,“IsReplaying”标志的意外值
- amazon-web-services - 在 QuickSight 中可视化几天内的时间值
- c++ - 用strand提升asio并发定时器取消问题