当前位置: 代码网 > it编程>前端脚本>Python > 利用Python实现文档格式互转的操作大全(PDF、Word、图片、Markdown)

利用Python实现文档格式互转的操作大全(PDF、Word、图片、Markdown)

2025年11月14日 Python 我要评论
前言: 文档格式不统一,转换麻烦我们在日常生活中经常碰到这样的场景。客户要求提交简历必须是pdf,但你只有word版,手动转换后格式全乱。需要从pdf报告中提取图表,却发现无法直接复制,只能一张张截图

前言: 文档格式不统一,转换麻烦

我们在日常生活中经常碰到这样的场景。

客户要求提交简历必须是pdf,但你只有word版,手动转换后格式全乱。

需要从pdf报告中提取图表,却发现无法直接复制,只能一张张截图。

制作演示文稿,收集到的图片大小、格式五花八门,插入后需要反复调整。

我们今天将手把手教你如何利用python,轻松实现:

pdf与图片互转: 批量提取pdf中的图片,或将多图合为pdf。

word与pdf互转: 轻松实现word批量转pdf,甚至尝试pdf转word。

markdown文档转换: 让你的极客笔记瞬间变成专业pdf/word报告。

最终,你将拥有一个强大的文档格式转换工厂,

让你的文件管理和传输效率翻倍,老板看了都点赞!

1.pdf与图片互转:批量处理

pdf虽然方便查看,但要提取其中的图片或将大量图片打包成pdf,手动操作非常麻烦。

python能帮你批量处理这些需求,实现pdf转图片和图片转pdf的自动化!

如何实现呢?

pdf转图片: pymupdf可以渲染pdf页面,并将其保存为图片。
图片转pdf: pillow可以创建图片,pymupdf可以将图片插入到pdf页面。

1.1df转多张图片:将pdf内容提取为图像

场景: 你收到一份有插图的pdf报告,想把里面的图表或每一页都提取出来作为图片素材,用于

ppt或网页展示。手动截图不仅分辨率低,还耗时。

方案: 利用pymupdf,可以批量将pdf的每一页高质量地转换为图片,并支持多种图片格式和分辨率。
安装:

pip install pymupdf

代码:

import fitz # pymupdf
import os

def pdf_to_images(pdf_path, output_folder, img_format="png", dpi=200):
    """
    将pdf文件的每一页转换为一张图片。
    这是pdf转图片和python文件转换的核心功能。
    :param pdf_path: 源pdf文件路径
    :param output_folder: 图片输出文件夹
    :param img_format: 输出图片格式 (如 "png", "jpeg", "jpg")
    :param dpi: 图片分辨率 (dots per inch),dpi越高图片越清晰但文件越大
    """
    if not os.path.exists(pdf_path): return print(f"❌ pdf文件不存在:{pdf_path}")
    os.makedirs(output_folder, exist_ok=true)

    print(f"🚀 正在将 '{os.path.basename(pdf_path)}' 转换为多张图片...")
    try:
        doc = fitz.open(pdf_path)
        zoom = dpi / 72 # 计算缩放比例 (1英寸=72点)
        mat = fitz.matrix(zoom, zoom) # 缩放矩阵

        for page_num in range(doc.page_count):
            page = doc.load_page(page_num)
            pix = page.get_pixmap(matrix=mat) # 获取页面的像素图
            
            output_image_path = os.path.join(output_folder, f"{os.path.splitext(os.path.basename(pdf_path))[0]}_page_{page_num+1}.{img_format}")
            
            # 保存像素图为图片文件
            pix.save(output_image_path)
            print(f"   ✅ 已生成图片:'{os.path.basename(output_image_path)}'")
        
        doc.close()
        print(f"✨ pdf批量转图片完成!结果保存到:'{output_folder}'")
        return true
    except exception as e:
        print(f"❌ pdf转图片失败:{e}")
        return false

