本文目录导读:

我来系统地介绍Python操作PDF文件的常见方法,包括读取、写入、编辑和处理等操作。
常用Python PDF库
# 安装常用库 # pip install PyPDF2 # 读取、拆分、合并PDF # pip install pdfplumber # 提取文本和表格 # pip install reportlab # 创建新PDF # pip install pdfminer.six # 高级文本提取 # pip install pdf2image # PDF转图片
读取PDF内容
# 方法1:使用PyPDF2读取
import PyPDF2
def read_pdf_pypdf2(file_path):
"""读取PDF文本内容"""
with open(file_path, 'rb') as file:
pdf_reader = PyPDF2.PdfReader(file)
text = ""
for page_num in range(len(pdf_reader.pages)):
page = pdf_reader.pages[page_num]
text += page.extract_text() + "\n"
return text
# 方法2:使用pdfplumber(更准确)
import pdfplumber
def read_pdf_plumber(file_path):
"""更准确地读取PDF内容"""
text = ""
with pdfplumber.open(file_path) as pdf:
for page in pdf.pages:
text += page.extract_text() + "\n"
return text
# 方法3:提取表格数据
def extract_tables_from_pdf(file_path):
"""提取PDF中的表格"""
tables = []
with pdfplumber.open(file_path) as pdf:
for page in pdf.pages:
page_tables = page.extract_tables()
tables.extend(page_tables)
return tables
创建新PDF
from reportlab.lib.pagesizes import letter, A4
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image, Table
def create_simple_pdf(output_path):
"""创建简单PDF文档"""
# 创建文档
doc = SimpleDocTemplate(output_path, pagesize=A4)
# 创建样式
styles = getSampleStyleSheet()
# 构建内容
story = []
# 添加标题= Paragraph("PDF生成示例", styles['Title'])
story.append(title)
# 添加段落
text = """
这是一个使用Python生成的PDF文档示例。
包含文本、图片和表格等多种元素。
"""
paragraph = Paragraph(text, styles['Normal'])
story.append(paragraph)
# 添加表格
data = [
['姓名', '年龄', '城市'],
['张三', '25', '北京'],
['李四', '30', '上海'],
['王五', '28', '广州']
]
table = Table(data)
story.append(table)
# 构建PDF
doc.build(story)
print(f"PDF已创建: {output_path}")
# 创建带表格和图片的PDF
def create_complex_pdf(output_path, image_path=None):
"""创建复杂PDF"""
doc = SimpleDocTemplate(output_path, pagesize=A4)
styles = getSampleStyleSheet()
story = []
# 标题
story.append(Paragraph("公司年度报告", styles['Title']))
story.append(Spacer(1, 20))
# 段落
content = """
本报告总结了公司过去一年的经营状况和发展成果。
通过全体员工的共同努力,我们取得了显著的成绩。
"""
story.append(Paragraph(content, styles['Normal']))
story.append(Spacer(1, 15))
# 添加图片
if image_path:
try:
img = Image(image_path, width=400, height=300)
story.append(img)
except:
print(f"无法加载图片: {image_path}")
# 添加表格
data = [
['部门', '业绩', '达成率'],
['销售部', '100万', '95%'],
['技术部', '完成8个项目', '100%'],
['市场部', '拓展50家客户', '90%']
]
table = Table(data)
story.append(Spacer(1, 20))
story.append(table)
doc.build(story)
# 使用示例
# create_simple_pdf("example.pdf")
# create_complex_pdf("report.pdf", "chart.png")
合并和拆分PDF
from PyPDF2 import PdfMerger, PdfWriter, PdfReader
def merge_pdfs(pdf_list, output_path):
"""合并多个PDF文件"""
merger = PdfMerger()
for pdf in pdf_list:
merger.append(pdf)
merger.write(output_path)
merger.close()
print(f"合并完成: {len(pdf_list)}个文件 → {output_path}")
def split_pdf(input_pdf, output_prefix):
"""拆分PDF为单页"""
reader = PdfReader(input_pdf)
for i, page in enumerate(reader.pages):
writer = PdfWriter()
writer.add_page(page)
output_file = f"{output_prefix}_page_{i+1}.pdf"
with open(output_file, 'wb') as output:
writer.write(output)
print(f"拆分完成: {len(reader.pages)}页")
PDF加密和解密
from PyPDF2 import PdfReader, PdfWriter
def encrypt_pdf(input_pdf, output_pdf, password):
"""加密PDF文件"""
reader = PdfReader(input_pdf)
writer = PdfWriter()
# 复制所有页面
for page in reader.pages:
writer.add_page(page)
# 设置密码
writer.encrypt(password)
# 保存加密文件
with open(output_pdf, 'wb') as file:
writer.write(file)
print(f"PDF已加密: {output_pdf}")
def decrypt_pdf(input_pdf, output_pdf, password):
"""解密PDF文件"""
reader = PdfReader(input_pdf)
if reader.is_encrypted:
reader.decrypt(password)
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
with open(output_pdf, 'wb') as file:
writer.write(file)
print(f"PDF已解密: {output_pdf}")
高级操作示例
import io
from PyPDF2 import PdfWriter, PdfReader
from pdf2image import convert_from_path
def pdf_images_to_text(pdf_path):
"""将扫描版PDF转为文本(需要OCR)"""
# 首先安装:pip install pdf2image pytesseract
from PIL import Image
import pytesseract
# 转换为图片
images = convert_from_path(pdf_path)
text = ""
for i, image in enumerate(images):
# OCR识别
page_text = pytesseract.image_to_string(image, lang='chi_sim')
text += f"--- 第{i+1}页 ---\n{page_text}\n"
return text
def extract_metadata(pdf_path):
"""提取PDF元数据"""
reader = PdfReader(pdf_path)
metadata = reader.metadata
if metadata:
print("PDF元数据:")
for key, value in metadata.items():
print(f"{key}: {value}")
def modify_pdf_pages(input_pdf, output_pdf):
"""修改PDF页面顺序和旋转"""
reader = PdfReader(input_pdf)
writer = PdfWriter()
# 旋转第一页180度
if len(reader.pages) > 0:
page = reader.pages[0]
page.rotate(180)
writer.add_page(page)
# 添加其他页面
for page_num in range(1, len(reader.pages)):
writer.add_page(reader.pages[page_num])
# 重排页面顺序(倒序)
# for page in reversed(reader.pages):
# writer.add_page(page)
with open(output_pdf, 'wb') as file:
writer.write(file)
实用工具函数
import os
class PDFTools:
"""PDF工具类"""
@staticmethod
def get_pdf_info(file_path):
"""获取PDF信息"""
reader = PdfReader(file_path)
info = {
'页数': len(reader.pages),
'文件大小': f"{os.path.getsize(file_path)/1024:.2f} KB",
'是否加密': reader.is_encrypted,
'元数据': reader.metadata
}
return info
@staticmethod
def convert_to_images(pdf_path, output_folder):
"""PDF转图片"""
images = convert_from_path(pdf_path)
for i, image in enumerate(images):
image_path = os.path.join(output_folder, f"page_{i+1}.jpg")
image.save(image_path, "JPEG")
return len(images)
@staticmethod
def batch_process(folder_path, operation='info'):
"""批量处理PDF文件"""
results = []
for filename in os.listdir(folder_path):
if filename.lower().endswith('.pdf'):
file_path = os.path.join(folder_path, filename)
if operation == 'info':
results.append(PDFTools.get_pdf_info(file_path))
elif operation == 'count':
reader = PdfReader(file_path)
results.append({'file': filename, 'pages': len(reader.pages)})
return results
完整示例程序
def main():
"""PDF操作演示程序"""
print("=== PDF操作演示 ===\n")
# 创建示例PDF
print("1. 创建示例PDF...")
sample_text = """
Python PDF 操作手册
第一章:基础操作
Python提供了多种库来操作PDF文件,
包括读取、创建、修改和转换等功能。
主要功能清单:
- 读取PDF内容
- 创建新的PDF文档
- 合并多个PDF
- 拆分PDF为单页
- 添加水印
- 加密解密
"""
# 实际使用时,创建PDF并执行各种操作
create_simple_pdf("sample.pdf")
print("2. 读取PDF内容...")
content = read_pdf_plumber("sample.pdf")
print(content)
print("3. 获取PDF信息...")
info = PDFTools.get_pdf_info("sample.pdf")
for key, value in info.items():
print(f"{key}: {value}")
if __name__ == "__main__":
main()
注意事项
- 库的选择:根据需求选择合适的库
- 编码问题:中文PDF可能需要特殊处理
- 加密PDF:需要密码才能操作
- 性能考虑:大文件处理时注意内存使用
- 版本兼容:不同PDF版本可能支持功能不同
这些示例涵盖了Python操作PDF文件的主要场景,你可以根据具体需求选择合适的库和方法。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播