显示存储在 ByteArrayOutputStream(而不是文件)中的 PDF 文档
Display PDF document stored in a ByteArrayOutputStream (not in a file)
我已经在文件中创建了一个 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?
Adobe Reader 等 PDF 查看器需要文件系统上的 PDF。即使 PDF 是通过 Web 服务器提供的,Adobe Reader 也会将本地版本下载到客户端计算机。
Adobe Reader 等 PDF 查看器不接受字节流。您无法打开 Adobe Reader 和 "serve" 字节流。您必须始终传递文件路径。
您可以通过网络服务器向浏览器提供 PDF 来解决此问题。如评论中所述,您可以使用 ServerSocket
在 Java 中创建自己的 Web 服务器,但是:
- 防火墙通常会抱怨这个。突然开始充当网络服务器的应用程序被认为是可疑的。
- Adobe 的 EULA Reader 禁止在创建和提供 PDF 的同一台机器上使用 Adobe Reader。因此,您必须确保您的用户不使用 Adobe Reader,否则他们将违反 Adobe Reader.
的 EULA
特别是最后一个限制使Joop Eggen void. See section 3.2 of the EULA for Adobe Reader DC发表评论:
3.2 Server Use. This agreement does not permit you to install or Use the Software on a computer file server.
此条款是在 Adobe 发现人们正在构建允许人们使用免费的 Adobe Reader 来提供仅在 Adobe Professional(不是免费的)中可用的功能的本地服务器产品之后添加的。
长话短说:您正在尝试做一些最常见的 PDF 查看器无法做到的事情。您必须将您的应用程序与自定义 PDF 查看器一起发布。
我已经在文件中创建了一个 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?
Adobe Reader 等 PDF 查看器需要文件系统上的 PDF。即使 PDF 是通过 Web 服务器提供的,Adobe Reader 也会将本地版本下载到客户端计算机。
Adobe Reader 等 PDF 查看器不接受字节流。您无法打开 Adobe Reader 和 "serve" 字节流。您必须始终传递文件路径。
您可以通过网络服务器向浏览器提供 PDF 来解决此问题。如评论中所述,您可以使用 ServerSocket
在 Java 中创建自己的 Web 服务器,但是:
- 防火墙通常会抱怨这个。突然开始充当网络服务器的应用程序被认为是可疑的。
- Adobe 的 EULA Reader 禁止在创建和提供 PDF 的同一台机器上使用 Adobe Reader。因此,您必须确保您的用户不使用 Adobe Reader,否则他们将违反 Adobe Reader. 的 EULA
特别是最后一个限制使Joop Eggen void. See section 3.2 of the EULA for Adobe Reader DC发表评论:
3.2 Server Use. This agreement does not permit you to install or Use the Software on a computer file server.
此条款是在 Adobe 发现人们正在构建允许人们使用免费的 Adobe Reader 来提供仅在 Adobe Professional(不是免费的)中可用的功能的本地服务器产品之后添加的。
长话短说:您正在尝试做一些最常见的 PDF 查看器无法做到的事情。您必须将您的应用程序与自定义 PDF 查看器一起发布。