if __name__ == "__main__":
    # 准备测试pdf文件 (多页,包含文本和可能图片)
    source_pdf = os.path.expanduser("~/desktop/presentation.pdf")
    if not os.path.exists(source_pdf):
        doc = fitz.open()
        p1 = doc.new_page(); p1.insert_text(fitz.point(50,50), "第一页内容和图表");
        p2 = doc.new_page(); p2.insert_text(fitz.point(50,50), "第二页内容");
        doc.save(source_pdf); doc.close()

    output_images_folder = os.path.expanduser("~/desktop/pdf转图片结果")
    
    # 示例1:将pdf转换为png图片,分辨率200dpi
    pdf_to_images(source_pdf, output_images_folder, img_format="png", dpi=200)

    # 示例2:转换为jpg图片,分辨率300dpi (更高质量,更大文件)
    # pdf_to_images(source_pdf, os.path.join(os.path.dirname(output_images_folder), "pdf_to_jpg"), img_format="jpg", dpi=300)

操作:

安装库: pip install pymupdf。

准备pdf文件: 在桌面准备一个多页pdf(如presentation.pdf)。

修改代码路径和参数: 修改 source_pdf、output_images_folder 和 img_format/dpi。

运行: 运行 python pdf_to_images.py。

效果展示:

1.2多张图片合并为一张pdf:快速制作pdf文档

场景: 你有大量图片(如扫描件、产品图集、幻灯片截图),需要将它们快速整理成一份pdf文档,方便分享或存档。

方案: pymupdf能让你将多张图片一键合并为一张多页pdf文档,并可以控制每张图片在pdf中的显示方式。

代码:

import fitz # pymupdf
from pil import image # 用于处理图片
import os

def images_to_pdf(image_paths, output_pdf_path):
    """
    将多张图片合并为一个pdf文件。
    这是python文件转换和图片转pdf的核心功能。
    :param image_paths: 包含所有要合并的图片文件路径的列表
    :param output_pdf_path: 输出pdf文件路径
    """
    if not image_paths: return print("❌ 没有提供图片文件路径。")
    os.makedirs(os.path.dirname(output_pdf_path), exist_ok=true)

    print(f"🚀 正在合并 {len(image_paths)} 张图片到 '{os.path.basename(output_pdf_path)}'...")
    doc = fitz.open() # 创建一个新的pdf文档

    try:
        for img_path in image_paths:
            if not os.path.exists(img_path):
                print(f"⚠️ 图片文件不存在,跳过:{os.path.basename(img_path)}")
                continue
            
            # 为每张图片创建一个新页面
            # fitz.open(img_path) 可以直接打开图片文件作为pdf文档处理
            img_doc = fitz.open(img_path)
            new_page_width = img_doc[0].rect.width
            new_page_height = img_doc[0].rect.height
            img_doc.close() # 关闭临时文档
            
            # 创建一个新页面,尺寸与图片匹配 (或者使用a4尺寸,然后缩放图片)
            page = doc.new_page(width=new_page_width, height=new_page_height) 
            
            # 插入图片到页面 (覆盖整个页面)
            rect = page.rect # 页面大小
            page.insert_image(rect, filename=img_path)
            print(f"   ✅ 已添加图片:'{os.path.basename(img_path)}' 到pdf。")
        
        doc.save(output_pdf_path)
        print(f"✨ 图片合并到pdf完成!结果保存到:'{output_pdf_path}'")
        return true
    except exception as e:
        print(f"❌ 图片合并到pdf失败:{e}")
        return false
    finally:
        doc.close()

if __name__ == "__main__":
    # 准备测试图片文件 (多张)
    img1_path = os.path.expanduser("~/desktop/scan_page1.png")
    img2_path = os.path.expanduser("~/desktop/scan_page2.png")
    output_pdf = os.path.expanduser("~/desktop/scanned_document.pdf")

    # 简单创建模拟图片文件
    if not os.path.exists(img1_path):
        image.new('rgb', (800, 600), color = 'red').save(img1_path)
    if not os.path.exists(img2_path):
        image.new('rgb', (800, 600), color = 'blue').save(img2_path)

    images_to_convert = [img1_path, img2_path]
    images_to_pdf(images_to_convert, output_pdf)

步骤:

安装库: pip install pymupdf pillow。

准备图片文件: 在桌面准备多张图片文件(如scan_page1.png, scan_page2.png)。

修改代码路径: 修改 images_to_convert 列表中的路径和 output_pdf。

运行: 运行 python images_to_pdf.py。

效果展示:

2.实现word与pdf互转:一键搞定报告、合同格式!

word和pdf是职场中最常用的两种文档格式。python能帮你一键在它们之间进行高效转换,彻底告别文档格式不统一的烦恼!

