Python玩转PDF:10个实用技巧让你告别繁琐操作

liftword3周前 (05-04)技术文章15

在日常工作中,PDF文件的处理常常让人头疼。无论是加密的文件无法打开,还是内容复制困难,亦或是表格数据提取不便,这些问题都极大地影响了工作效率。幸运的是,Python为我们提供了强大的工具来解决这些问题。今天,我们将介绍10个实用的PDF处理技巧,帮助你轻松应对各种PDF操作。

技巧一:PDF文件的基本读取

要开始处理PDF文件,首先需要安装一个强大的PDF处理库——PyPDF2。

pip install PyPDF2

安装完成后,你可以轻松读取PDF文件的内容:

from PyPDF2 import PdfReader

reader = PdfReader("example.pdf")
page_count = len(reader.pages)
print(f"PDF文件共有{page_count}页")

page = reader.pages[0]
text = page.extract_text()
print(text)

技巧二:PDF文件的基本信息提取

了解PDF的基本信息(如作者、标题、创建时间等)在文档管理中非常有用:

from PyPDF2 import PdfReader

reader = PdfReader("example.pdf")
metadata = reader.metadata
if metadata:
    print(f"标题: {metadata.title}")
    print(f"作者: {metadata.author}")
    print(f"主题: {metadata.subject}")
    print(f"创建工具: {metadata.creator}")
    print(f"生产工具: {metadata.producer}")

技巧三:PDF加密与解密

有些PDF文件可能设置了密码保护,但我们可以用Python进行解密:

from PyPDF2 import PdfReader, PdfWriter

reader = PdfReader("encrypted.pdf")
if reader.is_encrypted:
    reader.decrypt("password")  # 替换为实际密码
    writer = PdfWriter()
    for page in reader.pages:
        writer.add_page(page)
    with open("decrypted.pdf", "wb") as f:
        writer.write(f)
    print("PDF解密成功!")
else:
    print("PDF没有加密")

如果你想给PDF加密保护,可以这样做:

from PyPDF2 import PdfReader, PdfWriter

reader = PdfReader("example.pdf")
writer = PdfWriter()
for page in reader.pages:
    writer.add_page(page)
writer.encrypt("your_password")
with open("encrypted.pdf", "wb") as f:
    writer.write(f)
print("PDF加密成功!")

技巧四:PDF页面的提取与合并

有时候,我们可能只需要PDF的某几页,或者想将多个PDF合并成一个:

from PyPDF2 import PdfReader, PdfWriter

def extract_pages(input_path, output_path, pages):
    reader = PdfReader(input_path)
    writer = PdfWriter()
    for page_num in pages:
        if 0 <= page_num - 1 < len(reader.pages):
            writer.add_page(reader.pages[page_num - 1])
    with open(output_path, "wb") as f:
        writer.write(f)
    print(f"已提取{len(pages)}页到{output_path}")

extract_pages("example.pdf", "extracted.pdf", [1, 3, 5])

合并多个PDF:

from PyPDF2 import PdfReader, PdfWriter

def merge_pdfs(input_paths, output_path):
    writer = PdfWriter()
    for path in input_paths:
        reader = PdfReader(path)
        for page in reader.pages:
            writer.add_page(page)
    with open(output_path, "wb") as f:
        writer.write(f)
    print(f"已合并{len(input_paths)}个PDF到{output_path}")

merge_pdfs(["file1.pdf", "file2.pdf", "file3.pdf"], "merged.pdf")

技巧五:PDF转Word

PDF转Word是最常见的需求之一,我们可以借助PyPDF2库来实现:

from PyPDF2 import PdfReader
from docx import Document

def pdf_to_word(pdf_path, docx_path):
    reader = PdfReader(pdf_path)
    doc = Document()
    for page_num in range(len(reader.pages)):
        page = reader.pages[page_num]
        text = page.extract_text()
        doc.add_paragraph(text)
    doc.save(docx_path)
    print(f"已将{pdf_path}转换为{docx_path}")

pdf_to_word("example.pdf", "output.docx")

技巧六:PDF转图片

有时候,我们可能需要将PDF转换为图片,以便在社交媒体上分享:

import fitz  # PyMuPDF
import os

def pdf_to_images(pdf_path, output_folder, dpi=200):
    os.makedirs(output_folder, exist_ok=True)
    pdf = fitz.open(pdf_path)
    zoom = dpi / 72
    for i, page in enumerate(pdf):
        mat = fitz.Matrix(zoom, zoom)
        pix = page.get_pixmap(matrix=mat)
        image_path = os.path.join(output_folder, f"page_{i + 1}.jpg")
        pix.save(image_path)
    print(f"已将{pdf_path}转换为{pdf.page_count}张图片")
    pdf.close()

