首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

给宝宝的翻译小软件:支持PDF啦!

上次写好翻译小软件后就展示给宝宝,

我:“宝宝,过来给你个小软件”

她:“干什么用哒?”

我:“给你翻译Word文档的”

她:“怎么用啊?”

我:“选择一个docx文档,再按翻译按钮就好了”

她:“哇,这么厉害!”

。。。。。。

她:“可以翻译PDF吗?好多文档都是PDF的哦”

我:“这个。。。可以有”

她:“好棒啊!”

然后,又一阵。。。。。。

“自己吹下的牛皮,含泪也要实现。” 不过,这可不是吹牛皮。之前接触过提取PDF内容的事情,所以还是有把握的。

从PDF里面提取文本内容有很多种方法,但是真正适合的还是要研究一番才能做出正确的选择。选择的标准就是:适合Windows,速度要快。

一、pdfminer

这是纯Python实现的PDF内容提取的库,很适合Python开发,Linux和Windows上使用都很方便。

去github搜索“pdfminer”,排在第一的是老的版本,只支持Python 2。支持Python 3的版本叫做: pdfminer.six,也支持Python2,它的地址是:

https://github.com/pdfminer/pdfminer.six

然而,它的速度很慢,因为是纯Python写的。有多慢呢?看看下面它与pdftotext的对比测试吧:

测试文件大小: 2.1MB

(1)pdftotext 用时: 1.031s

time ./bin/pdftotext -enc UTF-8 z.pdf z.txt

real0m1.031s

user0m1.004s

sys0m0.008s

(2)pdfminer 用时: 2m29.226s == 149.226s

time pdf2txt.py z.pdf

real2m29.226s

user2m29.016s

sys0m0.064s

两者相差149倍!!我家宝宝是个急脾气,让她等那么长时间,我还能好过吗?果断舍弃pdfminer,选择pdftotext。

二、pdftotext

这是一个基于xpdf用C++写的命令行工具,速度杠杠的(见上面的对比)。有人也把它封装成了Python库——pdftotext,但是要编译成动态库才能被Python所用。这个封装基于poppler库(基于xpdf)。

然而,要在Windows上编译这个Python库太不容易了。基本的编译环境有VC和minGW,具体见:

https://wiki.python.org/moin/WindowsCompilers

我选择minGW编译环境,编译Python库时各种依赖太复杂。断断续续整了几天未果,只好放弃使用这个Python封装库。

三、subprocess调用pdftotext.exe

pdftotext命令行工具有Windows版本的可执行文件下载:

https://www.xpdfreader.com/download.html

那我就用subprocess调用即可。这样我开发省事儿,宝宝用着速度也够快,一举两得。

路线定好后,程序写起来就很快了。时间多花在路线定制上,好的路线值得花费时间去制定,往往能得到事半功倍的效果。

四、用pyinstaller发布程序

上一个版本用pyinstaller打包程序很容易,因为除了程序文件没有其它附加文件,而这次程序包含了pdftotext.exe等文件,导致打包不是那么顺利。这其中的经验,我将总结为一篇专门讲解pyinstaller的文章,敬请期待。

五、翻译软件:transdocx的运行

(1)从源代码运行:

直接运行transdocx.py即可。当然,相应的Python库要先安装好。

另外,源代码文件夹 bin/ 下面的pdftotext.exe不是翻译软件,而是被翻译软件用来从PDF中提取文本的程序,不要直接运行它

(2)下载打包好的翻译软件

下载transdocx-*.exe后,直接双击即可运行。

最后,跟上次一样,关注公众号发消息“翻译”获得软件下载地址,发送“翻译源码”获得本软件的源代码。

一个十年Python码奴与运营汪的结合体

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190217G09BXE00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券