实现:
word转pdf: 通常需要借助外部工具或虚拟打印功能,因为它涉及word文档的渲染。docx2pdf是一个不错的选择。

pdf转word: 这是一个挑战性任务,因为pdf主要用于显示,不含结构信息。虽然有库能提取文本,但保留原始排版非常困难

2.1word批量转pdf:最常见的文档分发需求

场景: 你需要将几十份word报告或合同转换成pdf格式,方便分发和防止篡改。手动另存为pdf,效率低下。

方案: docx2pdf库能帮你一键批量将word文档转换为pdf,并保持良好的格式。

代码:

from docx2pdf import convert # 导入转换函数
import os

def batch_word_to_pdf(source_folder, output_folder):
    """
    批量将word文档转换为pdf文件。
    这是word转pdf和python文件转换的核心功能。
    :param source_folder: 源word文档文件夹路径
    :param output_folder: 输出pdf文件文件夹
    """
    if not os.path.exists(source_folder): return print(f"❌ 源文件夹不存在:{source_folder}")
    os.makedirs(output_folder, exist_ok=true)

    print(f"🚀 正在批量将 '{source_folder}' 下的word文档转换为pdf...")
    processed_count = 0
    # 遍历文件夹中的所有.docx文件
    for filename in os.listdir(source_folder):
        if filename.lower().endswith('.docx'):
            source_path = os.path.join(source_folder, filename)
            output_pdf_path = os.path.join(output_folder, os.path.splitext(filename)[0] + ".pdf")
            
            try:
                # **核心操作:调用 docx2pdf.convert()**
                convert(source_path, output_pdf_path)
                print(f"   ✅ 转换成功:'{filename}' -> '{os.path.basename(output_pdf_path)}'")
                processed_count += 1
            except exception as e:
                print(f"❌ 转换 '{filename}' 失败:{e}。请确保office/wps等已安装。")
        else:
            print(f"ℹ️ 跳过非word文件:{filename}")
    print(f"✨ word批量转pdf完成!共转换 {processed_count} 个文件。")
    return true

if __name__ == "__main__":
    # 准备测试word文档 (放入一些.docx文件)
    source_word_folder = os.path.expanduser("~/desktop/mywordreports")
    output_pdf_folder = os.path.expanduser("~/desktop/pdfreports")
    os.makedirs(source_word_folder, exist_ok=true)

    # 简单创建模拟word文档
    from docx import document as docxdocument
    if not os.path.exists(os.path.join(source_word_folder, "report1.docx")):
        doc = docxdocument(); doc.add_paragraph("这是报告1"); doc.save(os.path.join(source_word_folder, "report1.docx"))
    if not os.path.exists(os.path.join(source_word_folder, "contract.docx")):
        doc = docxdocument(); doc.add_paragraph("这是一份合同"); doc.save(os.path.join(source_word_folder, "contract.docx"))

    batch_word_to_pdf(source_word_folder, output_pdf_folder)

步骤:

安装库: pip install docx2pdf。注意:docx2pdf库需要你的系统安装了microsoft office word、wps office或libreoffice,它会调用这些软件进行转换。

准备word文件: 在桌面创建mywordreports文件夹,放入一些.docx文件。

修改代码路径: 修改 source_word_folder 和 output_pdf_folder。

运行: 运行 python word_to_pdf.py。

效果展示:

2.2pdf转word:挑战与限制并存的“逆向工程”

场景: 你收到一份pdf文档,但需要对其内容进行编辑,或提取其结构化信息到word中。pdf的固定格式让你束手无策。

方案: pdf转word是一个非常困难的“逆向工程”! 因为pdf是用来“显示”的,它不包含word那样的段落、字体、样式等结构化信息。

