一、Pypdf2的使用
from PyPDF2 import PdfReader, PdfWriter
1.PdfReader - 获取pdf文件相关信息
reader1 = PdfReader('files/MySQL.pdf')
reader2 = PdfReader('files/HEU_KMS_Activator_v20.0.0用户使用手册.pdf')
1.2 获取总的页数
num = reader.getNumPages()
num1 = len(reader1.pages)
print(num1)
1.3 获取某一页:reader.pages[页下标]
p1 = reader2.getPage(0)
p2 = reader2.getPage(1)
2.PdfWriter - 以页为单位对pdf文件进行写操作
2.1 创建pdf文件对应的writer对象
writer = PdfWriter()
2.2 添加指定页
writer.addPage(p1) # 从第一个pdf中读取的第一页的内容覆盖在新的这个pdf中
writer.addPage(p2)
2.3 添加空白页
writer.addBlankPage()
2.4 插入指定页
writer.insertPage(p1, 2)
2.5 插入空白页
writer.insertBlankPage()
保存pdf文件
writer.write('files/new.pdf')
二、练习
from PyPDF2 import PdfReader, PdfWriter
r1 = PdfReader('files/MySQL.pdf')
r2 = PdfReader('files/HEU_KMS_Activator_v20.0.0用户使用手册.pdf')
p1 = r2.getPage(0)
n1 = r1.getNumPages()
n2 = r2.getNumPages()
w = PdfWriter()
1.给MySQL.pdf文件添加封面
w.insertPage(p1, 0)
for x in range(0, n1):
p2 = r1.getPage(x)
w.addPage(p2)
2.将2个pdf文件合并成一个pdf文件
for x in range(0, n1):
p3 = r1.getPage(x)
w.addPage(p3)
for y in range(0, n2):
p4 = r2.getPage(y)
w.addPage(p4)
3.删除pdf文件中所有下标为奇数的页面(实际拿的是偶数页)(下标从0开始)
for x in range(0, n1, 2):
p5 = r1.getPage(x)
w.addPage(p5)
4.在pdf文件中的每一页的后添加一个空白页
for x in range(n1):
p6 = r1.getPage(x)
w.addPage(p6)
w.addBlankPage()
w.write('files/new4.pdf')
三、添加水印
from PyPDF2 import PdfReader, PdfWriter
import os
补充:获取文件夹中所有的文件名:os.listdir(‘文件夹地址’)
result = os.listdir('files')
print(result)
1.准备水印页
r1 = PdfReader('files/water.pdf')
water_page = r1.getPage(0)
2.准备被加水印的pdf
r2 = PdfReader('files/MySQL.pdf')
p2 = r2.getPage(0)
n2 = r2.getNumPages()
3.添加水印
p2.mergePage(water_page)
4.将添加万水印的页面添加到空的pdf中
wt = PdfWriter()
练习:给pdf每一页都添加水印
for x in range(n2):
p = r2.getPage(x)
p.mergePage(water_page)
wt.addPage(p)
wt.write('files/水印2.pdf')
四、创建水印文件
用来创建画布(创建空白的pdf文件)
from reportlab.pdfgen.canvas import Canvas
注册字体
from reportlab.pdfbase.pdfmetrics import registerFont
from reportlab.pdfbase.ttfonts import TTFont
1.创建一个空白文件(画布)
在指定位置新建空白的pdf文件:Canvas(‘文件名及路径’)
c = Canvas('files/MyWater.pdf')
2.添加文字
2.1 注册字体(关联字体名称与实际ttf文件)
registerFont(TTFont('f1', 'files/aa.ttf'))
registerFont(TTFont('f2', 'files/FZXSHJW.TTF'))
2.2 设置要用的字体名称和字体大小
c.setFont('f2', 70)
2.3 设置字体颜色
RGB颜色参数:r、g、b:0~1
透明度:0~1
c.setFillColorRGB(139/255, 69/255, 19/255, alpha=0.3)
2.4 旋转
c.rotate(30)
画布对象.drwaString(x坐标, y坐标, ‘内容’)
c.drawString(400, 210, 'MetalSlug')
3.渲染图片
画布对象.drawImage(‘图片地址’,x坐标, y坐标, 透明去白开关=‘自动’)
c.drawImage('files/MetalSlug169.gif', 300, 200, mask='auto')
保存pdf
c.save()
五、批量添加水印作业
from PyPDF2 import PdfReader, PdfWriter
import os
files_list = os.listdir('files1')
print(files_list)
r1 = PdfReader('files/MyWater.pdf')
water_page = r1.getPage(0)
for x in files_list:
r2 = PdfReader('files1/' + x)
n2 = r2.getNumPages()
wt = PdfWriter()
for y in range(n2):
p = r2.getPage(y)
p.mergePage(water_page)
wt.addPage(p)
wt.write('files2/' + x)