基础示例
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()
有关详细信息,请参阅 Paul Rooney 在 StackOverflow 上的出色回答。
显示更多合并选项
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
中得到了轻微的扩展。
参数:
fileobj:要合并的 PdfReader 或文件名
outline_item:指向插入文件开头的大纲/书签字符串。如果没有或省略,则不会添加书签。
pages:要合并的页面;您还可以提供要合并的页面列表 None(默认)意味着将合并整个文档。
import_outline:从源中导入/忽略相关轮廓(默认为 True)
excluded_fields:导入对象要忽略的键列表;如果“/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)
在合并过程中,相关的命名目的地也将被导入。
如果你想在目的地中间插入页面,使用merge(它提供(插入)位置)
您现在可以多次插入同一页。您还可以使用列表一次多次插入同一页面:
例如:
writer.append(reader,[0,1,0,2,0])
将插入第 (1)、(2) 页,第 (0) 页之前、中间和之后
add_page / insert_page
建议改用append
或merge
reset_translation
在克隆过程中,如果一个对象已经被克隆过,则不会再次克隆它,返回一个这个之前克隆过的对象的指针。因此,如果您添加/合并一个已经添加的页面,相同的对象将被第二次添加。如果以后修改这两个页面中的任何一个,两个页面都可以独立修改。
要重置,请调用 writer.reset_translation(reader)
Advanced cloning
为了防止页面/对象之间的副作用,对象和所有链接的对象在合并期间被链接。
如果您使用 PdfWriter.append/merge/add_page/insert_page,此过程将自动应用。如果您想在“手动”附加对象之前克隆一个对象,请使用任何 PdfObject 的克隆函数:例如:
cloned_object = object.clone(writer)
如果你尝试克隆一个已经属于 writer 的对象,它会返回相同的对象
cloned_object == object.clone(writer) # -> returns True
同样,如果您尝试克隆一个对象两次,它将返回先前克隆的对象
object.clone(writer) == object.clone(writer) # -> returns True
另外请注意,如果您克隆一个对象,您将克隆下面的所有对象,包括 IndirectObject 指向的对象。因为如果你克隆一个包含一些文章(“/B”)的页面,那么不仅是第一篇文章,还有所有链接的文章,以及可以阅读这些文章的页面都会被复制。这意味着您可以复制很多对象,这些对象将保存在输出 pdf 中。
为了防止,您可以提供要忽略的字典中已定义字段的列表:
例如:
new_page = writer.add_page(reader.pages[0],excluded_fields=["/B"])
更多建议: