多PDF文件合并

# 该代码用于pdf文档合成

import PyPDF2,os
import os
import sys
import fitz
from reportlab.lib.pagesizes import portrait
from reportlab.pdfgen import canvas
from PIL import Image

def pdf2img(img_file,filename):
    file_name = filename.split('.pdf')
    #  打开PDF文件,生成一个对象
    doc = fitz.open(filename)
    print("共",doc.pageCount,"页")
    for pg in range(doc.pageCount):
        print("\r转换为图片",pg+1,"/",doc.pageCount,end="")
        page = doc[pg]
        rotate = int(0)
        # 每个尺寸的缩放系数为8,这将为我们生成分辨率提高64倍的图像。一般设为2
        zoom_x = 8.0
        zoom_y = 8.0
        trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
        pm = page.getPixmap(matrix=trans, alpha=False)
        pm.writePNG(img_file+'/'+filename+'_tu'+'{:02}.png' .format(pg))
    print()

def combine_imgs_pdf(folder_path, pdf_file_path):

    files = os.listdir(folder_path)
    png_files = []
    sources = []
    for file in files:
        if 'png' in file or 'jpg' in file:
            png_files.append(folder_path +'/' +file)
    png_files.sort()

    output = Image.open(png_files[0])
    png_files.pop(0)
    for file in png_files:
        png_file = Image.open(file)
        if png_file.mode == "RGB":
            png_file = png_file.convert("RGB")
        sources.append(png_file)
    output.save(pdf_file_path, "pdf", save_all=True, append_images=sources)
    
 
if __name__ == '__main__':
    # filename='0.pdf'
    # 
    final = 'master'
    path = os.path.dirname(os.path.abspath(__file__))
    print(path)
    img_file = path+'\image'    
    if os.path.exists(img_file):
        print('文件夹存在')
    else:
        os.mkdir(img_file)    
    # target_path = os.path.dirname(path)
    target_path = path
    pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')]
    for filename in pdf_lst:
        pdf2img(img_file,filename)  
    folder = img_file
    pdfFile = path+'/'+final+".pdf"
    combine_imgs_pdf(folder, pdfFile)
        
  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值