使用PyPDF2 写一个能将图章插入PDF的代码,要求可以手动选择图章以及PDF路径
时间: 2024-05-02 20:22:43 浏览: 156
Python实现给PDF加骑缝章效果源代码
5星 · 资源好评率100%
好的,关于你的问题,我可以为你提供以下的Python代码示例。在运行代码前需要确保安装了 `PyPDF2` 库。
```python
import PyPDF2
from tkinter.filedialog import askopenfilename
# 定义插入图章的函数
def insert_stamp(pdf_path, stamp_path):
with open(stamp_path, 'rb') as stamp_file, open(pdf_path, 'rb') as pdf_file:
# 创建PdfFileReader实例对象
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
pdf_writer = PyPDF2.PdfFileWriter()
# 获取PDF中的总页数
num_pages = pdf_reader.getNumPages()
# 选择图章文件
stamp_reader = PyPDF2.PdfFileReader(stamp_file)
stamp_page = stamp_reader.getPage(0)
# 获取图章宽度,高度
stamp_width = stamp_page.mediaBox.getWidth()
stamp_height = stamp_page.mediaBox.getHeight()
# 让用户手动选择插入的页码
page_num = int(input(f"请输入要插入图章的页码 (共 {num_pages} 页): ")) - 1
# 获取所选页的内容
page_reader = pdf_reader.getPage(page_num)
page_writer = PyPDF2.PageObject.createBlankPage(None, page_reader.mediaBox.getWidth(), page_reader.mediaBox.getHeight())
# 在所选页的中央插入图章
x_pos = (page_reader.mediaBox.getWidth() - stamp_width) / 2
y_pos = (page_reader.mediaBox.getHeight() - stamp_height) / 2
page_writer.mergeTranslatedPage(stamp_page, x_pos, y_pos)
# 将插入了图章的页添加到pdf_writer对象
pdf_writer.addPage(page_writer)
# 将其他页逐页添加到pdf_writer
for i in range(num_pages):
if i != page_num:
pdf_writer.addPage(pdf_reader.getPage(i))
# 输出合并后的PDF到新文件
output_path = pdf_path.replace('.pdf', '_with_stamp.pdf')
with open(output_path, 'wb') as output_file:
pdf_writer.write(output_file)
print(f"图章已成功插入到第 {page_num+1} 页。新PDF文件路径为:{output_path}")
# 让用户手动选择文件
pdf_path = askopenfilename(title="请选择要插入图章的PDF文件", filetypes=(("PDF files", "*.pdf"), ("All files", "*.*")))
stamp_path = askopenfilename(title="请选择要插入的图章文件", filetypes=(("PDF files", "*.pdf"), ("All files", "*.*")))
# 调用函数插入图章
insert_stamp(pdf_path, stamp_path)
```
请注意,这个程序需要手动输入选择的页码,并且在选择图章后才能开始运行。如果你有更详细的需求,可以再告诉我进行修改。
阅读全文