【问题标题】: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 查看器,例如jpedalfxICEpdf

    启动原生 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
    相关资源
    最近更新 更多