Python实现pdf的一些功能

一、无水印将图片合并成pdf输出

步骤:

1.用手机拍照或者扫描王APP扫描成图片

2.按1、2、3等顺序为图片重新命名

3.执行下列代码合并成pdf

from PIL import Image
import os

def change_img_size(size,im_pth):
    im = Image.open(im_pth)
    new_size = size
    im = im.resize(new_size, Image.ANTIALIAS)
    im.save(im_pth)
#folderPath:图片所在的文件夹名称
#pdfFilePath:最终生成的pdf文件路径
def combine2Pdf( folderPath, pdfFilePath ):
    files = os.listdir( folderPath )
    pngFiles = []
    sources = []
    for file in files:
        if 'jpg' in file or 'png' in file:
            pngFiles.append( folderPath +'/'+ file )
    #图片根据名字进行排序
    pngFiles.sort()
    output = Image.open( pngFiles[0] )
    pngFiles.pop( 0 )
    #以第一个图片的尺寸为基准,后面图片都跟着对齐,否则拼接成pdf胖瘦不一致
    size=output.size
    #更改后面的图片的尺寸
    for file in pngFiles:
        change_img_size(size,file)
    for file in pngFiles:
        pngFile = Image.open( file )
        if pngFile.mode == "RGB":
            pngFile = pngFile.convert( "RGB" )
        sources.append( pngFile )
    #以一个图片的为准拼接后面的图片为pdf格式最终保存
    output.save( pdfFilePath, "pdf", save_all=True, append_images=sources )
combine2Pdf('./out','./out/test.pdf')

 

二、PDF的裁剪功能

假设pdf的每一页大小尺寸都是一样的,但是下面有固定的一行广告字或者固定一小块水印,可以采取这种截取方式,统一去掉

import PyPDF2
input_file = PyPDF2.PdfFileReader(open('./out/论文.pdf', 'rb'))
page_count = input_file.getNumPages()  # 页数
output_file = PyPDF2.PdfFileWriter()
for i in range(page_count):
    this_page = input_file.getPage(i)  # 获取第1页
    #获取截取后的矩形坐标
    this_page.mediaBox.lowerLeft=(0,38) #矩形的左下坐标
    this_page.mediaBox.upperLeft = (0,842)#矩形的左上坐标
    this_page.mediaBox.lowerRight=(595,38)#矩形的右下坐标
    this_page.mediaBox.upperRight = (595,842)#矩形的右上坐标
    output_file.addPage(this_page)

output_file.write(open('./out/test1.pdf', 'wb'))

 

posted @ 2022-07-24 08:54  光彩照人  阅读(364)  评论(0编辑  收藏  举报