python | 图片转换为 pdf 实现方法

news/2024/11/15 0:37:51/

目录

一、PIL 库简介及安装使用方法

python%20%E4%B8%8D%E5%90%8C%E7%89%88%E6%9C%AC%E4%B8%8B%20PIL%20%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95-toc" style="margin-left:40px;">(一)python 不同版本下 PIL 的使用方法

pdf%C2%A0%E7%9A%84%E4%B8%A4%E7%A7%8D%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%B3%95-toc" style="margin-left:0px;">二、图片转换为 pdf 的两种实现方法

pdf%20%E9%A1%B5%E9%9D%A2%E5%B0%BA%E5%AF%B8%E8%B7%9F%E9%9A%8F%E5%9B%BE%E7%89%87%E5%A4%A7%E5%B0%8F-toc" style="margin-left:40px;">(一)简易版——pdf 页面尺寸跟随图片大小

pdf%C2%A0%E6%AF%8F%E9%A1%B5%E5%B0%BA%E5%AF%B8%E7%BB%9F%E4%B8%80%E4%B8%BA%20A4-toc" style="margin-left:40px;">(二)常用版——pdf 每页尺寸统一为 A4


一、PIL 库简介及安装使用方法

本文将图片转换为 pdf 的实现方法,主要是基于 python 的第三方图像处理库 PIL。

PIL(Python Imaging Library),免费开源,提供了非常强大的图像处理功能。

PIL,只支持 python 2.x 版本;随着发展, Python 社区开发了一个名为 Pillow 的分支,一个兼容 PIL 的图像处理库,用以支持 python 3.x 版本。

Pillow,不仅继承了 PIL 的功能,还在其基础上增加了许多新的特性,使其成为比原始 PIL 更加活跃的图像处理库。

python%20%E4%B8%8D%E5%90%8C%E7%89%88%E6%9C%AC%E4%B8%8B%20PIL%20%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95">(一)python 不同版本下 PIL 的使用方法

(1)python 2.x:通常不需要单独安装,PIL 已包含在标准库中,可直接使用。

(2)python 3.x:需要单独安装 Pillow 库来代替 PIL。

作者使用的是 python 3.x,并直接通过 pip 安装了 Pillow 库。

安装命令如下:

python">pip install Pillow

查看是否安装成功及当前版本:

python">pip show pillow

图片

pdf%C2%A0%E7%9A%84%E4%B8%A4%E7%A7%8D%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%B3%95">二、图片转换为 pdf 的两种实现方法

pdf%20%E9%A1%B5%E9%9D%A2%E5%B0%BA%E5%AF%B8%E8%B7%9F%E9%9A%8F%E5%9B%BE%E7%89%87%E5%A4%A7%E5%B0%8F">(一)简易版——pdf 页面尺寸跟随图片大小

该段代码适用于:

1、将单张或多张图片转换为 pdf

2、目标文件夹中有几张图片,转换后的 pdf 就有多少页。

3、转换后的 pdf 页面默认尺寸设置:视具体情况而定。简单来说,就是转换后的 pdf 页面尺寸会跟随图片大小,这样也就导致 pdf 页面大小不一。

完整代码如下:

python">from PIL import Image as pilImage
import os# 简易版——图片转换为pdfpdf页面随图片大小浮动
def convert_images_to_pdf(image_file):os.chdir(image_file)images = []file_lis = os.listdir(image_file)output_path = 'output.pdf'con = 0for image_path in file_lis:if image_path.endswith(('.jpg', '.png')):image = pilImage.open(image_path)images.append(image.convert("RGB"))con += 1print(image_path + ':第%d张' % con)images[0].save(output_path, save_all=True, append_images=images[1:])print('转换完成,共计%d张图片' % len(images))if __name__ == "__main__":image_file = input(r'输入目标图片所在文件夹路径(如E:\test):')convert_images_to_pdf(image_file)

测试结果—页面随图片大小

图片

图片

注:本段代码只涵盖了常见的 jpg、png 两种图片格式,其他格式可以直接在代码中追加。

图片

pdf%C2%A0%E6%AF%8F%E9%A1%B5%E5%B0%BA%E5%AF%B8%E7%BB%9F%E4%B8%80%E4%B8%BA%20A4">(二)常用版——pdf 每页尺寸统一为 A4

基于(一)中的代码,引入了第三方模块 reportlab,对转换后的 pdf 页面尺寸进行设置。

1、第一步,先通过命令:pip show reportlab ,查看是否已经安装有 reportlab 模块,已安装的情况下会提示版本号等信息,并且在使用时不会报错。

如果没有安装 reportlab 模块,则需要进行安装:pip install reportlab。

注:经作者实测,直接使用 pip 命令安装可能会失败,因每台电脑所装的 python 版本、环境依赖等,失败情况可能也有所不同。解决办法:先去下载对应自身 python 版本的 reportlab 包或 whl 文件,再进行安装。常用下载链接可参考: https://pypi.org/search/?q=reportlab。

2、第二步,安装好所需要的库后,直接复制并运行下面的代码,输入需要转换的图片文件夹路径即可。

该段代码适用于:

1、将单张或多张图片转换为 pdf

2、目标文件夹中有几张图片,转换后的 pdf 就有多少页。

3、转换后的 pdf 每页大小均为 A4 。

完整代码如下:

