python:实现pdf文件加盖骑缝章

添加骑缝章的方式:

1、代码实现

2、PS实现

下面介绍用python进行自动化实现的方法。

一、加载模块:

import time
from pathlib import Path
import os
from fpdf import FPDF
from PIL import Image
import sys
import pdfplumber
from PyPDF2 import PdfReader,PdfWriter

二、核心代码

1、图片分割:

def xz(image_path, count):
    """
    将图片水平分割
    :param image_path:PNG图片路径
    :param count: 页数
    :return:
    """

    img_path = image_path
    # 判断是否有效
    if img_path != '':
        print(img_path)  # 图片路径
        # 分割成1行
        img_split_row = 1  # 行数
        # 分割成几列
        sp = count  # 输入拆分列数量
        img_split_col = int(sp)

        # 要保存的图片路径(保存为png图片格式)
        if os.path.dirname(img_path) == "":
            img_path = os.getcwd() + os.sep + img_path
        img_save = os.path.dirname(img_path) + os.sep + "images" + os.sep
        if not os.path.exists(img_save):
            os.makedirs(img_save)

        # 分割图片
        img_ext_name = os.path.splitext(os.path.basename(img_path))[1]
        img_now = Image.open(img_path)
        split_size_w = int(img_now.size[0] / img_split_col)
        split_size_h = int(img_now.size[1] / img_split_row)
        result_path = []
        for r in range(img_split_row):
            for c in range(img_split_col):
                split_area = (split_size_w * c, r * split_size_h, split_size_w * (c + 1), split_size_h * (r + 1))
                # print( (r*img_split_col+c+1) );
                img_now.crop(split_area).save(img_save + str(r * img_split_col + c + 1) + img_ext_name)
                result_path.append(img_save + str(r * img_split_col + c + 1) + img_ext_name)


                time.sleep(0.5)  # 等待
        # 结束
        print("图片分割结束,一共" + str(img_split_row * img_split_col) + "张图片(保存在" + img_save + "路径下)")
        print(result_path, split_size_w, split_size_h)
        return (result_path, split_size_w, split_size_h)

2、PDF合成

def merge_pdf(water_pdf, target_pdf, pages_count, result_path):
    """
    两个pdf融合
    :param water_pdf: 水印PDF文件
    :param target_pdf: 合同PDF文件
    :param pages_count: 文件页数
    :param result_path: 结果输出录路径
    :return:
    """
    # 获取页数
    #pages_count = get_num_pages(target_pdf)
    watermark_reader = PdfReader(target_pdf)
    # 读取需要被添加水印的PDF
    reader = PdfReader(water_pdf)
    writer = PdfWriter()
    # 遍历所有页面
    for page_index in range(0, pages_count):
        # 合并水印页面
        page = watermark_reader.pages[page_index]
        print((pages_count-1-page_index))
        page.merge_page(reader.pages[(pages_count-1-page_index)])  #倒序合并
        writer.add_page(page)

    with open(result_path, "wb") as f:
        writer.write(f)

三、使用范例:

print('请输入需要加盖骑缝章的文件页数:')    # 输入切片数量
num= int(input())

image_path='/Users/.../自动化加盖骑缝章/电子章.png'    #电子章路径
#电子章 图片信息:
pt=(72/25.4)
img=Image.open(image_path)
imgSize=img.size
img_w_mm=img.width/pt
print(img_w_mm)

xz(image_path,num)    #进行切片,保存,保存路径看输出结果。
#图片分割结束,一共2张图片(保存在/Users/.../自动化加盖骑缝章/images/路径下)

source_path=Path('/Users/.../自动化加盖骑缝章/images')  
print('目录 %s 下所有文件:' % source_dir)
images = list(source_dir.glob('*.png'))    #查看输出结果
for name in images:
    print(name)

#将PNG图片合成PDF
result_dir = Path('/Users/.../自动化加盖骑缝章/result')
if not result_dir.exists():
    result_dir.mkdir(parents=True)

pdf = FPDF(format='A4')    #创建PDF,大小A4 A4尺寸:210mm*297mm
for image in images:
    pdf.add_page()
    pdf.image(str(image),x=(210-img_w_mm/num),y=150)     #调整切片在A4纸中的位置

#输出骑缝章水印pdf
dest= os.path.join(result_dir,"qfz_watermark.pdf")
pdf.output(dest)


#在需要加盖的文件上加盖骑缝章
print('请输入需要加盖骑缝章的文件路径:')
#'/Users/.../自动化加盖骑缝章/xx合同.pdf
target_pdf = input()
result_path = '/Users/.../自动化加盖骑缝章/OK.pdf'
merge_pdf(dest,target_pdf,num,result_path)
print('加盖好的文件输出到路径:',result_path,'请及时保存')

