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

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

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

答案1

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

$ convert source.pdf[1] dest.pdf 

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

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

更好的工作工具是鬼脚本,您可能已经安装了:

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

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

答案2

ImageMagick 是一个用于位图图像的工具,而大多数 PDF 都不是。如果你使用它,它会光栅化数据,这通常是不可取的。

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

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

如果您安装了带有 PDFLaTeX 的 LaTeX,则可以使用pdf页面. pdfpages 有一个外壳包装器,pdfjam

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

另一种可能性(这里有点过头了,但对于比一页更复杂的需求很有用)是Pythonpypdf图书馆。

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

答案3

此问答来自 2011 年。截至 2021 年,我认为为此目的最稳定且维护良好的选项是 qpdf:

qpdf input.pdf --pages 。 12 -- 输出.pdf

页码似乎从 1 开始,但我还没有检查当 pdf 文件具有页码元数据时这是如何工作的。

我使用 pdftk 做了很多年,但 pdftk 的设计很差,并且依赖于过时的库版本。

相关内容