python操作PDF的几种常见方法

admin 2023年12月26日14:27:48评论62 views字数 3747阅读12分29秒阅读模式

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

一、文本内容提取

1、pdfplumber提取文本内容

安装pdfplumber

# 安装模块pip install pdfplumber
pdfplumber提取PDF中文字代码思路如下
  1. 利用pdfplumber打开一个 PDF 文件
  2. 获取指定的页,或者遍历每一页
  3. 利用.extract_text()方法提取当前页的文字

import pdfplumberimport 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())


2、pdfminer提取文本内容

安装pdfminer,注意安装顺序

pip install pdfminer3kpip install pdfminer.six


pdfminer.six提取PDF中文字代码思路如下
  1. 利用open打开一个 PDF 文件
  2. 通过pdfdocument文档管理器读取pdf文件
  3. 通过PDFPageInterpreter解析器文档读取
  4. 通过PDFPageAggregator聚合器获取页面内容
  5. 利用.get_text()方法提取当前页的文字


读取pdf内容

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


构造解析器和聚合器

from pdfminer.pdfinterp import PDFResourceManagerfrom pdfminer.pdfinterp import PDFPageInterpreterfrom pdfminer.converter import PDFPageAggregatorfrom 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 osimport pandas as pdimport 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)

、内容拆分

from PyPDF2 import PdfWriter,PdfReader

这里导入了两个方法:

  • PdfReader 可以理解为读取器

  • PdfWriter 可以理解为写入器

ef 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

pip install pdfkit


  • 网页内容生成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')


  • 本地网页内容生成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')


  • 字符串内容生成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的几种常见方法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月26日14:27:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   python操作PDF的几种常见方法http://cn-sec.com/archives/2226808.html

发表评论

匿名网友 填写信息