【问题标题】:Adding bookmark to merged PDF's using pyPDF2使用 pyPDF2 为合并的 PDF 添加书签
【发布时间】:2020-04-28 00:20:34
【问题描述】:

我需要为新合并创建的 pdf 添加书签。我使用一个脚本,使用 pyPDF2 合并当前目录中的所有 pdf。我会很高兴用每个 pdf 的名称来构造书签。每个 PDF 可能有 1-2-3 页。

用于合并目录中所有 pdf 的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from argparse import ArgumentParser
from glob import glob
from PyPDF2 import PdfFileReader, PdfFileWriter
import os
def merge(path, output_filename):
    output = PdfFileWriter()
    for pdffile in glob(path + os.sep + '*.pdf'):
        if pdffile == output_filename:
            continue
        print("Se adauga '%s'" % pdffile)
        document = PdfFileReader(open(pdffile, 'rb'))
        for i in range(document.getNumPages()):
            output.addPage(document.getPage(i))

    print("S-a creat pdf '%s'" % output_filename)
    with open(output_filename, "wb") as f:
                output.write(f)
if __name__ == "__main__":
    parser = ArgumentParser()
    # Add more options if you like
    parser.add_argument("-o", "--output",
                        dest="output_filename",
                        default="Test.pdf",
                        help="write merged PDF to FILE",
                        metavar="FILE")
    parser.add_argument("-p", "--path",
                        dest="path",
                        default=".",
                        help="path of source PDF files")
    args = parser.parse_args()
    merge(args.path, args.output_filename)

【问题讨论】:

    标签: python-3.x pdf bookmarks pypdf2


    【解决方案1】:

    您可以使用 PyPDF2 PdfFileMerger 方法,该方法将书签字符串作为第二个参数:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    from argparse import ArgumentParser
    from glob import glob
    from PyPDF2 import PdfFileMerger
    import os
    
    def merge(path, output_filename):
        merger = PdfFileMerger(strict=False)
        for pdffile in glob(path + os.sep + '*.pdf'):
            if pdffile == output_filename:
                continue
            print(f"Appending: '{pdffile}'")
            bookmark = os.path.basename(pdffile[:-4])
            merger.append(pdffile, bookmark)
        merger.write(output_filename)
        merger.close()
    
    if __name__ == "__main__":
        parser = ArgumentParser()
        # Add more options if you like
        parser.add_argument("-o", "--output",
                            dest="output_filename",
                            default="Test.pdf",
                            help="write merged PDF to FILE",
                            metavar="FILE")
        parser.add_argument("-p", "--path",
                            dest="path",
                            default=".",
                            help="path of source PDF files")
        args = parser.parse_args()
        merge(args.path, args.output_filename)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 2016-05-13
      相关资源
      最近更新 更多