PDF文档

  1. PDF: protable Document Format 便携式文本格式
    用于处理PDF的模块是PyPDF2
    该模块只能从文件中提取文本,并将文本返回为Python字符串,不能提取图像,图表或者其他媒体。
import PyPDF2
import os

current_path = os.getcwd()
file_path = current_path + '/learning_python.pdf'
pdf_file_obj = open(file_path, 'rb')  # 打开文件
pdf_reader = PyPDF2.PdfFileReader(pdf_file_obj) #获取pdf的对象
print(pdf_reader.numPages) # 获取所有的页码

page_obj = pdf_reader.getPage(2) # 获取指定页码内容,从0开始
print(page_obj)
tmp = page_obj.extractText() # 提取文本内容,返回文本字符串
print(tmp)
  1. 解密PDF:部分文档进行加密。
    所有的pdfFileReader对象都有一个isEncrypted属性,如果文档是加密的,它返回True , 调用decrypt()函数,传入密码作为参数。decrypt()函数只是解密PdfFileReader对象,不是实际文件,在硬盘中存储的文件还是加密的。
  2. 与读对象对应的是PdfFilterWriter对象,用来创建一个新的PDF文件,写入的文本仅限于从其他PDF中拷贝,旋转页面,重叠页面和加密文件, 不允许直接编辑PDF文件,必须从一个PDF文件中拷贝出来创建一个新的PDF文件。
    要生成实际的文件,需要调用PdfFilterWriterr对象的write()方法, 该方法接受一个普通的File对象,以二进制的模式打开,然后写入。
  3. PyPDF2,实现从一个PDF文档拷贝页面到另一个PDF文档。用于组合多个PDF文档,祛除不想要的页面,或者调整页面的次序。PyPDF2不能在PdfFileWriter对象中间插入页面,addPage()方法只能够在末尾添加页面。
  4. 利用rotateClockwise():顺时针旋转和rorateCounterClockwise():逆时针旋转;上述两个方法可以实现pdf页面选装90度的整数倍。传入的参数为90的整数倍数;
  5. PyPDF2可以将一页内容叠加到另一页上面去,用来在页面上添加公式标志,时间戳,logog,防伪标识等水印信息。
  6. 在调用PdfFileReader对象的writer()方法之前,调用该对象的encrypt(‘密码字符串’)方法,可以对pdf文档进行加密

Word文档

  1. 利用python-docx模块,python可以创建和修改Word文档,pip install python-docx
  2. docx文档结构较为复杂,这些结构在python-docx中用3种不同的类型来表示,在最高一层,Document对象表示整个文档,该对象包含一个Paragraph对象的列表,表示文档中的段落(按下回车,新的段落),每个Paragraph 对象都汉堡一个Run对象的列表。
    word文档中的文本不仅仅包含字符串,还包含与之相关的字体,大小,颜色和其他样式信息。样式是这些属性的集合,一个Run对象是相同样式文本的延续,当文本的样式发生裱花,就需要一个新的Run对象。
import docx, os

current_path = os.getcwd()
print(current_path)
file_path = current_path + '\word_test.docx'  
print(file_path)

doc = docx.Document(file_path) # 返回一个对象
print(len(doc.paragraphs))  #获取长度

print(doc.paragraphs[0].text)# 获取第一行的文本
print(doc.paragraphs[1].text)
print(doc.paragraphs[2].text)
print(doc.paragraphs[3].text)

print(len(doc.paragraphs[1].runs))# 获取第一个对象的文本长度

print(doc.paragraphs[1].runs[0].text) # 获取第一个对象的文本字符串
print(doc.paragraphs[1].runs[1].text)
print(doc.paragraphs[1].runs[2].text)
print(doc.paragraphs[1].runs[3].text)

结果是:
6
Document title: test file
1A plain paragraph with some bold and some italic
2A plain paragraph with some bold and some italic

4
1A plain paragraph with some 
bold
 and some
 italic
  1. 获取完整的文本, getText()函数
    传入文件名
def getText(filename):
    doc = docx.Document(filename)
    fullText = []
    for para in doc.paragraphs:
        fullText.append(para.text)
    return '\n'.join(fullText)


tmp_text = getText(file_path)

返回内容字符串列表

  1. 设置Paragraph和Run对象的样式
    word文档中有3种类型的样式:
    段落样式可以应用于Paragraph对象;
    字符样式可以应用于Run对象;
    链接样式应用于上述两种对象;
  2. 创建新的word对象
doc = docx.Document() # 返回一个新的word document对象
doc.add_paragraph('hello this is the fitst wrod by python docx model') # 添加一段文本
doc.save(current_path + '/hell_word.docx') # 保存文本到文件中

再次调用add_paragraph()方法添加新段落
调用add_run()方法向末尾添加文本;
调用 add_heading(‘标题名称’, num:样式)将添加一个段落,并使用一种标题样式