PDF文档
- 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)
- 解密PDF:部分文档进行加密。
所有的pdfFileReader对象都有一个isEncrypted属性,如果文档是加密的,它返回True , 调用decrypt()函数,传入密码作为参数。decrypt()函数只是解密PdfFileReader对象,不是实际文件,在硬盘中存储的文件还是加密的。 - 与读对象对应的是PdfFilterWriter对象,用来创建一个新的PDF文件,写入的文本仅限于从其他PDF中拷贝,旋转页面,重叠页面和加密文件, 不允许直接编辑PDF文件,必须从一个PDF文件中拷贝出来创建一个新的PDF文件。
要生成实际的文件,需要调用PdfFilterWriterr对象的write()方法, 该方法接受一个普通的File对象,以二进制的模式打开,然后写入。 - PyPDF2,实现从一个PDF文档拷贝页面到另一个PDF文档。用于组合多个PDF文档,祛除不想要的页面,或者调整页面的次序。PyPDF2不能在PdfFileWriter对象中间插入页面,addPage()方法只能够在末尾添加页面。
- 利用rotateClockwise():顺时针旋转和rorateCounterClockwise():逆时针旋转;上述两个方法可以实现pdf页面选装90度的整数倍。传入的参数为90的整数倍数;
- PyPDF2可以将一页内容叠加到另一页上面去,用来在页面上添加公式标志,时间戳,logog,防伪标识等水印信息。
- 在调用PdfFileReader对象的writer()方法之前,调用该对象的encrypt(‘密码字符串’)方法,可以对pdf文档进行加密
Word文档
- 利用python-docx模块,python可以创建和修改Word文档,pip install python-docx
- 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
- 获取完整的文本, 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)
返回内容字符串列表
- 设置Paragraph和Run对象的样式
word文档中有3种类型的样式:
段落样式可以应用于Paragraph对象;
字符样式可以应用于Run对象;
链接样式应用于上述两种对象; - 创建新的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:样式)将添加一个段落,并使用一种标题样式