python办公自动化---pdf文件的读取、添加水印

需要安装包:pdfminer、pypdf2

一、读取pdf中的内容

python 复制代码
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFParser
from io import StringIO

# 缓冲区
output_String = StringIO()

# 按照二进制的模式读取文件
with open('./dataFile/测试文件转换.pdf', 'rb') as f:
    # 创建一个解析器对象
    parser1 = PDFParser(f)
    # 创建一个文档对象
    doc = PDFDocument(parser1)
    # 创建资源管理器对象
    rm = PDFResourceManager()
    # 创建设备对象
    device1 = TextConverter(rm, output_String, laparams=LAParams())
    # 创建解释器对象,用来处理pdf中每一页中的内容
    interpreter = PDFPageInterpreter(rm, device1)

    # 按页循环解析pdf文件
    for page in PDFPage.create_pages(doc):
        interpreter.process_page(page)

print(output_String.getvalue())

运行结果:

二、pdf添加水印

方法一:

python 复制代码
from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
import io

"""方法一:从包含水印的文件中读取水印"""
waterMark_pdf = PdfReader('./dataFile/带水印的文件.pdf')
# 读取pdf第一页
waterMark = waterMark_pdf.getPage(0)

input_pdf = PdfReader("./dataFile/测试文件转换.pdf")
writer = PdfWriter

# 将水印加到pdf的每一页
for pageNo in range(input_pdf.getNumPages()):
    page = input_pdf.getPage(pageNo)
    page.mergePage(waterMark)
    # 将添加水印的pdf添加倒写
    writer.addPage(page)

# 将添加完水印的文件写入倒pdf中
with open("./dataFile/生成的水印文件.pdf", "wb") as f:
    writer.write(f)

方法二:

python 复制代码
from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
import io


def create_watermark(watermark_text):
    """创建水印PDF"""
    packet = io.BytesIO()
    # 创建一个新的PDF with reportlab
    can = canvas.Canvas(packet, pagesize=letter)

    # 设置透明度
    can.setFillAlpha(0.3)
    # 设置字体和大小
    can.setFont("Helvetica", 60)

    # 获取页面尺寸
    width, height = letter

    # 计算水印位置(居中)
    text_width = can.stringWidth(watermark_text, "Helvetica", 60)
    x = (width - text_width) / 2
    y = height / 2

    # 旋转45度
    can.rotate(45)
    # 绘制水印文本(可能需要调整x,y偏移量)
    can.drawString(300, 100, watermark_text)

    can.save()

    # 移动到开始位置
    packet.seek(0)
    return PdfReader(packet)


def add_watermark(input_pdf, output_pdf, watermark_text="添加水印"):
    """为PDF文件添加水印"""
    # 创建水印
    watermark = create_watermark(watermark_text)

    # 读取原始PDF
    reader = PdfReader(input_pdf)
    writer = PdfWriter()

    # 为每一页添加水印
    for page in reader.pages:
        # 合并水印和原始页面
        page.merge_page(watermark.pages[0])
        writer.add_page(page)

    # 写入输出文件
    with open(output_pdf, "wb") as output_file:
        writer.write(output_file)


add_watermark("./dataFile/测试文件转换.pdf", "./dataFile/已添加水印.pdf", "添加水印")
print(f"水印已添加,输出文件为: {'./dataFile/已添加水印.pdf'}")
相关推荐
luckys.one1 天前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
大翻哥哥1 天前
Python 2025:量化金融与智能交易的新纪元
开发语言·python·金融
zhousenshan1 天前
Python爬虫常用框架
开发语言·爬虫·python
IMER SIMPLE1 天前
人工智能-python-深度学习-经典神经网络AlexNet
人工智能·python·深度学习
CodeCraft Studio1 天前
国产化Word处理组件Spire.DOC教程:使用 Python 将 Markdown 转换为 HTML 的详细教程
python·html·word·markdown·国产化·spire.doc·文档格式转换
专注API从业者1 天前
Python/Java 代码示例:手把手教程调用 1688 API 获取商品详情实时数据
java·linux·数据库·python
java1234_小锋1 天前
[免费]基于Python的协同过滤电影推荐系统(Django+Vue+sqlite+爬虫)【论文+源码+SQL脚本】
python·django·电影推荐系统·协同过滤
看海天一色听风起雨落1 天前
Python学习之装饰器
开发语言·python·学习
XiaoMu_0011 天前
基于Python+Streamlit的旅游数据分析与预测系统:从数据可视化到机器学习预测的完整实现
python·信息可视化·旅游
THMAIL1 天前
深度学习从入门到精通 - 生成对抗网络(GAN)实战:创造逼真图像的魔法艺术
人工智能·python·深度学习·神经网络·机器学习·生成对抗网络·cnn