利用 python 实现 pdf 文件转换至 png 长图

前言:最近在做一个产品自动推送的项目,为了方便展示,里面涉及一个文件格式转换(pdf→png)的工作,由于程序最终在内网Linux系统下部署,所以本文使用了轻量级的python库来实现文件格式转换的工作,下面把这部分代码拎出来做一个示例。

代码思路:

  • 使用 PyMuPDF(fitz)库加载 PDF 文件并将每一页转换为图像。
  • 将每一页的图像垂直拼接成一张长图。
  • 保存结果为高分辨率图片。

1、安装PyMuPDF 库

pip install pymupdf

2、开搞

import fitz  # PyMuPDF
from PIL import Image

def pdf_to_long_image(pdf_path, output_path, dpi=300):
    # 打开 pdf 文件
    doc = fitz.open(pdf_path)
    
    # 存储每一页的图像
    images = []
    
    # 遍历 pdf 的每一页
    for page_num in range(len(doc)):
        # 获取每一页
        page = doc.load_page(page_num)        
        # 将页面转换为图片(pixmap)
        pix = page.get_pixmap(dpi=dpi)      
        # 将 pixmap 转换为 PIL 图像
        img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
        images.append(img)
    
    # 计算总高度(宽度保持不变)
    total_height = sum(img.height for img in images)
    width = images[0].width
    
    # 创建一个空白的长图
    long_image = Image.new('RGB', (width, total_height))
    
    # 将每一页的图像按顺序拼接在一起
    y_offset = 0
    for img in images:
        long_image.paste(img, (0, y_offset))
        y_offset += img.height
    
    # 保存为结果图片
    long_image.save(output_path)
    print(f"PDF 已成功转换为长图,并保存在 {output_path}")

# 输入输出路径设置
pdf_path = './pdf/input_file.pdf'  # pdf文件路径
output_path = './photo/output_image.png'  # png输出路径
pdf_to_long_image(pdf_path, output_path)

 3、细节调整

  • dpi=300 设定了转换图像的清晰度,可以根据需要调整该值(如 dpi=150 以降低清晰度,或者更高的值提高清晰度)。
  • 输出格式可以更改为其他图片格式(如 JPEG)只需调整 long_image.save() 中的文件扩展名即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值