【问题标题】:JavaFX - Create pdf from binary dataJavaFX - 从二进制数据创建 pdf
【发布时间】:2013-06-08 09:11:41
【问题描述】:

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

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

任何想法将不胜感激。

谢谢

【问题讨论】:

    标签: pdf javafx binary-data


    【解决方案1】:

    启动基于 Swing 的 PDF 查看器

    这是我在 JavaFX 中编写的来自小型网络浏览器(名为 willow-browser)的 code extract:

    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 的第 3 方 pdf 查看器,它启动以加载 url。 由于 Swing pdf 查看器在单独的窗口中运行,因此没有任何 Swing/JavaFX 集成问题 - 它似乎可以正常工作。

    要使其正常工作,您可以下载 Willow 浏览器源代码的副本并构建它(网站上托管的示例二进制文件不包括 pdf 查看器,只有源代码构建包含)。

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

    如果 Swing pdf 查看器无法为您提供所需的体验,您可以尝试使用其他 pdf 查看器,例如jpedalfx 或 ICEpdf。

    启动原生 PDF 查看器

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

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

    【讨论】:

    • 感谢您的快速回复。我的问题是 pdf 的 url 是动态的。我正在访问的网页是使用 Oracle 的 ADF 页面构建的。为了将 url 发送到本地浏览器,我需要知道在您实际按下链接之前不知道的 url。它甚至不是html中a标签的href。最后实际的 url 最后没有 .pdf 。你认为你上面的解决方案会奏效吗?无论如何,我稍后会试一试并将我的结果发布回来。
    猜你喜欢
    • 2014-07-08
    • 2012-03-13
    • 2019-07-28
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2014-06-12
    • 1970-01-01
    相关资源
    最近更新 更多