day3.24

day3.24-多线程的运用

1. pdf文件的读操作

# pypdf2  -   以页为基本单位对pdf文件进行读写操作(无法直接操作每一页的内容)

from PyPDF2 import PdfFileReader

# 1. 打开文件创建reader对象
reader = PdfFileReader(open('files/2020-陈剑.pdf', 'rb'))

# 2. 获取pdf文件的总页数
num = reader.getNumPages()
print(num)

# 3. 获取制定的页,返回页对象
# reader对象.getPage(页的下标)    -   获取指定页,下表从0开始
# page = reader.getPage(5)
for index in range(num):
    page = reader.getPage(index)
    print(page)

2. pdf文件的写操作

from PyPDF2 import PdfFileWriter,PdfFileReader

# 1. 创建writer对象;会自动创建一个空的pdf文件
writer = PdfFileWriter()

reader = PdfFileReader(open('files/2020-陈剑.pdf','rb'))

# 2. 添加页
writer.addPage(reader.getPage(0))

# 3. 添加空白页
# writer.addBlankPage(400,600)  -   宽、长

# 练习:删除文件第一页内容
# num = reader.getNumPages()
# for i in range(1,num):
#     writer.write(i)


# 保存文件
writer.write(open('files/new1.pdf','wb'))

3. 合并pdf文件

from PyPDF2 import PdfFileWriter,PdfFileReader

reader1 = PdfFileReader(open('files/2020-陈剑.pdf','rb'))
reader2 = PdfFileReader(open('files/new.pdf','rb'))
writer = PdfFileWriter()

num1 = reader1.getNumPages()
for i in range(num1):
    writer.addPage(reader1.getPage(i))

num2 = reader2.getNumPages()
for i in range(num2):
    writer.addPage(reader1.getPage(i))

writer.write(open('files/new1.pdf','wb'))

4. 页面相关操作

from PyPDF2 import PdfFileReader,PdfFileWriter

reader1 = PdfFileReader(open('files/2020-陈剑.pdf','rb'))
reader2 = PdfFileReader(open('files/new.pdf','rb'))
writer = PdfFileWriter()

# 1. 旋转 -   返回值和原页面都是旋转后的页面
# 页对象. rotateClockwise (旋转角度)

# page = reader1.getPage(0)
# new_page = page.rotateClockwise(90)
# writer.addPage(new_page)



# 2. 缩放
# page = reader2.getPage(0)
# page.scale(600,800)

# 3. 合并(添加水印)
# page1 = reader1.getPage(2)
# page2 = reader2.getPage(0)

# 给page1添加水印
# page1.mergePage(page2)
# writer.addPage(page1)




writer.write(open('files/页面操作.pdf','wb'))

5. 创建水印文件

# 倒入创建空的pdf文件的类
from reportlab.pdfgen.canvas import Canvas
# 导入注册字体的工具
from reportlab.pdfbase.pdfmetrics import registerFont
# 导入注册字体类
from reportlab.pdfbase.ttfonts import TTFont
# 导入大小单位
# from reportlab.lib.utils import c

# 1. 创建空的pdf文件
pdf = Canvas('files/创建水印.pdf')

# 2. 添加文字内容
# 1)设置字体
# a)注册字体文件
registerFont(TTFont('f1','files/dd.ttf'))
registerFont(TTFont('f2','files/dd1.ttf'))
# b)设置pdf文件的字体(可以反复设)
# 文件对象.setFONT(字体名字,字体大小)
pdf.setFont('f1',100)

# 2)设置字体颜色
# RGB颜色(计算机三原色) -   R->red,G->green,B->blue 标准值0~255(这是0~1)
# 文件对象.setFillColorRGB(r,g,b,alpha(透明度 0~1))

# 3)旋转
pdf.rotate(30)

pdf.setFillColorRGB(30/255,144/255,255/255,0.5)
pdf.drawString(300,300,'Mr.Liu')

pdf.setFillColorRGB(30/255,30/255,30/255,0.5)
pdf.drawString(350,400,'Mr.Liu')

# 添加图片
pdf.drawImage("files/铃铛.png",100,100)


# 保存
pdf.save()

6. 批量添加水印

import os
from PyPDF2 import PdfFileWriter,PdfFileReader


reader1 = PdfFileReader(open('files/创建水印.pdf','rb'))
page1 = reader1.getPage(0)
pdfs = os.listdir('in')
for name in pdfs:
    writer = PdfFileWriter()
    reader2 = PdfFileReader(open(f'in/{name}','rb'))
    num = reader2.getNumPages()
    for i in range(num):
        page2 = reader2.getPage(i)
        page2.mergePage(page1)
        writer.addPage(page2)
        writer.write(open(f'out/{name}','wb'))

作业

from PyPDF2 import PdfFileWriter,PdfFileReader
import os

def pdf(path1,path2,path3):

    name_list = os.listdir(f'{path1}')
    pdf_name = []
    for i in name_list:
        if '.pdf' in i:
            pdf_name.append(i)

    for name in pdf_name:
        writer = PdfFileWriter()
        reader1 = PdfFileReader(open(f'{path1}/{name}','rb'))
        reader2 = PdfFileReader(open(f'{path3}','rb'))
        page1 = reader2.getPage(0)
        num = reader1.getNumPages()
        for i in range(num):
            page2 = reader1.getPage(i)
            try:
                page2.mergePage(page1)
                writer.addPage(page2)
                writer.write(open(f'{path2}/{name}','wb'))
            except:
                continue
if __name__ == '__main__':
    in_pdf = 'in'
    watermark_pdf = 'watermark/创建水印.pdf'
    out_pdf = 'out'
    pdf(in_pdf,out_pdf,watermark_pdf)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值