我已经在一个文件中创建了一个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?
答案 0 :(得分:2)
PDF Adobe Reader等查看器需要文件系统上的PDF。即使PDF是通过Web服务器提供的,Adobe Reader也会将本地版本下载到客户端计算机。
PDF Adobe Reader等查看器不接受字节流。您无法打开Adobe Reader和"服务"一个字节流到它。您必须始终将路径传递给文件。
您可以通过Web服务器向浏览器提供PDF来解决此问题。如评论中所示,您可以使用ServerSocket
在Java中创建自己的Web服务器,但是:
特别是最后一个限制使得Joop Eggen的评论无效。请参阅EULA for Adobe Reader DC:
的第3.2节3.2服务器使用。本协议不允许您在计算机文件服务器上安装或使用本软件。
此条款是在Adobe发现人们正在构建本地服务器产品之后添加的,这些产品允许人们使用免费的Adobe Reader来提供仅在Adobe Professional中提供的功能(非免费)。
长话短说:您正在尝试使用最常见的PDF查看器执行某些操作。您必须使用自定义PDF查看器发送应用程序。