四、完整代码段:

#PS:直接复制无法成功运行,本地路径需要自行修改

import time
from pathlib import Path
import os
from fpdf import FPDF
from PIL import Image
import sys
import pdfplumber
from PyPDF2 import PdfReader,PdfWriter


#1、图片分割函数:
def xz(image_path, count):
    """
    将图片水平分割
    :param image_path:PNG图片路径
    :param count: 页数
    :return:
    """

    img_path = image_path
    # 判断是否有效
    if img_path != '':
        print(img_path)  # 图片路径
        # 分割成1行
        img_split_row = 1  # 行数
        # 分割成几列
        sp = count  # 输入拆分列数量
        img_split_col = int(sp)

        # 要保存的图片路径(保存为png图片格式)
        if os.path.dirname(img_path) == "":
            img_path = os.getcwd() + os.sep + img_path
        img_save = os.path.dirname(img_path) + os.sep + "images" + os.sep
        if not os.path.exists(img_save):
            os.makedirs(img_save)

        # 分割图片
        img_ext_name = os.path.splitext(os.path.basename(img_path))[1]
        img_now = Image.open(img_path)
        split_size_w = int(img_now.size[0] / img_split_col)
        split_size_h = int(img_now.size[1] / img_split_row)
        result_path = []
        for r in range(img_split_row):
            for c in range(img_split_col):
                split_area = (split_size_w * c, r * split_size_h, split_size_w * (c + 1), split_size_h * (r + 1))
                # print( (r*img_split_col+c+1) );
                img_now.crop(split_area).save(img_save + str(r * img_split_col + c + 1) + img_ext_name)
                result_path.append(img_save + str(r * img_split_col + c + 1) + img_ext_name)


                time.sleep(0.5)  # 等待
        # 结束
        print("图片分割结束,一共" + str(img_split_row * img_split_col) + "张图片(保存在" + img_save + "路径下)")
        print(result_path, split_size_w, split_size_h)
        return (result_path, split_size_w, split_size_h)


#2、PDF合并函数
def merge_pdf(water_pdf, target_pdf, pages_count, result_path):
    """
    两个pdf融合
    :param water_pdf: 水印PDF文件
    :param target_pdf: 合同PDF文件
    :param pages_count: 文件页数
    :param result_path: 结果输出录路径
    :return:
    """
    # 获取页数
    #pages_count = get_num_pages(target_pdf)
    watermark_reader = PdfReader(target_pdf)
    # 读取需要被添加水印的PDF
    reader = PdfReader(water_pdf)
    writer = PdfWriter()
    # 遍历所有页面
    for page_index in range(0, pages_count):
        # 合并水印页面
        page = watermark_reader.pages[page_index]
        print((pages_count-1-page_index))
        page.merge_page(reader.pages[(pages_count-1-page_index)])  #倒序合并
        writer.add_page(page)

    with open(result_path, "wb") as f:
        writer.write(f)



#输入参数
print('请输入需要加盖骑缝章的文件页数:')    # 输入切片数量
num= int(input())

image_path='/Users/.../自动化加盖骑缝章/电子章.png'    #电子章路径
#电子章 图片信息:
pt=(72/25.4)
img=Image.open(image_path)
imgSize=img.size
img_w_mm=img.width/pt
print(img_w_mm)

xz(image_path,num)    #进行切片,保存,保存路径看输出结果。
#图片分割结束,一共2张图片(保存在/Users/.../自动化加盖骑缝章/images/路径下)

source_path=Path('/Users/.../自动化加盖骑缝章/images')  
print('目录 %s 下所有文件:' % source_dir)
images = list(source_dir.glob('*.png'))    #查看输出结果
for name in images:
    print(name)

#将PNG图片合成PDF
result_dir = Path('/Users/.../自动化加盖骑缝章/result')
if not result_dir.exists():
    result_dir.mkdir(parents=True)

pdf = FPDF(format='A4')    #创建PDF,大小A4 A4尺寸:210mm*297mm
for image in images:
    pdf.add_page()
    pdf.image(str(image),x=(210-img_w_mm/num),y=150)     #调整切片在A4纸中的位置

#输出骑缝章水印pdf
dest= os.path.join(result_dir,"qfz_watermark.pdf")
pdf.output(dest)


#在需要加盖的文件上加盖骑缝章
print('请输入需要加盖骑缝章的文件路径:')
#'/Users/.../自动化加盖骑缝章/xx合同.pdf
target_pdf = input()
result_path = '/Users/.../自动化加盖骑缝章/OK.pdf'
merge_pdf(dest,target_pdf,num,result_path)
print('加盖好的文件输出到路径:',result_path,'请及时保存')


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