JavaFX - 从二进制数据创建pdf

时间:2013-06-08 09:11:42

标签: pdf javafx binary-data

我正在编写一个JavaFX应用程序,它使用WebView访问网站并从其页面中提取数据。在某些时候,我想点击一个链接,打开一个显示PDF文件的新窗口。随着JavaFX中PDF支持的运气,我想一个可能的解决方案可能是读取该PDF的http响应并创建PDF格式的二进制数据。

PDF页面的网址是动态的,因此我没有文件的实际名称,因此我无法使用第三方工具生成pdf。

任何想法都会非常感激。

由于

1 个答案:

答案 0 :(得分:1)

启动基于Swing的PDF查看器

以下是我在JavaFX中编写的小型Web浏览器(名为code extract)中的willow-browser

webEngine.locationProperty().addListener(new ChangeListener<String>() {
  @Override public void changed(ObservableValue<? extends String> observableValue, String oldLoc, String newLoc) {
    if (newLoc.endsWith(".pdf")) {
      try {
        final PDFViewer pdfViewer = new PDFViewer(false);
        pdfViewer.openFile(new URL(newLoc));
      } catch (Exception ex) {
        // handle bad pdf url . . . most likely no action required
      }
    }
  }
}

该代码使用了第三方基于Swing的pdf查看器,它启动它来加载URL。 由于Swing pdf查看器在一个单独的窗口中运行,因此没有任何Swing / JavaFX集成问题 - 它似乎正常工作。

要使其工作,您可以下载柳树浏览器源的副本并构建它(网站上托管的样本二进制文件不包括pdf查看器,只有源构建版本可以。)

理想情况下,除了uri字符串之外,代码还会查询http内容类型以确定该文件是pdf,但这需要一些低级别的网络访问,这在WebView的情况下很难获得。如果您不担心在许多站点上检测pdf内容时非常准确,那么如果您不使用内容类型来确定pdf则无关紧要。

如果Swing pdf查看器没有为您提供所需的体验,您可以尝试其他pdf查看器,例如: jpedalfxICEpdf

启动原生PDF查看器

如果您愿意,可以在pdf网址上拨打HostServices.showDocument(uri),这将触发在本地网络浏览器中打开网址,其中一些内置pdf查看器或设置为使用Acrobat查看pdf阅读器。

确定要查看的pdf的网址的代码在这种情况下与上面的代码相同。