所以我有一个使用 Java 和 iText 构建的报告系统。 PDF 模板是使用 Scribus 创建的。 Java 代码使用 iText 将数据合并到文档中。然后将文件复制到 NFS 共享,然后 BASH 脚本将它们打印出来。
我使用 acroread 将它们转换为 PS,然后对 PS 进行 lpr。
FOSS 应用程序 pdftops 效率极低。
我的主要问题是使用 iText/Scribus 生成的 PDF 非常大。 我最近遇到了 acroread 呕吐的问题,因为它在大型(300 页以上)文档上使用了 4gb 的内存。 (Adobe 将内容更新到 64 位的速度非常慢)。
现在我可以在 Windows 上使用 Adobe 阅读器,并使用“减少文件大小”选项或其他名称,它大大(> 10 倍)减小了 PDF 的大小(它删除了很多关于表单字段的元数据,因此看起来) 并生成基本上是打印图像的 PDF。
我的问题是有没有人知道在 Linux 上做类似事情的好的解决方案/程序。理想情况下,它将优化 PDF、减小大小并降低 PS 复杂性,以便打印机可以更快地打印,因为现在打印一页大约需要 15-20 秒。
最佳答案
要减小 PDF 文件的大小,请使用 pdfsizeopt ,我正在开发的软件。 pdfsizeopt
可在 Linux、Mac OS X、Windows(也可能在其他系统上)上运行。
pdfsizeopt
有很多依赖项,因此安装起来可能有点麻烦(大约需要 10 分钟的时间)。我正在努力简化安装。
如果你需要快速的东西,你可以试试它的依赖之一:Multivalent tool.pdf.Compress
,这是一个纯 Java 工具。
获取Multivalent20060102.jar , 安装Java并运行
java -cp Multivalent20060102.jar tool.pdf.Compress input.pdf
gs -sDEVICE=pdfwrite
的功能有限制:
- 它不能生成外部参照流(所以 PDF 会比需要的大)
- 它不能生成对象流(所以 PDF 会比需要的大)
- 它不会对图像或其他对象进行重复数据删除(即,如果同一图像在输入 PDF 中多次出现,gs 会在每次出现时在输出中制作一个副本)
- 它以次优方式发出图像
- 它将图像重新采样到低分辨率
- 它有时会省略 PDF 中的超链接
- 它无法转换某些构造(因此输出的 PDF 可能与输入的在视觉上不同)
pdfsizeopt
和 Multivalent 的 tool.pdf.Compress
都没有这些限制。
关于Linux PDF/Postscript 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2656329/