python下将图片合成pdf

前言

又是到了投夏令营的时候,那么夏令营他需要我们一个一个图片的文件合成在一起。打开wps, 转换…(啊这,需要wps超级会员!!!)

另一篇相关
python实现pdf合并



PyMuPDF

在这里插入图片描述
我这里需要把01.jpg到09.jpg合成成一个pdf

pip install PyMuPDF

代码修改自:https://blog.csdn.net/weixin_42081389/article/details/100734926

import os
import fitz  # pip install PyMuPDF
from tqdm import tqdm

def GetFileName(dir_path):
    file_list = [os.path.join(dirpath, filesname) \
                 for dirpath, dirs, files in os.walk(dir_path) \
                 for filesname in files]
    file_list.sort()
    return file_list

def pic2pdf(img_dir, filename):
    doc = fitz.open()
    file_lt = GetFileName(img_dir)
    for img in tqdm(file_lt):
        file_type = img.split('\\')[-1].split('.')[-1]
        if file_type not in ['jpg', 'png']:
            continue
        imgdoc = fitz.open(img)  # 打开图片
        pdfbytes = imgdoc.convertToPDF()  # 使用图片创建单页的 PDF
        imgpdf = fitz.open("pdf", pdfbytes)
        doc.insertPDF(imgpdf)  # 将当前页插入文档
    if os.path.exists("{}".format(filename)):
        os.remove("{}".format(filename))
    doc.save("{}".format(filename))  # 保存pdf文件
    print("保存 {} 成功".format(filename))
    doc.close()


if __name__ == '__main__':
    img_dir = r"H:/面试/英语口语/pic"
    filename = "join.pdf"
    pic2pdf(img_dir, filename)

在这里插入图片描述
跑完就合成了.



PyMuPDF 1.23.3版本则需要修改一下函数名 convert_to_pdf, insert_pdf,也就是驼峰命名法变成下划线命名法了。

import os
import fitz  # pip install PyMuPDF
from tqdm import tqdm

def GetFileName(dir_path):
    file_list = [os.path.join(dirpath, filesname) \
                 for dirpath, dirs, files in os.walk(dir_path) \
                 for filesname in files]
    file_list.sort()
    return file_list

def pic2pdf(img_dir, filename):
    doc = fitz.open()
    file_lt = GetFileName(img_dir)
    for img in tqdm(file_lt):
        file_type = img.split('\\')[-1].split('.')[-1]
        if file_type not in ['jpg', 'png']:
            continue
        imgdoc = fitz.open(img)  # 打开图片
        # pdfbytes = imgdoc.convertToPDF()  # 使用图片创建单页的 PDF
        pdfbytes = imgdoc.convert_to_pdf()  # 使用图片创建单页的 PDF
        imgpdf = fitz.open("pdf", pdfbytes)
        doc.insert_pdf(imgpdf)  # 将当前页插入文档
    if os.path.exists("{}".format(filename)):
        os.remove("{}".format(filename))
    doc.save("{}".format(filename))  # 保存pdf文件
    print("保存 {} 成功".format(filename))
    doc.close()


if __name__ == '__main__':
    img_dir = r"./pic"
    filename = "join.pdf"
    pic2pdf(img_dir, filename)



img2pdf

若要转换后纸张大小,则使用img2pdf。但是,当图片和A4纸张比例差别过大时,不建议用这个a4的大小!

pip install img2pdf

代码修改自:https://blog.csdn.net/weixin_42081389/article/details/100734926

import img2pdf
import  os

def GetFileName(dir_path):
    file_list = [os.path.join(dirpath, filesname) \
                 for dirpath, dirs, files in os.walk(dir_path) \
                 for filesname in files]
    file_list.sort()
    return file_list

def pic_pdf(photo_path, filename):
    # 1、生成地址列表
    file_list = GetFileName(photo_path)
    photo_lt = []
    for img in file_list:
        file_type = img.split('\\')[-1].split('.')[-1]
        if file_type  in ['jpg', 'png']:
            photo_lt.append(img)
    # print(photo_lt)
    # 1、指定pdf的单页的宽和高
    # A4纸张
    a4inpt = (img2pdf.mm_to_pt(210), img2pdf.mm_to_pt(297))
    layout_a4 = img2pdf.get_layout_fun(a4inpt)
    if os.path.exists(filename):
        os.remove(filename)
    with open(filename, 'wb') as f:
        f.write(img2pdf.convert(photo_lt, layout_fun=layout_a4))
    print('转换成功')

if __name__ == '__main__':
    img_dir = r"H:/面试/英语口语/pic"
    filename = "join.pdf"
    pic_pdf(img_dir, filename)
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值