PDFMiner是一个从PDF文档中提取信息的工具。与其他PDF相关的工具不同,它完全侧重于获取和分析文本数据。PDFMiner允许您获取页面中文本的确切位置,以及其他信息,如字体或线条。它包括一个PDF转换器,可以将PDF文件转换成其他文本格式(如HTML)。它有一个可扩展的PDF解析器,可用于除文本分析以外的其他事情。
特征
完全用python编写。(对于版本2.4或更新版本)
解析,分析和转换PDF文档。
PDF-1.7规范支持。(好,差不多)
CJK语言和垂直编写脚本支持。
支持各种字体类型(Type1,TrueType,Type3和CID)。
基本加密(RC4)支持。
PDF到HTML转换(使用示例转换器Web应用程序)。
大纲(TOC)提取。
标记的内容提取。
通过对文本块进行分组来重建原始布局。
对于CJK语言你还需要安装以下的包:
安装重点:
记住乖乖从网上下载安装包解压安装,千万千万不能 python install pdfminer 安装,这种安装关联不上编码包,直接导致你读取的PDF是乱码。
mac系统执行这个命令
# make cmappython tools/conv_cmap.py pdfminer/cmap Adobe-CNS1 cmaprsrc/cid2code_Adobe_CNS1.txt reading 'cmaprsrc/cid2code_Adobe_CNS1.txt'... writing 'CNS1_H.py'... ...(this may take several minutes)# python setup.py install
windows系统执行这个命令
mkdir pdfminercmap python toolsconv_cmap.py -c B5=cp950 -c UniCNS-UTF8=utf-8 pdfminercmap Adobe-CNS1 cmaprsrccid2code_Adobe_CNS1.txt python toolsconv_cmap.py -c GBK-EUC=cp936 -c UniGB-UTF8=utf-8 pdfminercmap Adobe-GB1 cmaprsrccid2code_Adobe_GB1.txt python toolsconv_cmap.py -c RKSJ=cp932 -c EUC=euc-jp -c UniJIS-UTF8=utf-8 pdfminercmap Adobe-Japan1 cmaprsrccid2code_Adobe_Japan1.txt python toolsconv_cmap.py -c KSC-EUC=euc-kr -c KSC-Johab=johab -c KSCms-UHC=cp949 -c UniKS-UTF8=utf-8 pdfminercmap Adobe-Korea1 cmaprsrccid2code_Adobe_Korea1.txt python setup.py install
命令行工具
PDFMiner提供了两个方便的工具: pdf2txt.py和dumppdf.py。
pdf2txt.py
从PDF文件中提取文本内容。它提取所有要以编程方式呈现的文本,即以ASCII或Unicode字符串表示的文本。它无法识别绘制为需要光学字符识别的图像的文本。它还为每个文本部分提取相应的位置,字体名称,字体大小,书写方向(水平或垂直)。当访问受到限制时,您需要为受保护的PDF文档提供密码。您不能从没有提取权限的PDF文档中提取任何文本。
注意: 并非PDF中的所有字符都可以安全地转换为Unicode。
dumppdf.py
以伪XML格式转储PDF文件的内部内容。这个程序主要是为了调试目的,但也可以提取一些有意义的内容(如图像)。
上面是利用pdfmier包读取pdf文件的一种方式。
还可以采用布局分析
布局分析返回的PDF文档中的每个页面LTPage对象。这个对象和页内包含的子对象,形成一个树结构
如图所示:
LTPage :表示整个页。可能会含有LTTextBox,LTFigure,LTImage,LTRect,LTCurve和LTLine子对象。
LTTextBox:表示一组文本块可能包含在一个矩形区域。注意此box是由几何分析中创建,并且不一定
表示该文本的一个逻辑边界。它包含LTTextLine对象的列表。使用 get_text()方法返回的文本内容。
LTTextLine :包含表示单个文本行LTChar对象的列表。字符对齐要么水平或垂直,取决于文本的写入模式。
get_text()方法返回的文本内容。
LTChar
LTAnno:在文本中实际的字母表示为Unicode字符串(?)。需要注意的是,虽然一个LTChar对象具有实际边界,
LTAnno对象没有,因为这些是“虚拟”的字符,根据两个字符间的关系(例如,一个空格)由布局分析后插入。
LTImage:表示一个图像对象。嵌入式图像可以是JPEG或其它格式,但是目前PDFMiner没有放置太多精力在图形对象。
LTLine:代表一条直线。可用于分离文本或附图。
LTRect:表示矩形。可用于框架的另一图片或数字。
LTCurve:表示一个通用的Bezier曲线。