6

所以我有一个使用 Java 和 iText 构建的报告系统。PDF 模板是使用 Scribus 创建的。Java 代码使用 iText 将数据合并到文档中。然后将这些文件复制到 NFS 共享,并由 BASH 脚本打印它们。

我使用 acroread 将它们转换为 PS,然后使用 lpr 转换 PS。

FOSS 应用程序 pdftops 效率极低。

我的主要问题是使用 iText/Scribus 生成的 PDF 非常大。而且我最近遇到了 acroread 呕吐的问题,因为它在大型(300 多页)文档上使用了 4gb 的内存。(Adobe 在将内容更新到 64 位方面非常缓慢)。

现在我可以在 Windows 上使用 Adob​​e 阅读器,并使用“减少文件大小”选项或其他任何名称,它极大地(> 10 倍)减小了 PDF 的大小(它删除了很多关于表单字段的元数据以及它出现的内容)并产生基本上是打印图像的 PDF。

我的问题是有没有人知道在 Linux 上做类似事情的好解决方案/程序。理想情况下,它将优化 PDF、减小大小并降低 PS 复杂性,以便打印机可以更快地打印,因为现在每页打印大约需要 15-20 秒。

4

2 回答 2

5

要减小 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 可能在视觉上与输入不同)

Multivalentpdfsizeopt公司都tool.pdf.Compress不受这些限制的影响。

于 2012-08-06T12:32:32.357 回答
4
gs \
  -dCompatibilityLevel=1.4 \
  -dPDFSETTINGS=/screen \
  -dNOPAUSE \
  -dBATCH \
  -sDEVICE=pdfwrite \
  -sOutputFile=output.pdf \
   input.pdf

Ghostscript 似乎对这个问题最有效。我现在遇到了一个不同的问题,ghostscript 乱码嵌入的字体,但我会为此提出一个新问题。

于 2010-04-19T20:47:10.270 回答