python给word添加水印_python 批量给 word,excel,ppt 或 pdf 文件添加水印
时间: 2025-05-24 19:50:43 浏览: 19
### 实现批量添加水印的库和方法
对于 Word、Excel、PPT 和 PDF 文件,可以通过不同的 Python 库来实现批量添加水印功能。以下是针对每种文件类型的解决方案:
#### 1. **Word 文档**
为了处理 Word 文档中的水印需求,可以使用 `python-docx` 库。该库允许读取和修改 `.docx` 文件的内容。
```python
from docx import Document
from docx.shared import Inches
def add_watermark_to_word(input_file, output_file, watermark_text):
document = Document(input_file)
section = document.sections[0]
header = section.header
paragraph = header.paragraphs[0]
run = paragraph.add_run(watermark_text)
run.font.size = Inches(0.3) # 设置字体大小
run.font.color.rgb = RGBColor(255, 0, 0) # 设置颜色为红色
document.save(output_file)
add_watermark_to_word('input.docx', 'output_with_watermark.docx', 'Sample Watermark')
```
此代码通过编辑页眉部分实现了简单的文字水印效果[^1]。
---
#### 2. **Excel 表格**
对于 Excel 文件,可以利用 `openpyxl` 来加载 `.xlsx` 文件,并在其单元格中嵌入透明度较高的文本作为水印。
```python
import openpyxl
from openpyxl.drawing.text import RichTextProperties, Paragraph, ParagraphProperty, CharacterProperty, Font
from openpyxl.drawing.spreadsheet_drawing import SpreadsheetDrawing
from openpyxl.chart.text import RichText
def add_watermark_to_excel(input_file, output_file, watermark_text):
workbook = openpyxl.load_workbook(input_file)
sheet = workbook.active
drawing = SpreadsheetDrawing()
text_properties = RichTextProperties(
rotation=45,
font=openpyxl.styles.Font(color="FFAAAAAA", size=72),
)
rich_text = RichText(paragraph=[Paragraph(rPr=text_properties, t=watermark_text)])
from openpyxl.drawing.text import TextBody
body = TextBody(fit_shape=True)
body.append(rich_text)
shape = openpyxl.drawing.shape.Shape(text_body=body)
drawing.anchor(sheet.cell(row=1, column=1))
sheet._drawing = drawing
workbook.save(output_file)
add_watermark_to_excel('input.xlsx', 'output_with_watermark.xlsx', 'Watermark')
```
这段代码会在工作表背景上绘制旋转的文字水印[^3]。
---
#### 3. **PowerPoint 幻灯片**
在 PowerPoint 中添加水印通常涉及向母版幻灯片插入图片或文本框。可借助 `python-pptx` 完成这一目标。
```python
from pptx import Presentation
from pptx.util import Cm
def add_watermark_to_ppt(input_file, output_file, watermark_text):
presentation = Presentation(input_file)
slide_master = presentation.slide_master
tx_box = slide_master.shapes.add_textbox(Cm(5), Cm(5), Cm(10), Cm(5)) # 添加文本框位置与尺寸
tf = tx_box.text_frame
p = tf.add_paragraph()
p.text = watermark_text
p.font.size = Cm(1.5) # 字体大小调整
p.font.color.rgb = (RGBColor(255, 0, 0)) # 颜色设置
presentation.save(output_file)
add_watermark_to_ppt('input.pptx', 'output_with_watermark.pptx', 'Confidential')
```
上述脚本会将指定字符串放置于所有幻灯片顶部区域。
---
#### 4. **PDF 文件**
关于 PDF 文件的操作,推荐采用 `PyPDF2` 或改进后的版本如 `pypdf` 进行处理。如果遇到编码错误,则需手动修正底层源码以兼容中文字符[^4]。
```python
from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.pagesizes import letter
def create_watermark_pdf(watermark_text, temp_wm_path='temp_watermark.pdf'):
canvas = Canvas(temp_wm_path, pagesize=letter)
width, height = letter
canvas.setFontSize(96)
canvas.setFillColorRGB(0.5, 0.5, 0.5, alpha=0.3) # 半透明灰色
canvas.drawCentredString(width / 2, height / 2, watermark_text)
canvas.save()
def merge_watermark_into_pdf(input_pdf, output_pdf, watermark_pdf):
reader_input = PdfReader(input_pdf)
writer_output = PdfWriter()
with open(watermark_pdf, "rb") as wm_stream:
watermark_page = PdfReader(wm_stream).pages[0]
for page_num in range(len(reader_input.pages)):
current_page = reader_input.pages[page_num]
current_page.merge_page(watermark_page)
writer_output.add_page(current_page)
with open(output_pdf, "wb") as out_f:
writer_output.write(out_f)
create_watermark_pdf("DRAFT COPY")
merge_watermark_into_pdf('input.pdf', 'output_with_watermark.pdf', 'temp_watermark.pdf')
```
以上逻辑先生成临时带水印的单页 PDF,再将其叠加到原始文档各页之上[^2]。
---
### 总结
不同格式的数据文件各有适配的最佳实践工具集;具体实施时应考虑性能优化以及异常捕获等问题以免影响用户体验。
阅读全文
相关推荐


















