前言:最近在做一个产品自动推送的项目,为了方便展示,里面涉及一个文件格式转换(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() 中的文件扩展名即可。