1

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

PDF 页面的 url 是动态的,所以我没有文件的实际名称,所以我不能使用第三方工具来生成 pdf。

任何想法将不胜感激。

谢谢

4

1 回答 1

1

启动基于 Swing 的 PDF 查看器

这是我在 JavaFX 中编写的一个小型 Web 浏览器(名为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
      }
    }
  }
}

该代码使用了基于 3rd 方 Swing 的 pdf 查看器,它启动以加载 url。由于 Swing pdf 查看器在单独的窗口中运行,它周围没有任何 Swing/JavaFX 集成问题 - 它似乎可以正常工作。

为了让它工作,你可以下载一个 willow 浏览器源代码的副本并构建它(站点上托管的示例二进制文件不包括 pdf 查看器,只有源代码构建包含)。

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

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

启动本机 PDF 查看器

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

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

于 2013-06-08T10:37:55.300 回答