pdf_to_images("example.pdf", "output_images")

技巧七:PDF表格数据提取

处理PDF中的表格数据是一个常见难题,我们可以使用tabula-py库来解决:

pip install tabula-py
import tabula
import pandas as pd

def extract_tables(pdf_path, output_excel):
    tables = tabula.read_pdf(pdf_path, pages='all', multiple_tables=True)
    with pd.ExcelWriter(output_excel) as writer:
        for i, table in enumerate(tables):
            sheet_name = f"Table_{i + 1}"
            table.to_excel(writer, sheet_name=sheet_name, index=False)
    print(f"已从{pdf_path}提取{len(tables)}个表格到{output_excel}")

extract_tables("example.pdf", "tables.xlsx")

技巧八:PDF文本搜索与替换

如果你需要在PDF中搜索特定内容,或者替换某些文本:

from PyPDF2 import PdfReader
import re

def search_text(pdf_path, search_term):
    reader = PdfReader(pdf_path)
    results = []
    for page_num, page in enumerate(reader.pages):
        text = page.extract_text()
        matches = re.finditer(search_term, text, re.IGNORECASE)
        for match in matches:
            start = max(0, match.start() - 20)
            end = min(len(text), match.end() + 20)
            context = text[start:end]
            results.append({
                "page": page_num + 1,
                "context": context
            })
    return results

results = search_text("example.pdf", "Python")
for result in results:
    print(f"第{result['page']}页: ...{result['context']}...")

技巧九:PDF添加水印

最后,我们来看一个实用的技巧:如何给PDF添加水印:

from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
import io

def add_watermark(input_pdf, output_pdf, watermark_text):
    packet = io.BytesIO()
    c = canvas.Canvas(packet, pagesize=letter)
    width, height = letter
    c.setFont("Helvetica", 50)
    c.setFillAlpha(0.3)
    c.rotate(45)
    c.drawString(height / 2, 0, watermark_text)
    c.save()
    packet.seek(0)
    watermark = PdfReader(packet)
    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 f:
        writer.write(f)
    print(f"已为{input_pdf}添加水印并保存为{output_pdf}")

add_watermark("example.pdf", "watermarked.pdf", "水印")

通过这10个技巧,你应该已经掌握了Python处理PDF的基本方法。从简单的文本提取到复杂的表单填写,从文件合并到水印添加,Python都能帮你轻松搞定。希望这些技巧能帮助你提高工作效率,解决PDF处理中的各种问题。

相关文章

零基础玩转Python生成PDF!5分钟实战教程助你轻松上头条

一、为什么Python生成PDF能成为流量密码?办公自动化刚需:90%企业需要自动化报表生成能力知识付费必备:电子书、付费教程制作核心技能数据可视化新场景:动态生成可视化报告成趋势头条内容创新:原创技...

信创平台下使用 Python 的 PyPDF2 库,将PDF文件拆分成单页

如何将一个多页码的PDF文档拆分成一页一页的单页呢?究竟怎样才能把一个拥有众多页码的 PDF 文档拆解为一页一页的单独页面呢?在探寻将多页码的 PDF 文档拆分成一页一页单页的有效途径时,或许利用使用...

高效办公!Python 批量生成PDF文档是如何做到的?

前言:日常办公中,经常会使用PDF文档,难免需要对PDF文档进行编辑,有时候PDF文档中的大部分内容都是一样的,只是发送对象不同。这种模板套用的场景下,使用Python进行自动化就尤为方便,用最短的时...

10分钟实现PDF转Word神器!看DeepSeek如何用Python解放打工人

开篇痛点每个被PDF折磨过的职场人都懂——领导发来的扫描件要修改,手动抄到Word需要2小时;网上下载的报告想复制数据,却变成乱码…今天我们用Python+DeepSeek,10分钟打造一个智能转换工...

pdfkit | 利用python实现html文件转pdf

在用jupyter notebook写代码文档的时候,有时需要导出pdf版本,但jupyter会报错。我在想,除了网上的debug方法,还没有其他方案可以生成pdf。度娘搜了下,很多博客推荐Pytho...

Python一行代码实现PDF转Excel(python如何将pdf转化为excel)

第三方包tabula工具适用于从PDF中提取可复制(非图片格式)的表格数据,并输出表格安装pip install tabula-py函数调用df= tabula.read_pdf("PDF文件...