python">from PIL import Image as pilImage
from reportlab.platypus import SimpleDocTemplate, Image, PageBreak
from reportlab.lib.pagesizes import A4, landscape
import os# 获取目标文件下图片文件
def get_Images(image_file):images = []file_lis = os.listdir(image_file)for image_path in file_lis:if image_path.endswith(('jpg', 'png')):images.append(image_path)return images, image_file# 常用版——图片转换为pdf,限制pdf页面大小为A4
def convert_images_to_pdfp(images, image_file):os.chdir(image_file)# 获取A4尺寸a4_w, a4_h = landscape(A4)# 创建一个PDF文档pdf_doc = SimpleDocTemplate(r'tmp.pdf')if len(images) == 0:print('该文件夹路径下无图片,请检查图片格式!')elif len(images) == 1:# 获取图片尺寸img = pilImage.open(images[0])img_w, img_h = img.size# 设置合适的缩放比率ratio = min(a4_w / img_w, a4_h / img_h)# 创建文档page = Image(images[0], img_w * ratio, img_h * ratio)pdf_doc.build([page])print(images[0] + '——转换完成')else:frames = []  # 用于存储多张图片框架con = 0for image in images:# 获取图片尺寸img = pilImage.open(image)img_w, img_h = img.size# 设置合适的缩放比率ratio = min(a4_w / img_w, a4_h / img_h)# 储存文档内容page = Image(image, img_w * ratio, img_h * ratio)frames.append(page)  # 将文档内容添加到列表中frames.append(PageBreak())  # 在每张图片后添加PageBreakcon += 1print(image + '——第%d张' % con)pdf_doc.build(frames)print('转换完成,共计%d张' % len(images))if __name__ == "__main__":image_file = input(r'输入目标图片所在文件夹路径(如E:\test):')images = get_Images(image_file)convert_images_to_pdfp(images[0], images[1])

测试结果——每页均为 A4 大小

图片

图片

注:本段代码只涵盖了常见的 jpg、png 两种图片格式,其他格式可以直接在代码中追加即可。

总结:图片的大小是转换后的 pdf 是否清晰、符合要求的重要因素。代码(二)中对图片进行了简单缩放,可以根据自身需求在代码中对图片大小进行调整。(如果对代码不是很熟悉,有一招简单方法,就是转换之前,可以先P图)。

以上就是基于 python 第三方库 PIL、reportlab ,将图片转换为pdf的方法,可供参考。


http://www.ppmy.cn/news/1512784.html

相关文章

搭建ELK日志采集与分析系统

SpringCloud微服务实战——企业级开发框架 💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您…

回归预测 | Matlab实现BES-ESN秃鹰搜索算法优化回声状态网络多输入单输出回归预测

回归预测 | Matlab实现BES-ESN秃鹰搜索算法优化回声状态网络多输入单输出回归预测 目录 回归预测 | Matlab实现BES-ESN秃鹰搜索算法优化回声状态网络多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现BES-ESN秃鹰搜索算法优化回声状态网络…

ubuntu24.04安装nginx1.24

ubuntu安装nginx 更新包索引 sudo apt update安装nginx sudo apt install nginx确认安装成功并检查Nginx版本 nginx -v启动Nginx服务 sudo systemctl start nginx设置Nginx开机自启 sudo systemctl enable nginx在浏览器中访问 http://<your_server_IP> 来确认Nginx…

RocketMQ源码分析 - 环境搭建

RocketMQ源码分析 - 环境搭建 环境搭建源码拉取导入IDEA调试1) 启动NameServer2) 启动Broker3) 发送消息4) 消费消息 环境搭建 依赖工具 JDK&#xff1a;1.8MavenIntellij IDEA 源码拉取 从官方仓库 https://github.com/apache/rocketmq clone或者download源码。 源码目录…

ONNX模型在线查看工具【Netron中文版】

Netron中文版是一个功能强大的在线工具&#xff0c;专门用于ONNX、TF Lite等多种格式的神经网络模型的可视化查看。 Netron中文版的主要特性如下&#xff1a; 支持多种模型格式&#xff0c;包括 ONNX、TensorFlow、Keras、Caffe 和 PyTorch等提供直观的图形界面&#xff0c;帮…

树和二叉树之间的转换和森林和二叉树之间的转换(补充线索二叉树的描述)

线索二叉树&#xff1a;顾名思义含线索的二叉树则称之为线索二叉树 何为线索&#xff1f; 如果某个结点的左孩子为空&#xff0c;则将其指针域指向其前驱 如果某个结点的右孩子为空&#xff0c;则将其指针域指向其后继 这种由空&#xff08;NULL&#xff09;指向前驱或后继…

【jvm】栈和堆的区别

目录 1. 用途2. 线程共享性3. 内存分配和回收4. 生命周期5. 性能特点 1. 用途 1.堆&#xff1a;主要用于存储对象实例和数组。在Java中&#xff0c;所有通过new关键字创建的对象都会被分配到堆上。堆是一个大的内存池&#xff0c;用于存储所有的Java对象&#xff0c;包括实例变…

数据库之权限与安全

目录 一、MySQL权限表 1.MySQL权限系统的工作原理 2.权限表 二、账号管理 1.创建账号 2.删除账号 3.root用户修改自身密码 4.root用户修改普通用户密码 5.root用户密码丢失的解决方法 三、MySQL权限管理 1.查看账号权限 2.给账号授权 3.收回权限 一、MySQL权限表 …