office-pdf操作

一、PDF模块

  使用PyPDF2模块

pip install PyPDF2

1.1 从PDF读取数据

  直接读取,并打印出来。但是这种打印存在一个问题,不能中文字符

import PyPDF2
import os

pdf_obj = open('de8ug.pdf', 'rb')    # 使用二进制方式打开,生成一个文件对象
pdf = PyPDF2.PdfFileReader(pdf_obj)  # 把文件对象传入到pdfread中
print(pdf.numPages)                  # 获取pdf的页数

page = pdf.getPage(1)                # 获取PDF某一页内容,生产一个对象
print(page.extractText())            # 打印出来,但是存在一个问题,不能显示中文

  解决中文字符的问题

import os
from pdfminer.pdfinterp import PDFResourceManager, process_pdf
                    # 资源管理      # 运行过程
from pdfminer.converter import TextConverter # 文本转换 from pdfminer.layout import LAParams # 布局 from io import StringIO         # 临时文件 def convert_pdf(path): rsrcmgr = PDFResourceManager() retstr = StringIO() laparams = LAParams() device = TextConverter(rsrcmgr, retstr, laparams=laparams) # 把几个对象传入进来,生产文本转换对象 fp = open(path, 'rb')
process_pdf(rsrcmgr, device, fp) # 转换的过程,转移到临时文件中 fp.close() device.close() out
= retstr.getvalue() # 直接到临时文件中读取数据 retstr.close() return out

s = convert_pdf('de8ug.pdf')
s.split('\n\x0c')   # 每一页都是根据这个进行分割的

1.2  写入PDF

  从某一个PDF中获取某一页写入到新的一个PDF中

import PyPDF2

pdf_writer = PyPDF2.PdfFileWriter()  # 先生成一个写对象

# 生成一个读对象,并获取指定某一页码
pdf_obj = open('de8ug.pdf', 'rb')
pdf = PyPDF2.PdfFileReader(pdf_obj)
page = pdf.getPage(1)                

# 在写对象中加入这一夜
pdf_writer.addPage(page)  

# 打开一个文件,写入内容
with open('lh-1.pdf', 'wb') as f:
    pdf_writer.write(f)
pdf_obj.close()

1.3 PDF 加密与解密

  加密

with open('debug.pdf', 'rb') as f:
    # 打开需要加密文件,使用文件对象生成一个PDF_read对象
    pdf_read = PyPDF2.PdfFileReader(f)
    # 生成一个pdf写对象
    pdf_write = PyPDF2.PdfFileWriter()

    # 循环每一页,把read对象中的每一页,加入到write对象中
    for page in range(pdf.numPages):
        pdf_write.addPage(pdf.getPage(page))
    
    # 对read对象进行加密
    pdf_write.encrypt('hilouhui')

    # 直接写入到文本中
    with open('lh-en.pdf', 'wb') as f2:
        pdf_write.write(f2)

  解密:

import PyPDF2

with open('lh-en.pdf', 'rb') as f:
    pdf_read = PyPDF2.PdfFileReader(f)

    print(pdf_read.isEncrypted)  # 判读是否加密,这个只是read对象的方法
    pdf_read.decrypt('hilouhui')  # 解密
    # print(pdf_read.getPage(1).extractText())
    page = pdf_read.getPage(1)
    print(page.extractText())

1.4  加水印

  加水印的原理其实就是多个pdf的合并

import PyPDF2
with open('de8ug.pdf', 'rb') as f_in:
    with open('water.pdf', 'rb') as f_out:
        # 打开两个pdf 对对象:
        pdf_in = PyPDF2.PdfFileReader(f_in)
        pdf_out = PyPDF2.PdfFileReader(f_out)
        # 打开一个写的PDF对象
        pdf_write = PyPDF2.PdfFileWriter()

        # 里面那层每一页读取出来,实用水印页进行合并。在写到pdf_write中
        for page_num in range(pdf_in.numPages):
            page = pdf_in.getPage(page_num)
            page.mergePage(pdf_out.getPage(0))  # 对每一页进行合并
            pdf_write.addPage(page)
        
        # 写入文件
        with open('de8ug-water.pdf', 'wb') as f:
            pdf_write.write(f)

 

  

猜你喜欢

转载自www.cnblogs.com/louhui/p/9102927.html