day9 python操作pdf文件
1.Pypdf2的使用(2.12.1版本)
from PyPDF2 import PdfReader,PdfWriter
PdfReader -----获取pdf文件信息
1). 创建pdf文件对应的reader对象
reader = PdfReader('pdf位置')
2). 获取总页数
num = reader.getNumPages()
3). 获取某一页
page = reader.getPage(0)#获取第一页
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
添加水印页面
reader1 = PdfReader('files/water.pdf')
water1 = reader1.getPage(0)
准备需要添加水印的文件
reader2 = PdfReader('files/MySQL.pdf')
page = reader2.getPage(0)
添加水印
page.mergePage(water1)
将添加完的水印页面添加到空的pdf中
writer = PdfWriter()
writer.addPage(page)
保存
writer.write('files/水印1.pdf')
4. 创建水印
from reportlab.pdfgen.canvas import Canvas
创建空白的pdf
file = Canvas('files/Mywater.pdf')
添加文字
file.drawString(0,0,'hello world!')
添加中文
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,'你好世界!')
图片
# 文件对象.drawImage(图片地址, x坐标, y坐标, mask='auto')
file.drawImage('files/car.jpg', 0, 0, mask='auto')
保存
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)