基礎(chǔ)示例

from PyPDF2 import PdfWriter

merger = PdfWriter()

for pdf in ["file1.pdf", "file2.pdf", "file3.pdf"]:
    merger.append(pdf)

merger.write("merged-pdf.pdf")
merger.close()

有關(guān)詳細(xì)信息,請(qǐng)參閱 Paul Rooney 在 StackOverflow 上的出色回答。

顯示更多合并選項(xiàng)

from PyPDF2 import PdfWriter

merger = PdfWriter()

input1 = open("document1.pdf", "rb")
input2 = open("document2.pdf", "rb")
input3 = open("document3.pdf", "rb")

# add the first 3 pages of input1 document to output
merger.append(fileobj=input1, pages=(0, 3))

# insert the first page of input2 into the output beginning after the second page
merger.merge(position=2, fileobj=input2, pages=(0, 1))

# append entire input3 document to the end of the output document
merger.append(input3)

# Write to an output PDF document
output = open("document-output.pdf", "wb")
merger.write(output)

# Close File Descriptors
merger.close()
output.close()

append

?append? 在 ?PdfWriter? 中得到了輕微的擴(kuò)展。

參數(shù):

fileobj:要合并的 PdfReader 或文件名

outline_item:指向插入文件開(kāi)頭的大綱/書(shū)簽字符串。如果沒(méi)有或省略,則不會(huì)添加書(shū)簽。

pages:要合并的頁(yè)面;您還可以提供要合并的頁(yè)面列表 None(默認(rèn))意味著將合并整個(gè)文檔。 

import_outline:從源中導(dǎo)入/忽略相關(guān)輪廓(默認(rèn)為 True) 

excluded_fields:導(dǎo)入對(duì)象要忽略的鍵列表;如果“/Annots”是列表的一部分,注釋將被忽略如果“/B”是列表的一部分,文章將被忽略

示例:

writer.append("source.pdf",(0,10))  # append the first 10 pages of source.pdf

writer.append(reader,"page 1 and 10",[0,9]) #append first and 10th page from reader and create an outline)

在合并過(guò)程中,相關(guān)的命名目的地也將被導(dǎo)入。

如果你想在目的地中間插入頁(yè)面,使用merge(它提供(插入)位置)

您現(xiàn)在可以多次插入同一頁(yè)。您還可以使用列表一次多次插入同一頁(yè)面:

例如: writer.append(reader,[0,1,0,2,0]) 將插入第 (1)、(2) 頁(yè),第 (0) 頁(yè)之前、中間和之后

add_page / insert_page

建議改用?append?或?merge?

reset_translation

在克隆過(guò)程中,如果一個(gè)對(duì)象已經(jīng)被克隆過(guò),則不會(huì)再次克隆它,返回一個(gè)這個(gè)之前克隆過(guò)的對(duì)象的指針。因此,如果您添加/合并一個(gè)已經(jīng)添加的頁(yè)面,相同的對(duì)象將被第二次添加。如果以后修改這兩個(gè)頁(yè)面中的任何一個(gè),兩個(gè)頁(yè)面都可以獨(dú)立修改。

要重置,請(qǐng)調(diào)用 ?writer.reset_translation(reader)?

Advanced cloning

為了防止頁(yè)面/對(duì)象之間的副作用,對(duì)象和所有鏈接的對(duì)象在合并期間被鏈接。

如果您使用 PdfWriter.append/merge/add_page/insert_page,此過(guò)程將自動(dòng)應(yīng)用。如果您想在“手動(dòng)”附加對(duì)象之前克隆一個(gè)對(duì)象,請(qǐng)使用任何 PdfObject 的克隆函數(shù):例如:

cloned_object = object.clone(writer)

如果你嘗試克隆一個(gè)已經(jīng)屬于 writer 的對(duì)象,它會(huì)返回相同的對(duì)象

cloned_object == object.clone(writer)  # -> returns True

同樣,如果您嘗試克隆一個(gè)對(duì)象兩次,它將返回先前克隆的對(duì)象

object.clone(writer) == object.clone(writer)  # -> returns True

另外請(qǐng)注意,如果您克隆一個(gè)對(duì)象,您將克隆下面的所有對(duì)象,包括 IndirectObject 指向的對(duì)象。因?yàn)槿绻憧寺∫粋€(gè)包含一些文章(“/B”)的頁(yè)面,那么不僅是第一篇文章,還有所有鏈接的文章,以及可以閱讀這些文章的頁(yè)面都會(huì)被復(fù)制。這意味著您可以復(fù)制很多對(duì)象,這些對(duì)象將保存在輸出 pdf 中。

為了防止,您可以提供要忽略的字典中已定義字段的列表:

例如: new_page  = writer.add_page(reader.pages[0],excluded_fields=["/B"])