基礎(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"])
更多建議: