python十三章处理PDF和Word文档

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

    返回内容字符串列表

  5. 设置Paragraph和Run对象的样式
    word文档中有3种类型的样式:
    段落样式可以应用于Paragraph对象;
    字符样式可以应用于Run对象;
    链接样式应用于上述两种对象;

  6. 创建新的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:样式)将添加一个段落,并使用一种标题样式

猜你喜欢

转载自blog.csdn.net/q1138266752/article/details/84102234
今日推荐