我正在尝试使用 GhostScript 减小 PDF 的文件大小。通常,这有效:
gswin32c -sDEVICE=pdfwrite -sOutputFile=out.pdf in.pdf
我认为它会消除书签、注释等。
在某些 PDF 上,我最终得到的是空白 PDF。我得到以下输出:
GPL Ghostscript 9.04 (2011-08-05)
Copyright (C) 2011 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Error: /rangecheck in --run--
Operand stack:
15 0 15 --nostringval-- 15
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-
- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- fa
lse 1 %stopped_push 1926 1 3 %oparray_pop 1925 1 3 %oparray_
pop 1909 1 3 %oparray_pop --nostringval-- --nostringval-- --nostri
ngval-- --nostringval-- --nostringval-- --nostringval--
Dictionary stack:
--dict:1166/1684(ro)(G)-- --dict:1/20(G)-- --dict:82/200(L)-- --dict:82
/200(L)-- --dict:108/127(ro)(G)-- --dict:291/300(ro)(G)-- --dict:22/30(L)-
-
Current allocation mode is local
GPL Ghostscript 9.04: Unrecoverable error, exit code 1
错误消息没有什么帮助。有什么建议可以解决此问题吗?
答案1
首先使用 pdfwrite 以外的设备,您可以不带任何参数启动 Ghostscript(使用 Windows 版本 gswin32),然后将文件拖放到上面。这将打开一个窗口来显示结果。
如果这样可行,那么你可能在 pdfwrite 中发现了一个错误。如果这样不可行,那么要么是 Ghostscript 错误,要么是你的 PDF 在某种程度上无效。Acrobat 打开它并不能阻止它无效,Acorbat 打开许多损坏的 PDF 文件....
错误消息是对于那些使用 PostScript 的人来说很有帮助 ;-) 对于不懂 PostScript 的人来说,这意味着'出了些问题',但如果您不懂 PostScript,那么这就是您所能想到的最有用的错误。在这种情况下,它会告诉您操作数超出了运算符的允许范围。
您可以尝试运行-dPDFDEBUG
,它会告诉您 PDF 文件中的哪个对象导致了问题。但除非您非常了解 PDF,否则这可能对您也没什么帮助。
最好的办法是打开一个错误报告http://bugs.ghostscript.com,您需要附加有问题的 PDF 文件并提供命令行来显示问题。如果它显示展示设备(即启动时打开的窗口,gswin32c.exe
没有任何参数来拖放文件),请提供该命令行,而不是 pdfwrite 命令行。假设如果设备是 pdfwrite,那么写入时就会出现问题,这大概不是。
顺便说一句,pdfwrite 不会简单地删除注释和书签,它会将 PDF 文件完全解释为图形基元,然后创建一个包含这些图形基元的全新 PDF 文件。因此,无法保证创建的 PDF 文件的内容与原始内容有任何相似之处。它们应该在外观上匹配,但对象可能会转换为不同的类型。
答案2
除了 KenS 提到的之外,请注意 XFA 注释(使用 Adobe LifeCycle 生成的 PDF 表单)Ghostscript 不支持,因此仅包含这些项的文件在通过 gswin32c 处理时可能会产生空白文件。
答案3
使用 :
gswin64c -dQUIET -dBATCH -dNOPAUSE -dSAFER -dMaxSubsetPct=100 -dPDFSETTINGS=/ebook -sDEVICE=pdfwrite -sOutputFile=outputfile.pdf inputfile.pdf
您可以用屏幕或打印机代替上面的电子书 - 这会改变图像的分辨率(72/150/300 dpi)
祝你好运 ;-)