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

问题描述 投票:1回答:1

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

JAVA CODE

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;
}

问题

我能够正常渲染一些pdf文件,但我有一些无法正确打开的pdf文件。所以我做了一些分析,发现如下: -

  1. 有问题的pdf文件在adobe reader,firefox和edge browser中正确打开。
  2. 我以为问题可能是PDFJS库。所以我尝试将我的pdf文件放在WEB目录中并打开viewer.html。令我惊讶的是pdf显示正确。
  3. 我想当我将数据从Java发送到Javascript时可能会丢失一些字节。所以我在每一端都打印了字节数并且它们匹配。
  4. 最后,我认为java可能会搞乱编码。所以我从java读取文件并将字节写入单独的文件,生成的文件是正确的。

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

以下是我的pdf渲染后的样子: - enter image description here

javascript java javafx javafx-8 pdfjs
1个回答
0
投票

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

看看PDF.js发行说明,我发现v2.0.943引入了许多与字体相关的更改,似乎打破了JavaFX中的字体渲染。

好消息是,当前预发布,v2.1.266有关于字体处理的some bugfixes,它修复了JavaFX WebView中的文本呈现问题。

如果使用预发行版感觉不舒服,可以使用v1.10.100,文本渲染也适用于此版本,虽然我建议使用最新版本,因为它似乎更好地渲染不同的字体。

© www.soinside.com 2019 - 2024. All rights reserved.