python学习笔记

day9 python操作pdf文件

1.Pypdf2的使用(2.12.1版本)

from PyPDF2 import PdfReader,PdfWriter

  1. PdfReader -----获取pdf文件信息

1). 创建pdf文件对应的reader对象

reader = PdfReader('pdf位置')

2). 获取总页数

num = reader.getNumPages()

3). 获取某一页

page = reader.getPage(0)#获取第一页
  1. Pdfwriter---------写操作

writer = PdfWriter()

1). 添加页

writer.addPage(page1) #添加为最后一页
writer.addPage(page2)
writer.addBlankPage() # 添加空白页

2). 插入页

writer.insertPage(page1,2) # 将page1放在第3页前面
# 保存
writer.write('files/new.pdf')

2.练习题

  • 逻辑:要添加则新建一个,将原文件以及要添加的一页一页加进新的,若要删除则不加入新的即可

from PyPDF2 import PdfReader,PdfWriter
# 1.在mysql.pdf文件添加封面
reader1 = PdfReader('files/MySQL.pdf')
reader2 = PdfReader('files/HEU_KMS_Activator_v20.0.0用户使用手册.pdf')
p1=reader2.getPage(0)
writer = PdfWriter()
writer.insertPage(p1,0)
num = reader1.getNumPages()
for i in range(1,num+1):
    p1 = reader1.getPage(i-1)
    writer.addPage(p1)
writer.write('files/MySQL2.pdf')

# 2. 将两个pdf文件合并为1个
writer1 =PdfWriter()
num = reader1.getNumPages()
num1 = reader2.getNumPages()
for i in range(num):
    p1 = reader1.getPage(i)
    writer1.addPage(p1)
for j in range(num1):
    p1= reader2.getPage(j)
    writer1.addPage(p1)
writer1.write('files/合并.pdf')

# 3. 删除所有下标为奇数的页
writer2 =PdfWriter()
num = reader1.getNumPages()
for i in range(num):
    if (i+1) % 2 == 0:
        p1 = reader1.getPage(i)
        writer2.addPage(p1)
writer2.write('files/删除.pdf')

# 4. 在pdf中每一页后都添加一个空白页
writer3 =PdfWriter()
num = reader1.getNumPages()
for i in range(num):
    p1 = reader1.getPage(i)
    writer3.addPage(p1)
    writer3.addBlankPage()
writer3.write('files/空白页.pdf')

3.添加水印

from PyPDF2 import PdfWriter, PdfReader
  1. 添加水印页面

reader1 = PdfReader('files/water.pdf')
water1 = reader1.getPage(0)
  1. 准备需要添加水印的文件

reader2 = PdfReader('files/MySQL.pdf')
page = reader2.getPage(0)
  1. 添加水印

page.mergePage(water1)
  1. 将添加完的水印页面添加到空的pdf中

writer = PdfWriter()
writer.addPage(page)
  1. 保存

writer.write('files/水印1.pdf')

4. 创建水印

from reportlab.pdfgen.canvas import Canvas
  1. 创建空白的pdf

file = Canvas('files/Mywater.pdf')
  1. 添加文字

file.drawString(0,0,'hello world!') 
  1. 添加中文

from reportlab.pdfbase.pdfmetrics import registerFont
from reportlab.pdfbase.ttfonts import TTFont

1). 注册字体

registerFont(TTFont('f1','files/font1.ttf'))
registerFont(TTFont('f2','files/font2.ttf'))

2). 设置字体颜色

file.setFillColorRGB(139/255,69/255,19/255,0.5)# 数字都是是0到1之间,前三个数字是颜色值,最后一个表示透明度
                      # 将rgb值都除以255再填入即可;透明度0是完全透明

3). 旋转

file.rotate(45)

4). 设置字体格式和大小

file.setFont('f1',40)
# 文件对象.drawString(x,y,'文字内容')
file.drawString(200,100,'你好世界!')
  1. 图片

# 文件对象.drawImage(图片地址, x坐标, y坐标, mask='auto')
file.drawImage('files/car.jpg', 0, 0, mask='auto')
  1. 保存

file.save()

5. 作业

# 作业1:设计水印
from reportlab.pdfgen.canvas import Canvas
from reportlab.pdfbase.pdfmetrics import registerFont
from reportlab.pdfbase.ttfonts import TTFont
file = Canvas('files/mywater1.pdf')
registerFont(TTFont('f1','files/font1.ttf'))
file.setFillColorRGB(34/255,139/255,34/255,0.5)
file.setFont('f1',200)
file.rotate(45)
file.drawString(400,80,'玉米')
for i in range(100,1000,100):
    for j in range(-400,600,100):
        file.drawImage('files/玉米.png', i, j, mask='auto')

file.save()

# 作业2:批量给文件加水印
import os
from PyPDF2 import PdfWriter, PdfReader

result = os.listdir('input')
reader1=PdfReader('files/mywater1.pdf')
water1 = reader1.getPage(0)
for i in result:
    reader2 = PdfReader('input/'+i)
    writer = PdfWriter()
    num = reader2.getNumPages()
    for j in range(num):
        page1 = reader2.getPage(j)
        page1.mergePage(water1)
        writer.addPage(page1)
    writer.write('out/'+i)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值