pdfminer3k 在识别 pdf 文字的时候会遗漏内容,因此找到了 pdfminer.six 这个补充 pdfminer3k 的模块。而 pdfminer 和 pdfminer3k 的区别在于后者支持 python2.6 以及更新的 python3 版本。
问:为什么使用 pdfminer.six 呢?
答:pdf2txt.py
脚本使用及其简便快捷,可通过命令行直接提取全部文字并保存成 txt 或者 html 文件,无需用 pdfminer3k 编程提取文字。
【 pdfminer.six 项目主页: https://github.com/pdfminer/pdfminer.six 】
在 https://github.com/pdfminer/pdfminer.six 上下载 zip 文件,然后解压。cd 进入解压后的目录(比如 cd pdfminer.six-master),然后在 终端 / cmd 界面输入
python3 setup.py install
在 终端 / cmd 界面输入(注意此时所在目录仍为 pdfminer.six-master)
pdf2txt.py samples/simple1.pdf
对于识别中文等 CJK 语言文字,根据 pdfminer.six-master/docs/index.html 的说明,在安装前需要使用下面的命令
$ make cmap
$ python3 setup.py install
mkdir pdfminer\cmap
python tools\conv_cmap.py -c B5=cp950 -c UniCNS-UTF8=utf-8 pdfminer\cmap Adobe-CNS1 cmaprsrc\cid2code_Adobe_CNS1.txt
python tools\conv_cmap.py -c GBK-EUC=cp936 -c UniGB-UTF8=utf-8 pdfminer\cmap Adobe-GB1 cmaprsrc\cid2code_Adobe_GB1.txt
python tools\conv_cmap.py -c RKSJ=cp932 -c EUC=euc-jp -c UniJIS-UTF8=utf-8 pdfminer\cmap Adobe-Japan1 cmaprsrc\cid2code_Adobe_Japan1.txt
python tools\conv_cmap.py -c KSC-EUC=euc-kr -c KSC-Johab=johab -c KSCms-UHC=cp949 -c UniKS-UTF8=utf-8 pdfminer\cmap Adobe-Korea1 cmaprsrc\cid2code_Adobe_Korea1.txt
python setup.py install
【pdfminer.six-master/pdfminer/cmp 文件包含用于识别 CJK 字体的各种解码包】
(注意此时所在目录仍为 pdfminer.six-master)
$ pdf2txt.py -o output.html samples/simple1.pdf
$ pdf2txt.py -V -c euc-jp -o output.html samples/jo.pdf
$ pdf2txt.py -P mypassword -o output.txt secret.pdf
Windows 下输入 pdf2txt.py abc.pdf
或者直接输入 pdf2txt.py
打开了该 py 文件
在 pdf2txt.py 前加上 python3,即使用 python3 pdf2txt.py abc.pdf 等命令
测试的时候出现 ModuleNotFoundError: No module named ‘pdfminer.settings’ 报错
将 pdf2txt.py 文件单独复制出来运行和测试,注意 pdf 文件的路径需要更改
单独输入 pdf2txt.py
出现 ModuleNotFoundError: No module named ‘pdfminer.settings’ 报错
可能是与之前安装的 pdfminer 冲突,找到本地安装的 pdfminer 路径,把文件夹删除即可
FileNotFoundError: [Errno 2] No such file or directory: ‘abc.pdf’ 报错
查看并输入正确包含该 pdf 的路径
能否提取图片
从介绍来看 pdf2txt.py 不支持。但 dumppdf.py 以伪 XML 格式转储 PDF 文件的内部内容,该程序主要用于调试目的,可以提取一些有意义的内容(例如图像)
能否批量提取 pdf 文字
可以。因为该工具类为命令行操作,使用 os、subprocess 模块的命令行调用函数,利用循环等命令便可实现提取批量的 pdf。比如 os.system("python3 pdf2txt.py -o {}.txt {}.pdf".format(output, filename))
如何查看 pdf2txt.py 命令行的其他参数
docs/index.html 提供具体参数的说明,直接在命令行输入 pdf2txt.py 可查看简略参数(Windows下可能不支持)
$ pdf2txt.py
usage: pdf2txt.py [-h] [-d] [-p PAGENOS]
[--page-numbers PAGE_NUMBERS [PAGE_NUMBERS ...]]
[-m MAXPAGES] [-P PASSWORD] [-o OUTFILE] [-t OUTPUT_TYPE]
[-c CODEC] [-s SCALE] [-A] [-V] [-W WORD_MARGIN]
[-M CHAR_MARGIN] [-L LINE_MARGIN] [-F BOXES_FLOW]
[-Y LAYOUTMODE] [-n] [-R ROTATION] [-O OUTPUT_DIR] [-C] [-S]
files [files ...]
pdf2txt.py: error: the following arguments are required: files
支持导出的格式
html / xml / txt