Python小工具(2)-批量将png合并成一个pdf

本文介绍了一个Python脚本,用于将指定目录下的png图片批量转换并合并为一个PDF文档,通过使用`reportlab`库的`SimpleDocTemplate`和`Image`类实现图片缩放适应A4纸张布局。
摘要由CSDN通过智能技术生成

Python小工具(2)-批量将png合并成一个pdf

这个主要是参考的其他博主的,但是他的程序是分块的,所以我整合了一下,侵权删。

import os
from reportlab.platypus import SimpleDocTemplate, Image, PageBreak
from reportlab.lib.pagesizes import A4, landscape
from PIL import Image as pilImage

#允许转换的文件类型
__allow_type = ['.jpg', ',jpeg', '.bmp', '.png']

def convert_imagesToPDF(file_dir, save_name):
    '''
    转换一个目录文件夹下的图片至PDF
    参数:
        file_dir: 图片所在的文件夹的路径
        save_name: 目标PDF的文件名(需以.pdf结尾)
    '''
    book_pages = []
    
    for parent, dirnames, filenames in os.walk(file_dir):# os.walk()方法:返回的是一个三元组(root,dirs,files)
        # 选中目录下的所有图片                                    # root 所指的是当前正在遍历的这个文件夹的本身的地址
        for file_name in filenames:                                # dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
            file_path = os.path.join(parent, file_name)     # files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
            #是否图片
            if __isAllow_file(file_path):
                book_pages.append(file_path)

        save_path = os.path.join(file_dir, save_name)

        if len(book_pages) > 0 :
            #开始转换
            print("-----开始转换-----")
            __converted(save_path, book_pages)
            print("-----转换完成-----")


def __isAllow_file(filepath):
    '''
    是否图片文件
    '''
    if filepath and (os.path.splitext(filepath)[1] in __allow_type):
        return True
    return False

def __converted(save_book_name, book_pages = []):
    '''
    开始转换
    参数:
        save_book_name : 保存的pdf文件路径
        book_pages: 图片数组
    '''
    # A4 纸的宽高
    __a4_w, __a4_h = landscape(A4)

    # 对数据进行排序
    book_pages.sort()

    bookPagesData = []
    
    #创建一个简单模板
    bookDoc = SimpleDocTemplate(save_book_name)

    for page in book_pages:
        #获取图片的宽和高
        img_w, img_h = ImageTools().getImageSize(page)
        #取合适的比例
        if __a4_w / img_w < __a4_h / img_h:
            ratio = __a4_w / img_w
        else:
            ratio = __a4_h / img_h

        data = Image(page, img_w * ratio, img_h * ratio)
        bookPagesData.append(data)
        bookPagesData.append(PageBreak())

    bookDoc.build(bookPagesData)

class ImageTools:
    def getImageSize(self, imagePath):
        '''
        由图片路径获取宽和高
        
        '''
        img = pilImage.open(imagePath)
        return img.size
if __name__ == "__main__":
	convert_imagesToPDF(r"E:\c++", "Geo-CA.pdf")

修改以上程序中的目录,即可。运行结束会在自己的同级目录下出现一个pdf文件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值