Mah*_*dsi 34 pdf ghostscript pdftk
我有一个已经压缩过的 PDF 和一些人工图像,我正在使用 Ghostscript 为该 PDF 添加一个标题页。
但是,我找不到任何方法告诉 GS 按原样使用现有图像而不重新处理它们,现在我觉得这与 GS 的工作方式有关,即您无法重新编译/链接 PDF没有重新处理它的图像..是真的吗?
我可以在 GS 中提高 DPI 设置,但它会从 5MB 增加到 60MB,同时看起来仍然更糟。
有没有更好的替代 GS 可以满足我的需要(最好是在 OS X 上编译)?
Kur*_*fle 51
如果您只想连接两个 PDF 文件而不对其内容进行任何重新处理,pdftk则适合您。(在 Mac OS X 上,这应该可以通过 MacPorts 或 Fink 获得,对于 Linux,所有主要发行版都有本机包;对于 Windows,请看这里。)试试这个:
pdftk title.pdf content.pdf cat output book.pdf
Run Code Online (Sandbox Code Playgroud)
这会将title.pdf 附加到content.pdf并将结果写入book.pdf。
pdftk是连接两个(或更多)PDF 文件的“愚蠢”但非常快速的方法。“阿呆”,在迄今,因为pdftk不以任何方式解释的PDF数据流,它只是确保在根据需要和出现在PDF中的内部对象号码重新改组xref结构(这基本上是一种PDF的ToC的对对象)。
幽灵脚本:
如果你想使用 Ghostscript,连接相同的两个文件的基本命令是:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
title.pdf \
content.pdf
Run Code Online (Sandbox Code Playgroud)
但是,正如您所经历的,这个简单的命令行可能会破坏您的图像质量。原因是 Ghostscript 在处理 PDF 时不是“愚蠢的”:它在读入时完全解释它们,并在写出结果时创建一个全新的文件。为了创建结果,它会自动对整个处理中的许多细节使用默认设置。这些默认值将适用于其调用未以其他方式指示 Ghostscript 的所有情况。
因此,Ghostscript 创建新book.pdf的方法比 的方法更“智能”(但也慢得多)pdftk。(这也是为什么 Ghostscript 在很多情况下能够——在限制范围内——“修复”b0rken PDF 文件,或将字体嵌入到未嵌入输入 PDF 的输出 PDF 中,或删除重复图像,替换的原因他们仅仅通过引用等方式——并且总体上从臃肿的输入 PDF 中创建了更小、更好优化的文件......)
解决方案是不让 Ghostscript 使用其默认值:通过向命令行添加更多自定义参数。
“Ghostscript '解释'其 PDF 输入”是什么意思?
所有文件及其内容(对象、流、字体、图像等)都被读入、检查并保存在其自己的内部表示中,然后再次将生成的 PDF 及其 PDF 对象吐出。但是,当“吐出”时,Ghostscript 将应用其所有可用参数[*] 的所有内部默认设置。
不幸的是,这会导致您根据这些默认设置对图像进行“重新处理”——这只能通过添加您自己的(所需的)命令行参数来避免或覆盖。
您的图像问题可能是由 Ghostscript 需要(由于许可问题)将 JPEG2000 图像重新编码为 JPEG 编码造成的。如果您想避免这种情况,请将以下内容添加到您的命令行中:
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
Run Code Online (Sandbox Code Playgroud)
请注意,以上/FlateEncode意味着输入 PDF 文件中包含的任何 JPEG 流都将转换为原始 (PPM) 流。这将大大增加您生成的 PDF 文件。
其他需要考虑的与图像相关的命令行选项包括:
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
Run Code Online (Sandbox Code Playgroud)
因此,可以让您开心的完整 Ghostscript 命令行应该是这样的:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
title.pdf \
content.pdf
Run Code Online (Sandbox Code Playgroud)
您还可以使用以下命令行告诉 Ghostscript不要在输出 PDF 中压缩图像:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dEncodeColorImages=false \
-dEncodeGrayImages=false \
-dEncodeMonoImages=false \
title.pdf \
content.pdf
Run Code Online (Sandbox Code Playgroud)
.
[*]:
如果您有兴趣了解Ghostscript 的pdfwrite设备使用的默认设置的完整列表,请运行以下命令。它会返回完整列表:
gs \
-sDEVICE=pdfwrite \
-o /dev/null \
-c "currentpagedevice { exch ==only ( ) print == } forall"
Run Code Online (Sandbox Code Playgroud)
有关所有这些参数的确切含义的解释,您必须阅读有关“Distiller Parameters”的Adobe 文档。Ghostscript 非常努力地模仿所有这些......
| 归档时间: |
|
| 查看次数: |
16522 次 |
| 最近记录: |