难点:python库(如pdfminer.six、pymupdf用于提取文本,但要完美还原word格式,几乎不可能。通常需要借助外部专业工具(如adobe acrobat、在线转换器)或复杂的ocr技术。pymupdf可以提取文本,但排版还原困难。

代码:

import fitz # pymupdf
import os

def pdf_to_text(pdf_path, output_txt_path):
    """
    从pdf文件中提取纯文本内容。
    这是pdf转word(文本部分)的基础。
    :param pdf_path: 源pdf文件路径
    :param output_txt_path: 输出文本文件路径
    """
    if not os.path.exists(pdf_path): return print(f"❌ pdf文件不存在:{pdf_path}")
    os.makedirs(os.path.dirname(output_txt_path), exist_ok=true)

    print(f"🚀 正在从 '{os.path.basename(pdf_path)}' 提取文本...")
    try:
        doc = fitz.open(pdf_path)
        text_content = ""
        for page_num in range(doc.page_count):
            page = doc.load_page(page_num)
            text_content += page.get_text() # 提取页面所有文本
        doc.close()
        
        with open(output_txt_path, "w", encoding="utf-8") as f:
            f.write(text_content)
        print(f"✅ 文本提取成功!保存到:'{output_txt_path}'")
        return true
    except exception as e:
        print(f"❌ 文本提取失败:{e}")
        return false

if __name__ == "__main__":
    source_pdf = os.path.expanduser("~/desktop/sample_pdf.pdf")
    output_txt = os.path.expanduser("~/desktop/extracted_text.txt")

    # 简单创建模拟pdf文件
    if not os.path.exists(source_pdf):
        doc = fitz.open(); doc.new_page().insert_text((50,50), "这是pdf中的文本内容。"); doc.save(source_pdf); doc.close()

    pdf_to_text(source_pdf, output_txt)

步骤:

安装库: pip install pymupdf。

准备pdf文件: 在桌面准备一个包含文本的pdf文件(如sample_pdf.pdf)。

修改代码路径: 修改 source_pdf 和 output_txt。

运行: 运行 python pdf_to_text.py。

效果展示:

3.python实现markdown转pdf/word

markdown是一种轻量级标记语言,它让你用纯文本轻松写作,并能方便地转换为各种文档格式。python结合pandoc(一个强大的文档转换工具)或特定的markdown解析库,能帮你实现markdown转pdf或markdown转word,这是python文件转换的高阶应用!

作用: markdown文件通过解析器转换为中间格式(如html),再由渲染器转换为目标格式。pandoc是命令行工具,python可以调用它。

3.1markdown语法速览:简洁高效的写作方式

markdown语法简单直观,常用语法如下:

语法效果示例
# 标题一级标题# 这是标题
粗体粗体重要
斜体斜体强调
- 列表项无序列表- 项目1
1. 列表项有序列表1. 步骤1
链接超链接csdn
代码行内代码print()
代码块python ...

3.2markdown转pdf/word:用python打通文档生态

场景: 你用markdown写了大量笔记和文档,现在需要将它们导出为专业排版的pdf报告或word文档,方便分享给非技术人员。

方案: 我们可以通过python调用pandoc命令行工具,实现markdown文件到pdf或word的转换。这需要你的系统安装pandoc。

安装pandoc:

访问pandoc官网 (pandoc.org) 下载并安装。安装后,确保pandoc已添加到系统环境变量。
在终端运行 pandoc --version 验证安装。

代码:

步骤:

安装pandoc: 从pandoc.org下载并安装,并确保其添加到系统path。如果转pdf,你还需要安装一个latex发行版(如miktex for windows, tex live for linux/macos)。

准备markdown文件: 在桌面创建my_notes.md。

修改代码路径: 修改 source_md 等路径。

运行: 运行 python markdown_converter.py。

效果展示:

4.你的“文档格式转换工厂”!

我们深入学习了pymupdf、pillow、docx2pdf、subprocess等库/工具,实现了:

pdf与图片互转: 轻松将pdf页面批量转换为图片,或将多张图片合并为pdf,实现像素级掌控。

word与pdf互转: 一键批量将word转pdf,并知晓pdf转word的挑战与提取文本方法。

markdown文档转换: 利用pandoc,将markdown笔记转换为专业的pdf/word文档。

5.尾声:文档格式互转,解锁文件管理新维度!

通过本篇文章,你已经掌握了文档格式互转的强大能力,为你的办公自动化之旅又增添了一个重量级技能!你学会了如何利用python和外部工具,高效地实现pdf、word、图片、markdown之间的各种转换。

除了今天学到的格式转换功能,你还希望python能帮你实现哪些更复杂的文档处理需求?比如:自动将excel数据填充到pdf表单?或者实现pdf的批量ocr识别?

以上就是利用python实现文档格式互转的操作大全(pdf、word、图片、markdown)的详细内容,更多关于python文档格式互转的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com