Python操作pdf文件

一、Pypdf2的使用

  1. 导入相关库

    from PyPDF2 import PdfFileReader, PdfFileWriter
    
  2. PdfFileReader的用法: 对pdf文件进行读操作

  • PdfFileReader(原文件)- 打开pdf文件创建reader对象,返回只读pdf文件对象

  • file1.getNumPages()- 获取pdf文件中的页数

  • 文件对象.getPage(页下标)- 获取指定页,得到页对应的Page对象

    file1 = PdfFileReader('files/MySQL.pdf')
    
    count = file1.getNumPages()
    print(count)
    
    page1 = file1.getPage(0)
    
  1. PdfFileWriter的用法: 对pdf文件进行写操作
  • PdfFileWriter()- 以写的方式打开pdf文件创建一个只写的pdf文件对象(空文件)

  • addBlankPage(长, 高)- 添加空白页

  • addPage(page)- 添加指定页

    # 1)以写的方式打开pdf文件创建一个只写的pd文件对象
    # file2 = PdfFileWriter()
    #
    # file2.write('files/data1.pdf')    
    # pdf文件没内容,即打不开或者被损坏
    
    # 1)以写的方式打开pdf文件创建一个只写的pd文件对象
    # a.PdfFileWriter()    -   创建一个空的pdf文件
    file2 = PdfFileWriter()
    # 2)添加空白页
    file2.addBlankPage(300, 400)
    # 3)添加指定页
    file2.addPage(page1)
    # 4)保存文件
    file2.write('files/data1.pdf')
    

二、Pypdf2的基本操作

  1. 导入相关库

    from PyPDF2 import PdfReader, PdfWriter, PdfFileReader, PdfFileWriter
    
  2. 案例1:插入封面

    • PdfReader('原文件')- 打开需要添加封面的pdf文件
    • file1.getNumPages()- 获取总页数
    • PdfReader('原文件').getPage(页码)准备封面对应的页面
    • PdfWriter()- 创建空的pdf文件,先添加封面页,然后再依次添加原文件的所有的页
    file1 = PdfReader('files/MySQL.pdf')
    
    count = file1.getNumPages()
    
    first_page = PdfReader('files/water.pdf').getPage(0)
    
    file2 = PdfWriter()
    
    # 添加封面页
    file2.addPage(first_page)
    
    # 依次添加原文件中所有的页面
    for i in range(count):
        page = file1.getPage(i)
        file2.addPage(page)
    
    # 4.保存文件
    file2.write('files/MySQL.pdf')
    
  3. 练习:两个pdf文件合并成一个pdf文件

    from PyPDF2 import PdfReader, PdfWriter, PdfFileReader, PdfFileWriter
    
    file1 = PdfFileReader('files/MySQL.pdf')
    file2 = PdfFileReader('files/HEU_KMS_Activator_v20.0.0用户使用手册.pdf')
    
    count1 = file1.getNumPages()
    print(count1)
    count2 = file2.getNumPages()
    
    # 准备封面对应的页面
    first_page = PdfFileReader('files/water.pdf').getPage(0)
    
    # 3.创建空的pdf文件,先添加封面页,然后再依次添加原文件的所有的页
    file3 = PdfWriter()
    
    for i in range(count1):
        page = file1.getPage(i)
        file3.addPage(page)
    file3.addPage(first_page)
    for j in range(count2):
        page = file2.getPage(j)
        file3.addPage(page)
    file3.addPage(first_page)
    
    file3.write('files/data2.pdf')
    

三、添加水印

  1. 导入需要用到的库

    from  PyPDF2 import PdfReader, PdfWriter, PdfFileReader
    
  2. 案例:给指定文件第一页添加水印

    file1 = PdfReader('files/HEU_KMS_Activator_v20.0.0用户使用手册.pdf')
    # 获取第一页
    page1 = file1.getPage(0)
    
    # 2.获取水印页
    water_page = PdfReader('files/water.pdf').getPage(0)
    
    # 3.给第一页添加水印
    page1.mergePage(water_page)
    
    # 4.将添加完水印的页添加到空的pdf文件中
    file2 = PdfWriter()
    file2.addPage(page1)
    
    # 5.保存
    file2.write('files/data3.pdf')
    
  3. 练习:给MySQL.pdf文件每一页都添加水印

    file1 = PdfReader('files/MySQL.pdf')
    file2 = PdfWriter()
    
    count1 = file1.getNumPages()
    
    # 水印页
    water_page = PdfReader('files/water.pdf').getPage(0)
    
    for i in range(2, count1):
        page = file1.getPage(i)
        page.mergePage(water_page)
        file2.addPage(page)
    
    file2.write('files/data4.pdf')
    

四、创建水印文件

  1. 导入相关库

    from reportlab.pdfgen import canvas
    from reportlab.pdfbase import pdfmetrics
    from reportlab.pdfbase.ttfonts import TTFont
    
  2. 创建画布(包含一个空白页的pdf文件)

    c = canvas.Canvas('files/water2.pdf') 
    
  3. 添加文字内容

    • c.setFillColorRGB(210/255, 105/255, 30/255, 透明度)设置文件颜色
    • 注册ttf文件对应的字体 - 设置文字字体
    • rotate(旋转指定角度)- 设置文字角度(水平为0°)
    • c.drawString(x坐标, y坐标, 文字内容)- 在指定的位置添加文字
    • drawImage(图片路径, x坐标, y坐标, 图片宽度, 图片高度)- 添加图片
    # 1)设置文件颜色                               透明度
    c.setFillColorRGB(210/255, 105/255, 30/255, 0.3)
    # 2)设置文字字体
    pdfmetrics.registerFont(TTFont('f1', 'files/dd.ttf'))
    # 设置字体
    c.setFont('f1', 40)
    
    c.rotate(45)
    
    c.drawString(350, 100, '三眼五显仙人——魈')
    
    # 重置所有的效果再重新写
    c.setFont('f1', 50)
    c.setFillColorRGB(10/255, 149/255, 237/255)
    c.rotate(-45)    # 回正
    c.drawString(100, 200, '上仙')
    
    c.drawImage('files/魈魈.png', 30, 30, 80, 80)
    # 保存
    c.save()
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值