python3 图片转成pdf,并合并其他pdf(支持自定义路径)

python3 图片转成pdf,并合并其他pdf(支持自定义路径)

接到个需求,需要把图片转成pdf,并合并其他pdf(支持自定义路径)
借鉴于添加链接描述

需要注意下fitz的属性可能会因版本不同而不同,比如我的fitz版本是0.0.1.dev2,PyMuPDF版本是1.20.2,文章中属性convertToPDF需要变更为convert_to_pdf(),insertPDF需要变更为insert_pdf().

版本和我一的,可以参考我的代码

import os
import glob
import fitz
import PyPDF2

# 防止字符串乱码
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

def convert_pic_pdf(img_path, pdf_path):
    for img in sorted(glob.glob(img_path)):
        doc = fitz.open()
        imgdoc = fitz.open(img)
        pdfbytes = imgdoc.convert_to_pdf()
        imgpdf = fitz.open("pdf", pdfbytes)
        doc.insert_pdf(imgpdf)
        if not os.path.exists(pdf_path):
            doc.save(pdf_path)

def get_merged_pdf(imgs_path):
    # 将图片转换为PDF文件
    save_pdf_path = os.path.join(imgs_path, 'pdf')
    img_names_list = os.listdir(imgs_path)
    pic_name_list = ['.jpg', '.png', '.bmp', '.jpeg', '.JPG', '.PNG', '.JPEG']
    img_n_list = [name for name in img_names_list if os.path.splitext(name)[-1] in pic_name_list]
    for img_n in img_n_list:
        img_p = os.path.join(imgs_path, img_n)
        pdf_n = os.path.splitext(img_n)[0] + '.pdf'
        pdf_p = os.path.join(save_pdf_path, pdf_n)
        if not os.path.exists(save_pdf_path):
            os.makedirs(save_pdf_path)
        convert_pic_pdf(img_p, pdf_p)

    # 将pdf合并成一个pdf
    pdf_path = input('请输入需转换为PDF的路径,回车结束,类似(D:/pic): ')
    if not pdf_path:
        pdf_path = "E:\python\concatPdf\pic\pdf"

    pdf_names_list = os.listdir(pdf_path)
    print('---pdf_names_list-----',pdf_names_list)
    pdf_writer = PyPDF2.PdfWriter()
    for pdf_n in pdf_names_list:
        pdf_p = os.path.join(pdf_path, pdf_n)
        pdf_obj = open(pdf_p, 'rb')
        pdf_reader = PyPDF2.PdfReader(pdf_obj)
        print(dir(pdf_reader))
        for page in range(len(pdf_reader.pages)):
            pdf_writer.add_page(pdf_reader.pages[page])
    combine_pdf_path = os.path.join(imgs_path, 'all_pics.pdf')
    pdf_output_file = open(combine_pdf_path, 'wb')
    pdf_writer.write(pdf_output_file)
    pdf_output_file.close()
    return combine_pdf_path

if __name__ == '__main__':
    # # 读取图片地址
    # imgs_path = r'D:\CV\pic\pic2pdf'

    continue_re = 'y'
    while continue_re != 'n':
        imgs_path = input('请输入需转换为PDF的图片路径,回车结束,类似(D:/pic): ')
        if not imgs_path:
            imgs_path = "E:\python\concatPdf\pic"

        pdf_path = get_merged_pdf(imgs_path)
        print("转换结束!合并后的PDF文件为:{}".format(pdf_path))
        continue_re = input('请输入是否继续转换,若继续输入 y,结束输入 n  :')
        print()

代码目录结构
python3 图片转成pdf,并合并其他pdf(支持自定义路径)_第1张图片

你可能感兴趣的:(python,pdf,python,开发语言)