使用转换从 PDF 文件中抓取特定页面?

ixt*_*lix 24 pdf imagemagick

我知道我以前做过这个,所以我确定这是可能的,我只是忘记了怎么做。有一种方法可以告诉 convert 抓取 PDF 的特定页面,我想将该页面的格式保留为 PDF。

War*_*ung 28

您可以使用下标符号convert(1)“索引”到 PDF 中:

$ convert source.pdf[1] dest.pdf 
Run Code Online (Sandbox Code Playgroud)

索引值取决于 PDF 导出器如何为页面编号。在此处对文件的测试中,数字似乎是从零开始的,因此上面的示例为您提供了文档中的第二页。我在网上看到过一些例子,它们显示字母索引,因为显然 PDF 创建者以这种方式“编号”了该文档中的页面。

不幸的是,这并没有给出很好的结果,因为 ImageMagick 假设一切都是基于像素的,因此光栅化矢量图像,例如典型 PDF 中的排版。

一个更好的工具是Ghostscript,您可能已经安装了它:

$ gs -dNOPAUSE -dBATCH -dFirstPage=2 -dLastPage=2 -sDEVICE=pdfwrite \
    -sOutputFile=dest.pdf -f src.pdf
Run Code Online (Sandbox Code Playgroud)

这将原封不动地传递 PDF 数据,因为 Ghostscript 比 ImageMagick 更深地理解 PDF(PostScript 衍生品)。

  • 它在屏幕上看起来不错,当然,但是如果您随后进行打印,您将需要将密度设置得更高。然后,您可能会遇到打印机的 RIP 如何处理 ImageMagick 输出的灰色抗锯齿像素的问题。因此,您可以选择以打印机的原始分辨率输出到 1 位黑白,可能是 1,200 dpi,或 1,440 dpi 或其他,您必须提前知道以获得清晰的输出。不,我会坚持我的声明:最好尽可能长时间地以矢量形式保存 PDF 数据。 (3认同)
  • 实际上,imagemagick 并非如此,如果将 -density 参数设置为 300-400 左右,那么 png 中 pdf 的输出文本看起来会很好。 (2认同)
  • 您还可以像这样选择一系列页面(例如用于制作 gif)`source.pdf[3-6]` (2认同)

Gil*_*il' 26

ImageMagick 是位图图像的工具,大多数 PDF 不是。如果使用它,它会将数据栅格化,这通常是不可取的。

Pdftk可以从 PDF 文件中提取一页或多页。

pdftk A=input.pdf cat A42 A43 output pages_42_43.pdf
Run Code Online (Sandbox Code Playgroud)

如果您使用PDFLaTeX安装了 LaTeX,则可以使用pdfpages。pdfpages 有一个外壳包装器,pdfjam

pdfjam -o pages_42_43.pdf input.pdf 42,43
Run Code Online (Sandbox Code Playgroud)

另一种可能性(这里有点矫枉过正,但对于比一页更复杂的需求有用)是带有PyPdf库的Python 。

#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
for i in [42, 43]:
    output.addPage(input.getPage(i))
output.write(sys.stdout)
Run Code Online (Sandbox Code Playgroud)