栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python PDF 合并、删除、导出、分离操作

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python PDF 合并、删除、导出、分离操作

import os
from PyPDF2 import PdfFileMerger
from PyPDF2 import PdfFileWriter, PdfFileReader
import datetime


def gefPdfName():
    now = datetime.datetime.now()
    otherStyleTime = now.strftime("%Y%m%d_%H%M%S")
    return otherStyleTime + '.pdf'


def printPdfPage():
    infile = PdfFileReader('./pdf/' + pdfFile, 'rb')

    page = ''
    for i in range(infile.getNumPages()):
        page = page + str(i + 1) + ','

    print('目前的页码顺序为:' + page)


def delPdf(pdfFile, delArr):
    # page numbering starts from 0
    pages_to_delete = delArr.split(',')
    # print(pages_to_delete)
    infile = PdfFileReader('./pdf/' + pdfFile, 'rb')
    output = PdfFileWriter()

    for i in range(infile.getNumPages()):
        if str(i + 1) not in pages_to_delete:
            print(i + 1)
            p = infile.getPage(i)
            output.addPage(p)

    newfile = gefPdfName()
    with open('./pdf/' + newfile, 'wb') as f:
        output.write(f)
        print('删除完成!新文件为' + newfile)


def sortPdf(pdfFile, sortPage):
    # page numbering starts from 0
    print(sortPage)
    page = sortPage.split(',')
    print('重新排序的顺序为:' + sortPage)

    infile = PdfFileReader('./pdf/' + pdfFile, 'rb')
    output = PdfFileWriter()

    for i in page:
        p = infile.getPage(int(i) - 1)
        output.addPage(p)

    newfile = gefPdfName()
    with open('./pdf/' + newfile, 'wb') as f:
        output.write(f)
        print('重新排序完成!新文件为' + newfile)


def mergerPdf(target_path):
    pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')]
    pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst]

    file_merger = PdfFileMerger()
    for pdf in pdf_lst:
        file_merger.append(pdf)  # 合并pdf文件

    newfile = gefPdfName()
    file_merger.write('./pdf/' + newfile)
    print('合并完成!新文件为' + newfile)


def splitPdf(pdfFile):
    # page numbering starts from 0
    infile = PdfFileReader('./pdf/' + pdfFile, 'rb')
    for i in range(infile.getNumPages()):
        p = infile.getPage(i)
        output = PdfFileWriter()
        output.addPage(p)
        newfile = '{:0>5d}'.format(i + 1) + '.pdf'
        with open('./pdf/' + newfile, 'wb') as f:
            output.write(f)


if __name__ == "__main__":
    while True:
        print("导出、排序PDF请输入1;")
        print("删除PDF请输入2;")
        print("合并PDF请输入3;")
        print("分离PDF请输入4;")
        print("退出请输入Q;")

        p = input('输入请选择:')
        if p == "q":
            break
        elif int(p) == 1:
            print("注意,请将PDF源文件复制到本程序pdf文件夹下;")
            pdfFile = input('请输入文件名,如:123.pdf:')
            printPdfPage()
            sortPage = input('请将页码重新排序,不要的页码请删除,如:1,2,3或 3,2,1:')
            sortPdf(pdfFile, sortPage)
        elif int(p) == 2:
            print("注意,请将PDF源文件复制到本程序pdf文件夹下;")
            pdfFile = input('请输入文件名,如:123.pdf:')
            delArr = input('请输入要删除的页码,如输入1或1,3,5:')
            delPdf(pdfFile, delArr)
        elif int(p) == 3:
            print("请把所有要合并的pdf源文件放到本程序下的一个文件夹内;")
            print("pdf按顺命名,如001.pdf,002.pdf,003.pdf...;")
            target_path = input('请输入要合并的pdf文件夹名:')
            mergerPdf(target_path)
        elif int(p) == 4:
            pdfFile = input('请输入文件名,如:123.pdf:')
            splitPdf(pdfFile)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931722.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号