使用预览包生成文档中图像的单独 PDF 已经介绍过,例如,在此主题中。但是,我想了解如何使用 Ghostscript 输出每个单独的页面。回顾一下,我使用的命令是
\usepackage[active, pdftex, tightpage]{preview}
随着
\begin{preview}
\begin{tikzpicture}
\end{tikzpicture}
\end{preview}
在链接的讨论中,建议使用此命令
gs -opics%2d.pdf -sDEVICE=pdfwrite file.pdf
然而,存在两个问题。
- 该命令似乎不起作用。仅生成一个 pdf 文件,并且该文件有多页。
- 生成的文件似乎比原始文件小得多。我对 GS 的压缩有点担心。对于需要打印的文件来说,这是一件值得担心的事情吗?如果是这样,你如何让 GS 输出的内容与原始文件完全没有压缩?
答案1
您可以使用 pdftk 执行此操作:
pdftk foo.pdf burst output foo_p%03d.pdf
我认为这里不存在有损压缩的问题。GS 不会做任何类似的事情。但是,它可能没有嵌入字体,或者它只是对字体进行了子集设置。要检查这一点,您可以使用 pdffonts。也有可能您用来生成原始 pdf 的任何软件都只是生成了低效的代码。
答案2
Q1:是的,该-ofilename%d.ext
格式不适用于pdfwrite
或pswrite
gs 设备。您必须使用-dFirstPage=n -dLastPage=n
来拉出第 n 页。不过,正如 Ben 所建议的那样,使用类似 pdftk 的东西可能更容易。
Q2:通常文件看起来更小,只是因为 gs 在生成高效 PDF 方面做得更好。但是,如果有位图图像,它可能会进行下采样或有损编码。以下选项应该可以避免这种情况:
-dPDFSETTINGS=/prepress -dAutoRotatePages=/None
-dDownsampleColorImages=false -dDownsampleGrayImages=false -dDownsampleMonoImages=false
-dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode
-dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode