Python3实现PDF文件截取、添加页眉、页脚、页码、合并功能

本文详细介绍了如何使用Python3中的PyPDF2和reportlab库实现PDF文件的截取指定页面、添加页眉和页脚、插入页码以及合并PDF的功能,以满足免费且自定义的需求。
摘要由CSDN通过智能技术生成

Python3实现PDF文件截取、添加页眉、页脚、页码、合并功能

工作上的原因,需要对pdf文件进行一些处理,网上搜索的工具,大部分都是需要收费的,因此自己用python实现了一些自己需要的功能。

from PyPDF2 import PdfWriter, PdfReader
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, letter
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
import io

#截取pdf指定页面
def Cut():
    input1 = input("输入原始文件路径:")
    pdf_file = PdfReader(open(input1, "rb"))
    print("文件页数为:",len(pdf_file.pages),"页")
    start = input("输入开始页数:")
    end = input("输入结束页数:")
    dir_path = input("输入输出文件路径(包含文件名):")
    output = PdfWriter()
    for i in range(int(start),int(end)):
        output.add_page(pdf_file.pages[i])
    with open(dir_path,'wb') as out:
        output.write(out)
    print("Done!")

def AddTop():
    input1 = input("输入原始文件路径:")
    words=input("输入要添加的文字:") 
    dir_path = input("输入输出文件路径(包含文件名):")
    new_pdf = CreatePageWithWords(words,200,804)
    OutPutFile(input1,dir_path,new_pdf)
    print("Done!")

def AddBottom():
    input1 = input("输入原始文件路径:")
    words=input("输入要添加的文字:") 
    dir_path = input("输入输出文件路径(包含文件名):")
    new_pdf = CreatePageWithWords(words,300,20)
    OutPutFile(input1,dir_path,new_pdf)
    print("Done!")
    
def AddNumber():
    input1 = input("输入原始文件路径:")
    pdf_file = PdfReader(open(input1, "rb"))
    dir_path = input("输入输出文件路径(包含文件名):")
    output = PdfWriter()
    for i in range(len(pdf_file.pages)):
        new_pdf = CreatePageWithWords(i+1,300,20)
        page = pdf_file.pages[i]
        page.merge_page(new_pdf.pages[0])
        output.add_page(page)
        print("\r progress:{:.0f}%".format((i+1)/len(pdf_file.pages)*100),end="")
    with open(dir_path,'wb') as out:
        output.write(out)
    print("Done!")
    
def Merge():
    input1=input("输入要合并的pdf文件1路径:")
    input2=input("输入要合并的pdf文件2路径:")
    outpath = input("输入输出文件路径(包含文件名):")
    output = PdfWriter()
    file1=PdfReader(open(input1, "rb"))
    file2=PdfReader(open(input2, "rb"))
    for i in range(len(file1.pages)):
        output.add_page(file1.pages[i])
    for i in range(len(file2.pages)):
        output.add_page(file2.pages[i])
    with open(outpath,'wb') as out:
            output.write(out)
    print("Done!")
    
def CreatePageWithWords(words,x,y):
    packet = io.BytesIO()
    # 使用Reportlab创建一个新的PDF,原理是将两个页面叠加起来
    can = canvas.Canvas(packet, pagesize=A4)
    pdfmetrics.registerFont(TTFont("chs", "C:/Windows/Fonts/SimSun.ttc"))
    can.setFont("chs", 12)
    can.drawString(x, y, str(words))
    can.save()
    packet.seek(0)
    return PdfReader(packet)

def OutPutFile(src,dir,addinfo):
    output = PdfWriter()  
    srcfile = PdfReader(open(src, "rb"))
    for i in range(len(srcfile.pages)):
        page = srcfile.pages[i]
        page.merge_page(addinfo.pages[0])
        output.add_page(page)
        print("\r progress:{:.0f}%".format((i+1)/len(srcfile.pages)*100),end="")
    with open(dir,'wb') as out:
            output.write(out)
            
if __name__ == '__main__':
    print("选择功能:")
    print("1.截取pdf指定页面")
    print("2.添加文字到pdf文件顶部")
    print("3.添加文字到pdf文件底部")
    print("4.添加页码")
    print("5.合并pdf文件")
    choice = input("输入功能编号:")
    if choice == "1":
        Cut()
    elif choice == "2":
        AddTop()
    elif choice == "3":
        AddBottom()
    elif choice == "4":
        AddNumber()
    elif choice == "5":
        Merge()
    else:
        print("输入错误!"

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要去除PDF文件中的页眉页脚,可以使用Python中的第三方库PyPDF2来实现。 首先,我们需要安装PyPDF2库。可以使用以下命令在命令行中安装库: ``` pip install PyPDF2 ``` 安装完成后,我们可以编写Python代码来去除PDF文件页眉页脚。具体代码如下: ```python import PyPDF2 # 打开PDF文件 pdf_file = open('example.pdf', 'rb') # 创建PDF阅读器对象 pdf_reader = PyPDF2.PdfReader(pdf_file) # 创建PDF写入器对象 pdf_writer = PyPDF2.PdfWriter() # 遍历PDF页面 for page_num in range(pdf_reader.numPages): # 获取当前页面 page = pdf_reader.getPage(page_num) # 从页面中提取内容框 content_box = page.mediaBox # 更新内容框的上边界和下边界 content_box.upperRight = (content_box.upperRight[0], content_box.upperRight[1]-50) # 更新上边界 content_box.lowerLeft = (content_box.lowerLeft[0], content_box.lowerLeft[1]+50) # 更新下边界 # 创建新页面,并将内容框更新后的页面添加PDF写入器中 new_page = pdf_writer.add_blank_page(width=page.mediaBox.getWidth(), height=page.mediaBox.getHeight()) # 创建新页面 new_page.mergeTranslatedPage(page, tx=0, ty=-50) # 添加内容框更新后的页面 # 将处理后的 PDF 页面写入新文件 output_file = open('new_example.pdf', 'wb') pdf_writer.write(output_file) # 关闭文件 pdf_file.close() output_file.close() ``` 以上代码将打开`example.pdf`文件,并遍历每个页面,通过更新内容框的上边界和下边界来去除页眉页脚。然后将处理后的页面写入一个新的PDF文件`new_example.pdf`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值