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

打印 上一主题 下一主题

主题 995|帖子 995|积分 2985

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录
一、PIL 库简介及安装使用方法
(一)python 差别版本下 PIL 的使用方法
二、图片转换为 pdf 的两种实现方法
(一)简易版——pdf 页面尺寸跟随图片大小
(二)常用版——pdf 每页尺寸统一为 A4


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


本文将图片转换为 pdf 的实现方法,主要是基于 python 的第三方图像处理库 PIL。
PIL(Python Imaging Library),免费开源,提供了非常强大的图像处理功能。
PIL,只支持 python 2.x 版本;随着发展, Python 社区开辟了一个名为 Pillow 的分支,一个兼容 PIL 的图像处理库,用以支持 python 3.x 版本。
Pillow,不但继续了 PIL 的功能,还在其基础上增长了许多新的特性,使其成为比原始 PIL 更加生动的图像处理库。
(一)python 差别版本下 PIL 的使用方法

(1)python 2.x:通常不需要单独安装,PIL 已包含在标准库中,可直接使用。
(2)python 3.x:需要单独安装 Pillow 库来代替 PIL。
作者使用的是 python 3.x,并直接通过 pip 安装了 Pillow 库。
安装下令如下:
  1. pip install Pillow
复制代码
查看是否安装成功及当前版本:
  1. pip show pillow
复制代码

二、图片转换为 pdf 的两种实现方法


(一)简易版——pdf 页面尺寸跟随图片大小

该段代码实用于:
1、将单张或多张图片转换为 pdf。
2、目标文件夹中有几张图片,转换后的 pdf 就有多少页。
3、转换后的 pdf 页面默认尺寸设置:视具体环境而定。简朴来说,就是转换后的 pdf 页面尺寸会跟随图片大小,如许也就导致 pdf 页面大小不一。
完整代码如下:
  1. from PIL import Image as pilImage
  2. import os
  3. # 简易版——图片转换为pdf,pdf页面随图片大小浮动
  4. def convert_images_to_pdf(image_file):
  5.     os.chdir(image_file)
  6.     images = []
  7.     file_lis = os.listdir(image_file)
  8.     output_path = 'output.pdf'
  9.     con = 0
  10.     for image_path in file_lis:
  11.         if image_path.endswith(('.jpg', '.png')):
  12.             image = pilImage.open(image_path)
  13.             images.append(image.convert("RGB"))
  14.             con += 1
  15.             print(image_path + ':第%d张' % con)
  16.     images[0].save(output_path, save_all=True, append_images=images[1:])
  17.     print('转换完成,共计%d张图片' % len(images))
  18. if __name__ == "__main__":
  19.     image_file = input(r'输入目标图片所在文件夹路径(如E:\test):')
  20.     convert_images_to_pdf(image_file)
复制代码
测试结果—页面随图片大小


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

(二)常用版——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 。
完整代码如下:
[code]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(
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

忿忿的泥巴坨

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表