在Webview中使用PDFJS库在Javafx中显示Pdf

2024-01-10

我的目标是在我的 JavaFX 应用程序中显示 pdf 文档。经过研究,我发现了 Mozilla 的 PDFJS 库,发现它非常有用。我正在做的是从 JAVA 读取 PDF 文件作为字节数组,并在 Web 视图中调用 js 代码。这是代码。

JAVA代码

byte[] data = Files.readAllBytes(Paths.get("D:\\test\\test.pdf"));
    String base64 = Base64.getEncoder().encodeToString(data);   


    btn.setOnMouseClicked(e -> {
        String js = "openFileFromBase64('" + base64 + "')";
        engine.executeScript(js);
    });

JavaScript 代码

<script>
var openFileFromBase64 = function(data) {
    var arr = base64ToArrayBuffer(data);
    PDFViewerApplication.open(arr);
}

function base64ToArrayBuffer(base64) {
  var binary_string = window.atob(base64);
  var len = binary_string.length;
  var bytes = new Uint8Array(new ArrayBuffer(len));
  alert(len);
  for (var i = 0; i < len; i++)        {
      bytes[i] = binary_string.charCodeAt(i);
  }
  return bytes.buffer;
}

Problem

我可以很好地渲染一些 pdf 文件,但有些 pdf 文件无法正确打开。所以我做了一些分析并发现以下内容:-

  1. 有问题的 pdf 文件可以在 adobe reader、firefox 和 Edge 浏览器中正确打开。

  2. 我认为问题可能出在 PDFJS 库上。所以我尝试将我的pdf文件放在WEB目录中并打开viewer.html。出乎我的意料 pdf正确显示。

  3. 我认为当我将数据从 Java 发送到 Javascript 时,可能会丢失一些字节。所以我在每一端打印了字节数,它们匹配。

  4. 最后,我认为java可能搞乱了编码。所以我从java读取文件并将字节写入单独的文件,生成的文件是正确的。

我试图了解我是否忽略了某些事情。任何建议表示赞赏。提前致谢。

Here is how my pdf looks like after it is rendered:- enter image description here


我有同样的问题:没有文本可以正确呈现截至今天,在 JavaFX WebView 中使用 PDF.js 的当前稳定版本(v2.0.943)。基于图像的 PDF 可以正确呈现。

查看 PDF.js 发行说明,我发现v2.0.943 https://github.com/mozilla/pdf.js/releases/tag/v2.0.943引入了许多与字体相关的更改,并且似乎破坏了 JavaFX 中的字体渲染。

好消息是当前预发布, v2.1.266 https://github.com/mozilla/pdf.js/releases/tag/v2.1.266 has 一些错误修正 https://github.com/mozilla/pdf.js/pull/10539关于字体的处理及其修复文本渲染问题在 JavaFX Web 视图中。

如果您觉得使用预发行版感到不舒服,您可以使用v1.10.100 https://github.com/mozilla/pdf.js/releases/tag/v1.10.100,文本渲染也适用于此版本,尽管我建议使用最新版本,因为它似乎可以更好地渲染不同的字体。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Webview中使用PDFJS库在Javafx中显示Pdf 的相关文章

