python通过第三方库操作PDF文件的几种常见方法,


目录
  • 前言
  • 一、文本内容提取
    • 1.1、pdfplumber提取文本内容
    • 1.2、pdfminer提取文本内容
  • 二、表格内容提取
    • 三、内容拆分
      • 四、内容合并
        • 五、通过命令工具生成pdf文档
          • 5.1 网页内容生成pdf
          • 5.2 本地网页内容生成pdf
          • 5.3 字符串内容生成pdf
        • 总结 

          前言

          大家好,有关python操作pdf的方法,各种语言处理起来都比较麻烦,而且各种第三方库的应用场景都不同。下面说明一下python如何通过第三方库如何处理pdf文件。

          一、文本内容提取

          1.1、pdfplumber提取文本内容

          安装pdfplumber

          # 安装模块
          pip install pdfplumber
          

          pdfplumber提取PDF中文字代码思路如下

          • 利用pdfplumber打开一个 PDF 文件
          • 获取指定的页,或者遍历每一页
          • 利用.extract_text()方法提取当前页的文字
          import pdfplumber
          import os
          
          path = os.getcwd()
          filepath = os.path.join(path,"原则.pdf")
          
          with pdfplumber.open(filepath) as pdf:
              for i in range(len(pdf.pages)):
                  page = pdf.pages[i]
                  print(page.extract_text())

          1.2、pdfminer提取文本内容

          安装pdfminer,注意安装顺序

          pip install pdfminer3k
          pip install pdfminer.six
          

          pdfminer.six提取PDF中文字代码思路如下

          • 利用open打开一个 PDF 文件
          • 通过pdfdocument文档管理器读取pdf文件
          • 通过PDFPageInterpreter解析器文档读取
          • 通过PDFPageAggregator聚合器获取页面内容
          • 利用.get_text()方法提取当前页的文字

          读取pdf内容

          from pdfminer.pdfparser import PDFParser
          from pdfminer.pdfdocument import PDFDocument
          
          fp = open("原则.pdf","rb")
          pdfparser = PDFParser(fp)
          doc = PDFDocument(pdfparser)

          构造解析器和聚合器,下面这么逻辑步骤固定格式,直接这么写就可以。

          from pdfminer.pdfinterp import PDFResourceManager
          from pdfminer.pdfinterp import PDFPageInterpreter
          from pdfminer.converter import PDFPageAggregator
          from pdfminer.layout import LAParams
          
          #pdf资源管理器
          resource = PDFResourceManager()
          
          #参数分析器
          laparam  = LAParams()
          
          #页面聚合器
          device = PDFPageAggregator(resource,laparams=laparam)
          
          #页面解释器
          interpreter  = PDFPageInterpreter(resource,device)

          输出pdf内容

          from pdfminer.pdfpage import PDFPage
          
          for page in PDFPage.create_pages(doc):
              #使用页面解释器读取
              interpreter.process_page(page)
              
              #使用聚合器来获取内容
              layout = device.get_result()
              
              for out in layout:
                  #需要注意的是pdf文件不仅文字,还有图片等内容,
                  # 为了避免错误,我们判断是否为文本
                  if(hasattr(out,'get_text')):
                      print(out.get_text())

          二、表格内容提取

          表格内容我们也使用pdfplumber。安装过程和操作步骤也相同,提取表格,我们使用extract_table()方法提取表格内容,使用pandas.DataFrame显示内容。

          import os
          import pandas as pd
          import pdfplumber
          
          path = os.getcwd()
          
          pdf = pdfplumber.open(os.path.join(path,"table.pdf"))
          p0 = pdf.pages[0]
          table = p0.extract_table()
          df = pd.DataFrame(table[1:],columns=table[0])
          
          print(df)

          三、内容拆分

          拆分和合并我们一般使用PyPDF2库

          from PyPDF2 import PdfWriter,PdfReader
          

          这里导入了两个方法:

          • PdfReader 可以理解为读取器
          • PdfWriter 可以理解为写入器
          def split_pdf(infn,outfn,start,end):
              '''
              :param infn 源pdf路径
              :param outfn 目的pdf路径
              :param start 开始页面
              :param end 结束页面
              return
              '''
              pdf_output = PdfWriter()
              pdf_input = PdfReader(open(infn,"rb"))
              page_count = len(pdf_input.pages)
              
              if end  > page_count:
                  end = page_counte
              
              #分割pdf页面,输出新的内容
              for i in range(start,end):
                  pdf_output.add_page(pdf_input.pages[i])
              
              pdf_output.write(open(outfn,'wb'))
          
          split_pdf("原则.pdf","原则2.pdf",5,10)

          四、内容合并

          这里导入了两个方法:

          • PdfReader 可以理解为读取器
          • PdfMerger可以理解为合并器
          from PyPDF2 import PdfMerger,PdfReader
          
          def merge_pdf(filenames,merge_name,password=None):
              '''
              :param filenames 传递一个文件列表
              :param merge_name 合并后的文件
              :param password 对应的密码列表
              return
              '''
              files = len(filenames)
              pdf_merge = PdfMerger(False)
              
              for i in range(files):
                  pdf_reader = PdfReader(open(filenames[i],"rb"))
                  if(not pdf_reader):
                      return
                  pdf_merge.append(pdf_reader)
              
              pdf_merge.write(open(merge_name,"wb"))
          
          merge_pdf(['原则1.pdf','原则2.pdf'],'原则3.pdf')

          五、通过命令工具生成pdf文档

          可以借助命令行工具进行pdf文档的生成。wkhtmltopdf命令行和第三库pdfkit。

          去网上下载wkhtmltopdf工具

          # 安装pdfkit库
          pip install pdfkit
          

          5.1 网页内容生成pdf

          import pdfkit
          
          def url_to_pdf(url, to_file):
              # 将wkhtmltopdf.exe程序绝对路径传入config对象
              path_wkthmltopdf = r'D:\\tool\\wkhtmltopdf\\bin\\wkhtmltopdf.exe'
              config = pdfkit.configuration(wkhtmltopdf=path_wkthmltopdf)
              # 生成pdf文件,to_file为文件路径
              pdfkit.from_url(url, to_file, configuration=config)
          
              print('完成')
          
          url_to_pdf('https://www.baidu.com','D:\baidu.pdf')

          5.2 本地网页内容生成pdf

          #避免乱码在html文件中,<meta charset="UTF-8">
          def html_to_pdf(html, to_file):
              # 将wkhtmltopdf.exe程序绝对路径传入config对象
              path_wkthmltopdf = r'D:\\tool\\wkhtmltopdf\\bin\\wkhtmltopdf.exe'
              config = pdfkit.configuration(wkhtmltopdf=path_wkthmltopdf)
              # 生成pdf文件,to_file为文件路径
              pdfkit.from_file(html, to_file, configuration=config)
          
          html_to_pdf('sample.html','out_2.pdf')

          5.3 字符串内容生成pdf

          '''将字符串生成pdf文件'''
          def str_to_pdf(string, to_file):
              # 将wkhtmltopdf.exe程序绝对路径传入config对象
              path_wkthmltopdf = r'D:\\tool\\wkhtmltopdf\\bin\\wkhtmltopdf.exe'
              config = pdfkit.configuration(wkhtmltopdf=path_wkthmltopdf)
              # 生成pdf文件,to_file为文件路径
              pdfkit.from_string(string, to_file, configuration=config)
              print('完成')
          
          str_to_pdf('This is test!','out_3.pdf')

          总结 

          到此这篇关于python通过第三方库操作PDF文件的几种常见方法的文章就介绍到这了,更多相关python操作PDF文件内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

          您可能感兴趣的文章:
          • Python生成pdf文件的方法
          • 一文教会你用Python读取PDF文件
          • Python提取PDF指定内容并生成新文件
          • 使用Python操作PDF文件
          • Python实现将Excel内容批量导出为PDF文件

          评论关闭