PyMuPdf 书签

问题描述 投票:0回答:1

我有一个脚本,可以将一堆 PDF 组合成一个文件,使用 PyPDF2,一切都很好,但在公司网络上真的很慢。 然后我尝试了 PyMuPdf,它的速度提高了 100 倍,但书签和元数据不会自动复制。有没有要通过的论据或要说的话“当你复制时,也不要忘记书签和元数据伙伴”?

这里有一些代码:

def pdfMerge(try_again):
    start = time.time()
    result = fitz.open()
    for pdf in sorted_list:
        print(pdf)
        with fitz.open(pdf) as file_temp:
            result.insert_pdf(file_temp)
    if try_again == 0:
        formatted_name = f"{job_number}-Combined Set-{date}.pdf"
    else:
        formatted_name = f"{job_number}-Combined Set-{date2}.pdf"
    result.save(formatted_name)
    end = time.time()
    print(end - start)
    return formatted_name

我也对其他选项持开放态度,例如 pikepdf(似乎更受支持)。

谢谢!

编辑: 我更改了代码:

def pdfMerge(try_again):
    start = time.time()
    toc = []
    result = fitz.open()
    for pdf in sorted_list:
        print(pdf)
        with fitz.open(pdf) as file_temp:
            bookmarks = file_temp.get_toc()
            file_temp.set_toc(bookmarks)
            result.insert_pdf(file_temp)
            print(bookmarks)
            bookmarks = ''
    if try_again == 0:
        formatted_name = f"{job_number}-RGB-Combined Set-{date}.pdf"
    else:
        formatted_name = f"{job_number}-RGB-Combined Set-{date2}.pdf"
    result.save(formatted_name)
    end = time.time()
    print(end - start)
    return formatted_name

print(bookmarks)
正是我所需要的,但是合并后的PDF还是空的。我做错了什么?

python bookmarks pymupdf
1个回答
1
投票

根据元数据:

它们保持不变,成为 PDF 的元数据您正在将其他文件的页面合并到其中

PyMuPDF 允许您将书签视为目录,这与普通书籍中的相同概念非常相似:书签项目简单地相互跟随,有一个级别、一个标题和一个页面,也许还有一些关于确切位置的细节它指向的目标页面。

因此,当您将 PDF 附加到另一个 PDF 时,您也可以简单地将其目录附加到目标 PDF 的目录 - 您所要做的就是增加其页码。

完成附加文件后,将结果目录(一个简单的 Python 列表)设置为结果文件的目录。

这里是一个直接取自 PyMuPDF 文档的例子:

>>> doc1 = fitz.open("file1.pdf")
>>> doc2 = fitz.open("file2.pdf")

>>> pages1 = len(doc1)  # save doc1's page count
>>> toc1 = doc1.get_toc(False)  # save TOC 1
>>> toc2 = doc2.get_toc(False)  # save TOC 2
>>> doc1.insert_pdf(doc2)  # doc2 at end of doc1
>>> for t in toc2:  # increase toc2 page numbers
        t[2] += pages1  # by old len(doc1)
>>> doc1.set_toc(toc1 + toc2)  # now result has total TOC
© www.soinside.com 2019 - 2024. All rights reserved.