如何使用 PyPDF2 库在 PDF 文件中添加水印?
时间: 2024-12-26 09:28:02 浏览: 6
PyPDF2是一个Python库,用于处理PDF文件,包括合并、拆分、提取内容等。要在PDF文件中添加水印,你需要首先安装这个库(如果你还没有安装,可以使用`pip install PyPDF2`命令),然后按照以下步骤操作:
1. 导入必要的模块:
```python
import PyPDF2
from PIL import Image
from io import BytesIO
```
这里我们还需要PIL库来处理图片。
2. 加载原始PDF文件和水印图片:
```python
# 打开PDF文件
with open('input.pdf', 'rb') as original_pdf:
pdf_reader = PyPDF2.PdfFileReader(original_pdf)
# 加载水印图片
watermark_image = Image.open('watermark.png')
```
3. 创建一个新的PDF writer对象,并设置页面大小和透明度:
```python
# 创建新的PDF writer
output_writer = PyPDF2.PdfFileWriter()
# 设置透明度,0.5表示半透明
transparency = 0.5
# 获取原PDF的页数
num_pages = pdf_reader.getNumPages()
```
4. 对每一页添加水印:
```python
for page_num in range(num_pages):
# 从原PDF中获取页面
page = pdf_reader.getPage(page_num)
# 将页面转换为Image对象
page_image = Image.frombytes(
mode='RGB',
size=(page.mediaBox.getWidth(), page.mediaBox.getHeight()),
data=page.extractImage(),
)
# 水印处理,将图像缩放并置于页面顶部左角
watermark_size = watermark_image.size
watermark_scaled = watermark_image.resize((int(watermark_size[0] * transparency), int(watermark_size[1] * transparency)))
x_position = (page.mediaBox.getWidth() - watermark_scaled.width) // 2
y_position = 10 # 或者根据需求调整位置
# 将水印叠加到页面上
page_image.paste(watermark_scaled, (x_position, y_position), mask=watermark_scaled)
# 将修改后的页面转换回BytesIO对象
buffer = BytesIO()
page_image.save(buffer, format="PNG")
page_buffer = buffer.getvalue()
# 将图像数据插入到新的PDF中
watermarked_page = PyPDF2.generic.PdfPageObject.createBlankPage(pdf_writer)
watermarked_page.mergePage(page)
output_writer.addPage(PdfFileReader(BytesIO(page_buffer)).getPage(0))
```
5. 写入结果PDF:
```python
# 写入带有水印的新PDF
with open('output_with_watermark.pdf', 'wb') as output_file:
output_writer.write(output_file)
```
阅读全文