You need to enable JavaScript to run this app. 如何使用Python实现PDF与docx、文本、JPG格式的互相转换
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python实现PDF与docx、文本、JPG格式的互相转换

Python多格式转换功能模块实现方案

核心依赖库选型

按不同转换场景选择成熟稳定的第三方库即可实现需求,不需要从零开发解析逻辑:

  • 文档类转换依赖
    • PDF转TXT:优先选pdfplumber,比传统的PyPDF2文本提取准确率更高,能保留基本的段落排版,不会出现文字乱序问题
    • PDF转DOCX:直接用pdf2docx,专门针对PDF转Word场景开发,支持保留原文件的表格、图片、段落格式、字体样式
    • DOCX转PDF:跨平台场景用python-docx搭配reportlab实现,Windows本地部署可以直接用docx2pdf封装库,调用系统Word组件转换,格式还原度更高
    • TXT转PDF:用轻量的fpdf2或者功能更全的reportlab,支持自定义字体、行间距、页边距等排版参数
  • 图片类转换依赖
    • PDF转JPG:用PyMuPDF(别名fitz),PDF渲染效率高,支持自定义导出DPI调整清晰度,单页转换速度远高于其他同类库
    • JPG转PDF:用Pillow即可实现,支持单张或者多张图片合并导出为单个PDF文件

核心功能代码示例

所有功能都可以封装为独立函数调用,以下是最简实现逻辑:

PDF转DOCX

from pdf2docx import Converter

def pdf_to_docx(input_pdf: str, output_docx: str, page_range: tuple = (0, None)) -> None:
    # page_range 传入(起始页码, 结束页码),默认转换全部页,页码从0开始计数
    cv = Converter(input_pdf)
    cv.convert(output_docx, start=page_range[0], end=page_range[1])
    cv.close()

PDF转TXT

import pdfplumber

def pdf_to_txt(input_pdf: str, output_txt: str) -> None:
    with pdfplumber.open(input_pdf) as pdf, open(output_txt, "w", encoding="utf-8") as f:
        for page in pdf.pages:
            page_text = page.extract_text()
            if page_text:
                f.write(page_text + "\f") # 用换页符分隔不同页面内容

DOCX转PDF

# 该实现仅Windows环境可用,需提前安装Office
from docx2pdf import convert

def docx_to_pdf(input_docx: str, output_pdf: str) -> None:
    convert(input_docx, output_pdf)

TXT转PDF

from fpdf import FPDF

def txt_to_pdf(input_txt: str, output_pdf: str) -> None:
    pdf = FPDF()
    pdf.add_page()
    # 需提前放置对应字体文件解决中文显示问题
    pdf.add_font("SimSun", "", "simsun.ttc", uni=True)
    pdf.set_font("SimSun", size=12)
    
    with open(input_txt, "r", encoding="utf-8") as f:
        for line in f:
            pdf.cell(200, 10, txt=line.strip(), ln=True, align='L')
    pdf.output(output_pdf)

PDF转JPG

import fitz

def pdf_to_jpg(input_pdf: str, output_dir: str, dpi: int = 300) -> None:
    doc = fitz.open(input_pdf)
    zoom = dpi / 72
    matrix = fitz.Matrix(zoom, zoom)
    for page_num in range(len(doc)):
        page = doc.load_page(page_num)
        pix = page.get_pixmap(matrix=matrix)
        pix.save(f"{output_dir}/page_{page_num + 1}.jpg")

JPG转PDF

from PIL import Image

def jpg_to_pdf(input_jpg_list: list, output_pdf: str) -> None:
    # input_jpg_list 传入待转换的jpg文件路径列表,按顺序合并为PDF
    img_list = []
    first_img = Image.open(input_jpg_list[0]).convert("RGB")
    for jpg_path in input_jpg_list[1:]:
        img = Image.open(jpg_path).convert("RGB")
        img_list.append(img)
    first_img.save(output_pdf, save_all=True, append_images=img_list)

注意事项

  • 处理加密PDF时,所有涉及读取PDF的库都支持传入password参数打开加密文件,可提前加解密判断逻辑
  • 如果需要处理扫描版PDF的转文本/转Word需求,需要额外接入OCR能力,可以搭配pytesseract实现文字识别
  • 大文件转换时建议添加进度回调和异常捕获,避免单文件转换失败中断整个任务
  • 跨平台部署时避免依赖系统组件的方案,比如DOCX转PDF优先用python-docx+reportlab的纯Python实现方案,不要用win32com相关依赖

内容的提问来源于stack exchange,提问作者Ziead Shab Kalieh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 06:15:08