[英]Displaying Pdf in Javafx using PDFJS library in Webview
我的目标是在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;
}
问题
我可以很好地渲染一些pdf文件,但有些pdf文件无法正确打开。 所以我做了一些分析,发现以下内容:
有问题的pdf文件可以在Adobe Reader,firefox和Edge浏览器中正确打开。
我以为问题可能是PDFJS库。 因此,我尝试将pdf文件放置在WEB目录中,然后打开viewer.html。 令我惊讶的是pdf正确显示。
我以为从Java向Javascript发送数据时可能丢失了一些字节,所以我在两端打印了字节数并且它们匹配。
最后,我认为java可能会弄乱编码。 因此,我从java中读取了文件,并将字节写入了单独的文件,并且生成的文件是正确的。
我想了解我是否忽略了某些内容。 任何建议表示赞赏。 提前致谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.