python操作PDF的几种常见方法
创始人
2025-01-08 13:34:59
0次

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

一、文本内容提取

1.1、pdfplumber提取文本内容

安装pdfplumber

# 安装模块 pip install pdfplumber 

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

  1. 利用pdfplumber打开一个 PDF 文件
  2. 获取指定的页,或者遍历每一页
  3. 利用.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文件中, 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') 

在这里插入图片描述

相关内容

热门资讯

每日必看!江岸多玩到底能开挂吗... 每日必看!江岸多玩到底能开挂吗(辅助挂),江岸多玩原来真的有辅助挂讲义1、江岸多玩脚本辅助下载、江岸...
玩家交流!颖河竞技怎么开挂(外... 玩家交流!颖河竞技怎么开挂(外挂),颖河竞技好像是有外挂教材一、颖河竞技游戏安装教程牌型概率发牌机制...
最新通报!皮皮四川麻将软件下载... 最新通报!皮皮四川麻将软件下载(辅助挂),皮皮四川麻将果然有辅助挂模块1、操作简单,无需皮皮四川麻将...
一分钟揭秘!52游戏开挂脚本(... 一分钟揭秘!52游戏开挂脚本(透视挂),52游戏切实有透视挂法子52游戏脚本下载中分为三种模型:52...
一分钟快速了解!堆堆乐开挂破解... 一分钟快速了解!堆堆乐开挂破解(外挂),堆堆乐竟然真的有外挂方针1、下载好堆堆乐正确养号方法之后点击...
重大通报!汇城贵州麻将开挂脚本... 重大通报!汇城贵州麻将开挂脚本(开挂),汇城贵州麻将原来真的有开挂法门1、重大通报!汇城贵州麻将开挂...
盘点一款!七色城透视挂件(外挂... 盘点一款!七色城透视挂件(外挂),七色城切实是真的有外挂经验1、全新机制【七色城ai辅助工具激活码】...
今日头条!多多休闲透视软件下载... 今日头条!多多休闲透视软件下载(外挂),多多休闲确实是真的有外挂攻略1、首先打开多多休闲辅助器下载最...
关于!钱柜麻将真的有透视吗(辅... 关于!钱柜麻将真的有透视吗(辅助器),钱柜麻将一贯是有辅助器练习钱柜麻将能透视中分为三种模型:钱柜麻...
今日焦点!河北家乡棋牌辅助工具... 今日焦点!河北家乡棋牌辅助工具(外挂),河北家乡棋牌果然是有外挂手册小薇(辅助器软件下载)致您一封信...