是否可以使用 Python 合并单独的 PDF 文件?
假设是这样,我需要进一步扩展它。我希望遍历目录中的文件夹并重复此过程。
我可能会碰运气,但是否可以排除每个 PDF 中包含的页面(我的报告生成总是创建一个额外的空白页)。
原文由 Btibert3 发布,翻译遵循 CC BY-SA 4.0 许可协议
文件串联
from PyPDF2 import PdfMerger
pdfs = ['file1.pdf', 'file2.pdf', 'file3.pdf', 'file4.pdf']
merger = PdfMerger()
for pdf in pdfs:
merger.append(pdf)
merger.write("result.pdf")
merger.close()
如果需要,您可以传递文件句柄而不是文件路径。
文件合并
如果你想要更细粒度的合并控制,有一个 merge
PdfMerger
方法,它允许你在输出文件中指定一个插入点,这意味着你可以在任何地方插入页面在文件中。 append
方法可以被认为是 merge
其中插入点是文件的末尾。
例如
merger.merge(2, pdf)
在这里,我们将整个 pdf 插入到输出中,但在第 2 页。
页面范围
如果您希望控制从特定文件追加哪些页面,您可以使用 pages
关键字参数 append
和 merge
的传递形式 (start, stop[, step])
(就像常规的 range
函数)。
例如
merger.append(pdf, pages=(0, 3)) # first 3 pages
merger.append(pdf, pages=(0, 6, 2)) # pages 1,3, 5
如果您指定的范围无效,您将得到一个 IndexError
。
注意: 另外,为避免文件保持打开状态,应在写入合并文件后调用 PdfFileMerger
的关闭方法。这可确保及时关闭所有文件(输入和输出)。遗憾的是 PdfFileMerger
没有作为上下文管理器实现,所以我们可以使用 with
关键字,避免显式关闭调用并获得一些简单的异常安全。
您可能还想查看作为 pypdf2 的一部分提供的 pdfcat
脚本。您可以完全避免编写代码的需要。
PyPdf2 github 还 包含 一些演示合并的示例代码。
PyMuPDF
另一个值得一看的库是 PyMuPdf 。合并同样简单。
从命令行:
python -m fitz join -o result.pdf file1.pdf file2.pdf file3.pdf
从代码
import fitz
result = fitz.open()
for pdf in ['file1.pdf', 'file2.pdf', 'file3.pdf']:
with fitz.open(pdf) as mfile:
result.insertPDF(mfile)
result.save("result.pdf")
有很多选项,在项目 wiki 中有详细说明。
原文由 Paul Rooney 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答4.9k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
4 回答825 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
使用 Pypdf 或其继承者 PyPDF2 :
(以及更多)
这是一个适用于这两个版本的示例程序。