小编典典

合并 PDF 文件

all

是否可以使用 Python 合并单独的 PDF 文件?

假设是这样,我需要进一步扩展它。我希望遍历目录中的文件夹并重复此过程。

而且我可能会碰运气,但是是否可以排除每个 PDF 中包含的页面(我的报告生成总是会创建一个额外的空白页面)。


阅读 72

收藏
2022-06-11

共1个答案

小编典典

使用Pypdf或其继任者PyPDF2

一个作为 PDF 工具包构建的纯 Python 库。它能够:

  • 逐页拆分文档,
  • 逐页合并文档,

(以及更多)

这是一个适用于两个版本的示例程序。

#!/usr/bin/env python
import sys
try:
    from PyPDF2 import PdfFileReader, PdfFileWriter
except ImportError:
    from pyPdf import PdfFileReader, PdfFileWriter

def pdf_cat(input_files, output_stream):
    input_streams = []
    try:
        # First open all the files, then produce the output file, and
        # finally close the input files. This is necessary because
        # the data isn't read from the input files until the write
        # operation. Thanks to
        # https://stackoverflow.com/questions/6773631/problem-with-closing-python-pypdf-writing-getting-a-valueerror-i-o-operation/6773733#6773733
        for input_file in input_files:
            input_streams.append(open(input_file, 'rb'))
        writer = PdfFileWriter()
        for reader in map(PdfFileReader, input_streams):
            for n in range(reader.getNumPages()):
                writer.addPage(reader.getPage(n))
        writer.write(output_stream)
    finally:
        for f in input_streams:
            f.close()
        output_stream.close()

if __name__ == '__main__':
    if sys.platform == "win32":
        import os, msvcrt
        msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
    pdf_cat(sys.argv[1:], sys.stdout)
2022-06-11