随机推荐

  • 如何横向显示 SwiftUI 预览

    previewLayout fixed width 480 height 320 在 Xcode 13 4 和 Xcode 14 beta 3 中没有效果 The preview is shown in portrait vs expect
  • 使用预提交排除运行黑屏时的一些文件

    我想在预提交中配置黑色 并从检查任何迁移文件夹中排除预提交 我的 pyproject toml 看起来像这样 tool black line length 79 target version py37 include pyi exclude
  • Grails Webflow - 将事物保持在流程范围之外

    我错过了一些东西 我有一个 Grails 网络流程 如下所示 def childFlow start action def targets Target list each target gt targets add new TargetC
  • eig(X, 'nobalance') 的八度等效值是多少

    我试图找到马尔可夫链的平衡分布 这意味着找到代表它的转移矩阵的特征值 但是 eig函数自动标准化它返回的特征向量 在MatLab中有一个标志你可以传递给函数停止这种行为 eig X 不平衡 其中 X 是矩阵 看http www mathwo
  • 如何将指针传递给 LuaJIT ffi 以用作 out 参数?

    假设有以下C代码 struct Foo int dummy int tryToAllocateFoo Foo dest 如何在 LuaJIT 中执行以下操作 Foo pFoo NULL tryToAllocateFoo pFoo local
  • 在没有母版页控件的情况下打印asp.net页面

    我想打印我的页面 接受母版页的元素 母版页中有一个用户控件 这对我来说很重要 我的打印按钮也在主页上 谢谢 您需要创建新的样式表 print css 并设置 CSS media print 例如 并将 yesPrint 类添加到要打印的部分
  • 尝试请求存储库时,TypeORM 未找到连接“默认”

    我正在使用 Express TypeORM 构建一个 API 这是我的 ormconfig json type postgres host localhost port 5432 username mdsp9070 password mds
  • 实体框架数据库首先更新多重性冲突

    我看到的关于这些多重性冲突的大多数其他问题都是代码优先 而我首先是数据库 我进行了一些架构更改 当我从数据库刷新模型时收到以下错误 多重性与关系 FK MarketSelectionWager Bet 中角色 Bet 中的引用约束冲突 由于
  • 用于 Code128 条形码字体的 Python Code128 编码器

    就像标题所说 我有一个 Code128 字体 我想用它来打印条形码 但是 该字符串需要以 Code128 进行编码才能使条形码字体正常工作 我的应用程序使用Python3语言 网络上曾经有一个示例 介绍如何将字符串编码为 Code128 字
  • 双击不适用于 Python 中的无头 Selenium

    我尝试在无头模式下使用 selenium 双击网站上的选定元素 但是双击操作不起作用 我的 chrome 版本是 72 任何帮助将不胜感激 以下是我的代码的相关部分 element driver find element by id pla
  • 如何根据目标c、Iphone中的当前位置找到最近的100米纬度和经度

    如何根据当前位置找到最近的 100 米纬度和经度 我在 SQLITE3 中创建了一个数据库 其中包含一组纬度和经度以及相应的位置名称 根据当前位置 我想获取目标 C 中最近的 100 米纬度和经度 我正在使用以下代码来获取当前位置 void
  • 简单的 Bootstrap 页面在 iPhone 上没有响应

    我下载了 Twitter Bootstrap 示例并用它创建了一个简单的 Rails 项目 我在需要的地方复制了 css 它显示得很好 我还复制了 js 一切都在我的桌面上运行得很好 当我更改浏览器的大小时 它会重新组织页面 当使用一些不同
  • 使用 Node.js 监听 2 个不同的端口

    我目前正在使用 Sockets io 与客户端通信 从端口发送 JSON 等 这一切都很好 但我想做的是同时监听另一个端口 以创建一种用于测试目的的管理页面 例如 该页面将有一个按钮 用于为另一个端口上连接的所有客户端发送某种类型的 JSO
  • 如何使用cosmos sdk生成给定种子短语的高清钱包密钥和地址?

    我正在尝试使用 cosmos sdk 生成高清钱包私钥 公钥和地址 下面是 python 中的等效实现 它按预期生成键和地址 但在尝试生成时golang使用cosmos sdk它不会生成相同的密钥 非常感谢任何等效 golang 版本的 p
  • 科学计算中如何处理下溢?

    我正在研究概率模型 当对这些模型进行推理时 估计的概率可能会变得非常小 为了避免下溢 我目前在对数域中工作 我存储概率的对数 概率相乘相当于加法 求和是通过以下公式完成的 log exp a exp b log exp a m exp b
  • Angular2 组件:无法在 ngOnDestroy 内发出 @Output EventEmitter?

    角度2 rc1 是否可以有这样的组件 export class MyComp Output myEvent new EventEmitter false ngOnDestroy this myEvent emit ngOnDestroy h
  • 演示 Docusign API:java.net.SocketException 连接重置

    我们最近开始收到此错误 我们的 API 已经运行四年多了 DEMO 网站上有什么变化吗 引起原因 java net SocketException调用https demo docusign net API 3 0 AccountManage
  • 在 Visual Studio 中禁用特定代码块的代码格式

    我怎么能够禁用代码格式化对于特定的代码块视觉工作室 2017 C 7 我有这个方法 public CarViewModel ICarsRepo carsRepo Manufacturers ToSelectList
  • 如何使用 JavaScript 将输入字段设置为只读?

    我知道你可以添加readonly readonly 到输入字段 因此它不可编辑 但我需要使用 javascript 来定位输入的 id 并将其设置为只读 因为我无权访问表单代码 它是通过营销软件生成的 我不想禁用输入 因为应在提交时收集数据
  • 在Webview中使用PDFJS库在Javafx中显示Pdf

    我的目标是在我的 JavaFX 应用程序中显示 pdf 文档 经过研究 我发现了 Mozilla 的 PDFJS 库 发现它非常有用 我正在做的是从 JAVA 读取 PDF 文件作为字节数组 并在 Web 视图中调用 js 代码 这是代码