当前位置: 首页 > news >正文

Python如何将图片转换为PDF格式

引言

在日常工作和学习中,我们经常需要将多张图片合并成一个PDF文件,以便于分享或打印。Python提供了多种库来实现这一需求,本文将详细介绍三种常用的方法:img2pdf库Pillow库PyMuPDF库,并附上完整的代码示例。

方法一:使用img2pdf库

简介

img2pdf是一个专门用于将图片转换为PDF的高效工具,支持多种图片格式(如JPEG、PNG等),且转换过程中不会损失图片质量。

安装

pip install img2pdf

代码示例

import img2pdf# 定义图片路径列表
image_paths = ['image1.jpg', 'image2.png', 'image3.jpeg']# 将图片转换为PDF字节流
pdf_bytes = img2pdf.convert(image_paths)# 保存为PDF文件
with open('output.pdf', 'wb') as f:f.write(pdf_bytes)print("PDF文件已成功生成!")

优势

  • 高效快速:直接将图片数据嵌入PDF,无需重新编码。
  • 无损转换:保持原始图片质量。
  • 支持多图:自动将多张图片分页到同一PDF中。

方法二:使用Pillow库

简介

Pillow是Python中常用的图像处理库,支持打开、编辑和保存多种图片格式,也可用于将图片转换为PDF。

安装

pip install Pillow

代码示例(单张图片)

from PIL import Image# 打开图片
image = Image.open('input.jpg')# 保存为PDF(默认分辨率72DPI)
image.save('output.pdf', 'PDF', resolution=300)  # 设置分辨率为300DPIprint("单张图片已转换为PDF!")

代码示例(多张图片合并)

from PIL import Image
import os# 定义图片路径列表
image_paths = ['image1.jpg', 'image2.png', 'image3.jpeg']# 打开所有图片并转换为RGB模式
images = [Image.open(img).convert('RGB') for img in image_paths]# 保存第一张图片为PDF,并追加剩余图片
images[0].save('combined.pdf','PDF',save_all=True,append_images=images[1:]
)print("多张图片已合并为PDF!")

注意事项

  • 分辨率调整:通过resolution参数可优化PDF清晰度。
  • 模式转换:确保图片为RGB模式,否则可能无法保存为PDF。

方法三:使用PyMuPDF库

简介

PyMuPDF(即fitz)是一个功能强大的PDF处理库,支持添加图片、调整页面布局等高级操作。

安装

pip install pymupdf

代码示例

import fitz  # PyMuPDF的别名# 创建空白PDF文档
doc = fitz.open()# 添加图片到PDF
for img_path in ['image1.jpg', 'image2.png']:img = fitz.open(img_path)  # 打开图片rect = fitz.Rect(0, 0, img.media_box.width, img.media_box.height)page = doc.new_page(width=rect.width, height=rect.height)  # 创建新页面page.insert_image(rect, filename=img_path)  # 插入图片# 保存PDF
doc.save('output.pdf')
doc.close()print("PDF文件已生成!")

优势

  • 灵活布局:可自定义页面大小、边距等。
  • 高级功能:支持添加水印、合并PDF等操作。

方案对比

方法适用场景优点缺点
img2pdf批量转换、追求速度和无损质量快速、高效、无损仅支持基础转换
Pillow单张图片转换、简单合并轻量级、易用多图合并需额外处理
PyMuPDF需要定制PDF布局或高级功能功能强大、灵活学习成本稍高

常见问题解答

1. 如何调整PDF的页面大小?

  • img2pdf:通过layout_fun参数自定义布局(需指定纸张尺寸)。
  • PyMuPDF:在new_page中设置widthheight参数。

2. 转换后的PDF文件过大怎么办?

  • 使用img2pdf时,确保图片格式为JPEG或PNG(已压缩格式)。
  • 通过Pillowsavefig参数调整分辨率(如dpi=150)。

3. 支持哪些图片格式?

  • 所有方法均支持JPEG、PNG、BMP等常见格式。
  • img2pdf还支持TIFF、WebP等格式。

总结

  • 推荐方案
    • 批量转换:优先使用img2pdf库。
    • 简单需求:选择Pillow库。
    • 高级定制:使用PyMuPDF库。

通过本文的三种方法,您可以轻松实现图片到PDF的转换,并根据具体需求选择最合适的工具。

http://www.dtcms.com/a/322263.html

相关文章:

  • 2025最新高频前端面试题解析(含Vue/React/JS核心考点)
  • day30-HTTP
  • Ubuntu Server 22 虚拟机空间扩容
  • B.10.01.3-性能优化实战:从JVM到数据库的全链路优化
  • stm32项目(25)——基于stm32的植物生长箱环境监测系统
  • 微信小程序中实现表单自动填充功能的方法
  • 自动化一键部署 LNMP 环境
  • NodeJs学习日志(3):express,sequelize进行增删改查(CRUD)
  • 【QT】QMainWindow:打造专业级桌面应用的基石
  • java之父-新特性
  • 数据结构(一)顺序表
  • 【JVM】深入解析Java虚拟机
  • Ubuntu下搭建LVGL模拟器
  • react之React.cloneElement()
  • 深入剖析C++ STL原理:打开高效编程大门的钥匙
  • [每周一更]-(第155期):深入Go反射机制:架构师视角下的动态力量与工程智慧
  • Web3: DeFi借贷的安全基石, 了解喂价与清算机制的原理与重要性
  • Typora上传图片保存到assets目录下
  • ARM CPU 安全更新:Training Solo(关于 Spectre-v2 攻击中域隔离机制的局限性)
  • 学习:JS[8]本地存储+正则表达式
  • Matlab系列(004) 一 Matlab分析正态分布(高斯分布)
  • 《C++进阶之继承多态》【普通类/模板类的继承 + 父类子类的转换 + 继承的作用域 + 子类的默认成员函数】
  • pgAdmin 仪表盘的system部分不能显示,报SYSTEM_STATS扩展没有安装
  • git命令详解
  • TensorFlow深度学习实战(29)——强化学习(Reinforcement learning,RL)
  • elementui input无法输入问题
  • JAVA基础-使用BIO / NIO实现聊天室功能
  • Day 36: 复习
  • 康养休闲旅游服务虚拟仿真实训室:助力康养人才培养的创新引擎
  • 《算法导论》第 14 章 - 数据结构的扩张