gpt4 book ai didi

java - 显示存储在 ByteArrayOutputStream 中(而不是文件中)的 PDF 文档

转载 作者:行者123 更新时间:2023-11-30 02:59:17 25 4
gpt4 key购买 nike

我已经在文件中创建了一个 PDF 文档(带有 iText),并且可以使用以下命令在屏幕上显示它:

Document document = new Document();       
PdfWriter.getInstance(document, filename);
document.open();
// ... write something to document
document.close();
Desktop.getDesktop().open(new File(filename)); // works fine :-)

但是在客户的机器上我的程序将无法访问文件系统,所以我尝试了这个:

Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter.getInstance(document,baos);
document.open();
// ... write something to document
document.close();

这有效,但是(当然)

Desktop.getDesktop().open(new File(baos));  //doesn't work :-(

无法使用 Desktop.getDesktop().open 显示 PDF。

是否有办法显示存储在 ByteArrayOutputStream 中的 PDF?

最佳答案

PDF 查看器(例如 Adob​​e Reader)需要文件系统上的 PDF。即使 PDF 通过 Web 服务器提供,Adobe Reader 也会将本地版本下载到客户端计算机。

PDF 查看器(例如 Adob​​e Reader)不接受字节流。您无法打开 Adob​​e Reader 并向其“提供”字节流。您必须始终传递文件的路径。

您可以通过网络服务器向浏览器提供 PDF 来解决此问题。正如评论中所指出的,您可以使用 ServerSocket 在 Java 中创建自己的 Web 服务器,但是:

  1. 防火墙通常会对此进行提示。突然开始充当网络服务器的应用程序被认为是可疑的。
  2. Adobe Reader 的 EULA 禁止在创建和提供 PDF 的同一台计算机上使用 Adob​​e Reader。因此,您必须确保您的用户不使用 Adob​​e Reader,否则他们将违反 Adob​​e Reader 的 EULA。

特别是最后一个限制使得 Joop Eggen 发表评论空白。请参阅 EULA for Adobe Reader DC 的第 3.2 节:

3.2 Server Use. This agreement does not permit you to install or Use the Software on a computer file server.

此条款是在 Adob​​e 发现人们正在构建允许人们使用免费 Adob​​e Reader 来提供仅在 Adob​​e Professional(非免费)中可用的功能的本地服务器产品后添加的。

长话短说:您正在尝试做一些使用最常见的 PDF 查看器无法完成的事情。您必须使用自定义 PDF 查看器来发送您的应用程序。

关于java - 显示存储在 ByteArrayOutputStream 中(而不是文件中)的 PDF 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36363205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com