【问题标题】:Display PDF document stored in a ByteArrayOutputStream (not in a file)显示存储在 ByteArrayOutputStream 中的 PDF 文档(不在文件中)
【发布时间】:2016-04-01 18:17:14
【问题描述】:

我在一个文件中创建了一个 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?

【问题讨论】:

  • 你可以播放 web 服务器,让一个 ServerSocket 监听端口 8080 和Desktop.getDesktop.browse("http://localhost:8080/my.pdf")。您必须处理请求标题行,并发送您自己的标题行,但浏览器开发工具会显示示例数据。
  • web 服务器不会在客户机器上运行 :-(
  • 你不能在一个端口上用java打开一个ServerSocket?我的意思是扮演网络服务器并让浏览器打开pdf。
  • @JoopEggen 仅供参考:您的提议违反了EULA of Adobe Reader DC,更具体地说,违反了条款 3.2 服务器使用:“本协议不允许您在计算机文件服务器上安装或使用该软件。”如果 OP 使用您的建议,他必须确保他的用户不使用 Adob​​e Reader。请参阅我的回答,了解 EULA 中为何包含该条款。
  • @BrunoLowagie 听到这个消息很难过,但如果有人是该领域的名人,那就是你。

标签: java pdf itext bytearrayoutputstream


【解决方案1】:

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

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

您可以通过网络服务器向浏览器提供 PDF 来解决此问题。如 cmets 所示,您可以使用 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 服务器使用。本协议不允许您在计算机文件服务器上安装或使用本软件。

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

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

【讨论】:

    猜你喜欢
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    相关资源
    最近更新 更多