python3-用 pdfminer.six 的 pdf2txt.py 工具提取pdf全部内容

文章目录

  • 说明
  • 使用方法
    • 安装
    • 测试是否成功安装
    • 处理识别 CJK 语言
    • 测试是否能够识别包含 CJK 的 pdf 文字
  • 一些问题的处理

说明

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

结果如下:
python3-用 pdfminer.six 的 pdf2txt.py 工具提取pdf全部内容_第1张图片

处理识别 CJK 语言

对于识别中文等 CJK 语言文字,根据 pdfminer.six-master/docs/index.html 的说明,在安装前需要使用下面的命令

  • Linux / Mac
$ make cmap
$ python3 setup.py install
  • Windows(复制以下全部内容然后运行)
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 字体的各种解码包】

测试是否能够识别包含 CJK 的 pdf 文字

(注意此时所在目录仍为 pdfminer.six-master)

  • 提取名字为 simple1.pdf 的全部文字内容,并保存到 output.html 的文件中
$ pdf2txt.py -o output.html samples/simple1.pdf
  • 提取竖排的日文文字,并保存成 output.html (-V 表示竖排,-c euc-jp 表示用 euc-jp 解码,如果 pdf 为中文,可试试 gbk、gb2312、gb18030、utf8 等)
$ pdf2txt.py -V -c euc-jp -o output.html samples/jo.pdf
  • 提取带加密的 pdf,并保存成 output.txt
$ 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

你可能感兴趣的:(python)