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


21

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

Answers:


24

ImageMagick是用于位图图像的工具,而大多数PDF都不是。如果使用它,它将栅格化数据,这通常是不希望的。

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

pdftk A=input.pdf cat A42 A43 output pages_42_43.pdf

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

pdfjam -o pages_42_43.pdf input.pdf 42,43

另一种可能是Python(带有PyPdf库)(此处过大,但对于要求复杂的一页有用)。

#!/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)

我也要推荐pdftk。您将要使用它。
塞巴斯蒂安

pdfjam就像一个护身符,并且已经与我的LaTeX发行版一起安装。这是非常容易使用。
hdl 2013年

非常感谢。提取的页面要比完整的pdf大,pdftk因此它似乎并不能简单地提取页面。否则结果很好。
埃里克·杜米尼尔

25

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

$ convert source.pdf[1] dest.pdf 

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

不幸的是,这不会产生很好的结果,因为ImageMagick假定所有内容都是基于像素的,因此光栅化了矢量图像,例如典型PDF的版式。

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

$ gs -dNOPAUSE -dBATCH -dFirstPage=2 -dLastPage=2 -sDEVICE=pdfwrite \
    -sOutputFile=dest.pdf -f src.pdf

由于Ghostscript对PDF(PostScript派生类)的理解比ImageMagick更加深入,因此这使PDF数据保持不变。


2
实际上,这对于imagemagick而言并非如此,如果将-density参数设置为300-400左右,则png中pdf的输出文本就可以了。
buggedcom

2
当然,它在屏幕上看起来很好,但是如果您要打印,则需要将浓度设置得更高。然后,您的打印机的RIP如何应对ImageMagick输出的灰色抗锯齿像素可能会遇到麻烦。因此,您可以选择以打印机的原始分辨率输出到1位黑白,该分辨率可能是1,200 dpi或1,440 dpi或其他,并且您必须事先知道要获得清晰的输出。不,我坚持我的说法:最好将PDF数据尽可能长时间保持为矢量形式。
沃伦·杨

我发现@buggedcom -density 300是最佳选择。任何更大的文件,您都将创建巨大的临时文件-无论如何,您可能都会缩小到缩略图的大小
Mike Causer 2013年

2
您也可以像这样选择一系列页面(例如制作gif)source.pdf[3-6]
texasflood
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.