如何将pdf文档转换成Txt文本?

151 views
Skip to first unread message

PP

unread,
May 14, 2009, 1:49:07 PM5/14/09
to python-cn
如何用python将pdf文档转换成Txt文本?有没有相关的类库?google了很多内容,都是将文件转换成pdf的,没有反过来的吗?

--------------
PP
2009-05-15

xxmplus

unread,
May 14, 2009, 7:12:05 PM5/14/09
to pyth...@googlegroups.com
2009/5/15 PP <zanpe...@gmail.com>:
> 如何用python将pdf文档转换成Txt文本?有没有相关的类库?google了很多内容,都是将文件转换成pdf的,没有反过来的吗?
>


如果pdf是从文本生成的(姑且将word也当作文本),那么反过来很容易,只是会丢失格式排版而已
如果是一张图片(内容是文字,比如起点的小说那种,或者是扫描的文档),那就很麻烦,需要OCR


--
Any complex technology which doesn’t come with documentation must be the best
available.
Sent from Sydney, Nsw, Australia

PP

unread,
May 14, 2009, 8:59:35 PM5/14/09
to pyth...@googlegroups.com
谢xxmplus兄!
 
昨天百度勾勾了半宿,终于在勾勾第十页上找到了替代解决办法
 
忙不迭存到我的博客里免得忘了。http://wf1128.cn/?p=111
 
这里使用的工具是xpdf现成的包,里面有win和lin两个版本,且都有shell版本,我的平台是win,已经成功利用pdftotext.exe将1本很大的pdf转成了txt,只是里面的中文有小
部分是乱码,今天要研究下它的字符集配置(网站有汉字的字符集下载,想的挺周到的),速度也很快。
 
对于我这样的懒人,这些够用了撒!我只是想将pdf转成txt,再分析txt将其存入数据库。
 
不过对于通过python编程实现pdf到txt的转换,还是期望大家能继续讨论,让我好好学习下
 
------------------  
PP
2009-05-15
 
-------------------------------------------------------------
发件人:xxmplus
发送日期:2009-05-15 07:12:34
抄送:
主题:[CPyUG:86600] Re: 如何将pdf文档转换成Txt文本?

He Jibo

unread,
May 14, 2009, 9:30:19 PM5/14/09
to pyth...@googlegroups.com
恩,我找了好几个工具后最后用的这个。 我现在也在做pdf转txt,然后做文本检索。有问题可以一起讨论。

He Jibo
hej...@gmail.com
jib...@cyrus.psych.uiuc.edu


---------------------------
He Jibo
Department of Psychology,
Beckman Institute for Advanced Science and Technology
University of Illinois, Urbana Champaign,
603 East Daniel St.,
Champaign, IL 61820
Tel: 217-244-4461(office)
217-244-6763(lab)
Email: hej...@gmail.com
Bill Cosby  - "Fatherhood is pretending the present you love most is soap-on-a-rope."

2009/5/14 PP <zanpe...@gmail.com>

shell909090

unread,
May 14, 2009, 10:08:11 PM5/14/09
to pyth...@googlegroups.com
pdf转换txt其实是用pdf解析引擎对pdf解析,而后不进行渲染,直接提取文本内容。可用的引擎有adobe的(要钱的),foxit(好像是中国 人弄的,核心引擎还不错),xpdf(全开源的),GhostScript(很有名的解析软件,可惜太大了)。开源可用的基本只有后两者,其中我也研究的 是前者(没办法,gs实在太大了)。你可以拿xpdf的源码来看看,很有意思。

PP 写道:
signature.asc

xxmplus

unread,
May 14, 2009, 10:14:41 PM5/14/09
to pyth...@googlegroups.com
2009/5/15 shell909090 <shell...@gmail.com>:

> pdf转换txt其实是用pdf解析引擎对pdf解析,而后不进行渲染,直接提取文本内容。可用的引擎有adobe的(要钱的),foxit(好像是中国
> 人弄的,核心引擎还不错),xpdf(全开源的),GhostScript(很有名的解析软件,可惜太大了)。开源可用的基本只有后两者,其中我也研究的
> 是前者(没办法,gs实在太大了)。你可以拿xpdf的源码来看看,很有意思。

我不研究,我直接拿来用而已。不过我处理的很多pdf都是扫描文档,xpdf的比例很小,主要是OCR

Jiahua Huang

unread,
May 14, 2009, 11:22:39 PM5/14/09
to pyth...@googlegroups.com
2009/5/15 PP <zanpe...@gmail.com>:

> 谢xxmplus兄!
>
> 昨天百度勾勾了半宿,终于在勾勾第十页上找到了替代解决办法
>
> 忙不迭存到我的博客里免得忘了。http://wf1128.cn/?p=111
>
> 这里使用的工具是xpdf现成的包,里面有win和lin两个版本,且都有shell版本,我的平台是win,已经成功利用pdftotext.exe将1本很大的pdf转成了txt,只是里面的中文有小
> 部分是乱码,今天要研究下它的字符集配置(网站有汉字的字符集下载,想的挺周到的),速度也很快。
>
> 对于我这样的懒人,这些够用了撒!我只是想将pdf转成txt,再分析txt将其存入数据库。
>
> 不过对于通过python编程实现pdf到txt的转换,还是期望大家能继续讨论,让我好好学习下
>

在 Ubuntu 下, xpdf-utils 和 poppler-utils 都带有 pdftotext,

但是 xpdf-utils 带的 pdftotext 对中文支持不如 poppler-utils 带的 pdftotext。

所以 Ubuntu 推荐用 poppler-utils 附带的 pdftotext,
默认就中文没问题。

liuxintongszncu

unread,
May 15, 2009, 12:20:04 AM5/15/09
to pyth...@googlegroups.com

例子如下:
>>> myList = ['1-Sarcosine-8-Isoleucine Angiotensin II D23.469.050.050.050.725','11-beta-Hydroxysteroid Dehydrogenase Type 1 D08.811.682.047.436.174.300','2-Aminoadipic Acid D02.241.081.337.052.075']
>>> myList.sort()
>>> myList
['1-Sarcosine-8-Isoleucine Angiotensin II D23.469.050.050.050.725', '11-beta-Hydroxysteroid Dehydrogenase Type 1 D08.811.682.047.436.174.300', '2-Aminoadipic Acid D02.241.081.337.052.075']
>>>
 
而我想要的是这个结果:
1-Sarcosine-8-Isoleucine Angiotensin II D23.469.050.050.050.725
2-Aminoadipic Acid D02.241.081.337.052.075
11-beta-Hydroxysteroid Dehydrogenase Type 1 D08.811.682.047.436.174.300
 
由于字符串很长,myList很庞大,我不知道该如何处理这个问题,恳求大侠们帮帮我~~



穿越地震带 纪念汶川地震一周年

LaiYonghao

unread,
May 15, 2009, 12:24:30 AM5/15/09
to pyth...@googlegroups.com
>>> myList = ['1-Sarcosine-8-Isoleucine Angiotensin II D23.469.050.050.050.725',
'11-beta-Hydroxysteroid Dehydrogenase Type 1 D08.811.682.047.436.174.300','2-Ami
noadipic Acid D02.241.081.337.052.075']
>>> import string
>>> myList.sort(key = lambda x:int(x.split('-',1)[0]))
>>> import pprint
>>> pprint.pprint(myList)
['1-Sarcosine-8-Isoleucine Angiotensin II D23.469.050.050.050.725',
 '2-Aminoadipic Acid D02.241.081.337.052.075',
 '11-beta-Hydroxysteroid Dehydrogenase Type 1 D08.811.682.047.436.174.300']
>>>

2009/5/15 liuxintongszncu <liuxint...@126.com>



--
赖勇浩的编程私伙局:http://blog.csdn.net/lanphaday

pong Chong

unread,
May 15, 2009, 12:34:07 AM5/15/09
to pyth...@googlegroups.com
收藏了!

2009/5/15 LaiYonghao <lanp...@gmail.com>



--
<url>http://wf1128.cn</url>

liuxintongszncu

unread,
May 15, 2009, 12:35:27 AM5/15/09
to pyth...@googlegroups.com
O(∩_∩)O谢谢师父~~学习了

穿越地震带 纪念汶川地震一周年

Rainbird

unread,
May 15, 2009, 12:44:22 AM5/15/09
to pyth...@googlegroups.com
借问个弱弱的问题
>>> import string
>>> myList.sort(key = lambda x:int(x.split('-',1)[0]))
>>> import pprint
>>> pprint.pprint(myList)
这几行好像是在python的交互环境里拷贝出来的
可是我的交互环境不能右键啊?还是有什么快捷键?


 
2009/5/15 liuxintongszncu <liuxint...@126.com>

东子

unread,
May 15, 2009, 12:55:07 AM5/15/09
to pyth...@googlegroups.com
什么环境?windows的话,按一下alt + 空格,看看你能发现什么?

东子 hydo...@gmail.com



2009/5/15 Rainbird <chinak...@gmail.com>

liuxintongszncu

unread,
May 15, 2009, 1:02:38 AM5/15/09
to pyth...@googlegroups.com
不过在我写入文件时raise异常了
代码如下
myList.sort(key = lambda x:int(x.split('-',1)[0]))
f = open('D:/tmp3.txt','w')
for eachLine in myList:
    f.writelines(eachLine)
f.close()
 
Traceback (most recent call last):
  File "D:\Python26\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 325, in RunScript
    exec codeObject in __main__.__dict__
  File "D:\Python26\P102.py", line 11, in <module>

    myList.sort(key = lambda x:int(x.split('-',1)[0]))
  File "D:\Python26\P102.py", line 11, in <lambda>

    myList.sort(key = lambda x:int(x.split('-',1)[0]))
ValueError: invalid literal for int() with base 10: ''


在2009-05-15 12:24:30,LaiYonghao <lanp...@gmail.com> 写道:
穿越地震带 纪念汶川地震一周年

Rainbird

unread,
May 15, 2009, 1:13:55 AM5/15/09
to pyth...@googlegroups.com
是windows 环境,alt+空格,还真没用过,非常感谢

2009/5/15 东子 <hydo...@gmail.com>

LaiYonghao

unread,
May 15, 2009, 1:27:31 AM5/15/09
to pyth...@googlegroups.com
这说明你的 list 里不是所有元素都以数字加横杠开头啊。

2009/5/15 liuxintongszncu <liuxint...@126.com>



--
赖勇浩的编程私伙局:http://blog.csdn.net/lanphaday

Jiahua Huang

unread,
May 15, 2009, 1:55:59 AM5/15/09
to pyth...@googlegroups.com
2009/5/15 Rainbird <chinak...@gmail.com>:

> 借问个弱弱的问题
>>>> import string
>>>> myList.sort(key = lambda x:int(x.split('-',1)[0]))
>>>> import pprint
>>>> pprint.pprint(myList)
> 这几行好像是在python的交互环境里拷贝出来的
> 可是我的交互环境不能右键啊?还是有什么快捷键?
>

估计又是 XP 的 CMD。
cmd.exe 好像默认选中即复制,
cmd 里边按右键粘贴,
在别的程序里粘贴是粘贴 cmd 里选中内容。

shell909090

unread,
May 15, 2009, 6:06:12 AM5/15/09
to pyth...@googlegroups.com
xxmplus 写道:
2009/5/15 shell909090 <shell...@gmail.com>:
  
pdf转换txt其实是用pdf解析引擎对pdf解析,而后不进行渲染,直接提取文本内容。可用的引擎有adobe的(要钱的),foxit(好像是中国
人弄的,核心引擎还不错),xpdf(全开源的),GhostScript(很有名的解析软件,可惜太大了)。开源可用的基本只有后两者,其中我也研究的
是前者(没办法,gs实在太大了)。你可以拿xpdf的源码来看看,很有意思。
    
我不研究,我直接拿来用而已。不过我处理的很多pdf都是扫描文档,xpdf的比例很小,主要是OCR
  
OCR可就比较难了。
signature.asc

Jiahua Huang

unread,
May 15, 2009, 6:15:03 AM5/15/09
to pyth...@googlegroups.com
2009/5/15 shell909090 <shell...@gmail.com>:
> OCR可就比较难了。
>

英文的可以 pdfimages 后 gocr,

或者直接 PIL/ImageMagick 将 pdf 转为图片,再 gocr (可能会稍差些)

xxmplus

unread,
May 15, 2009, 6:18:07 AM5/15/09
to pyth...@googlegroups.com
2009/5/15 Jiahua Huang <jhuang...@gmail.com>:


哈哈,不是难在ocr,而是难在文档的质量太差,全是潦草的手写体,人去读都未必读的懂,何况机器

shell909090

unread,
May 15, 2009, 12:00:56 PM5/15/09
to pyth...@googlegroups.com
xxmplus 写道:
2009/5/15 Jiahua Huang <jhuang...@gmail.com>:
  
2009/5/15 shell909090 <shell...@gmail.com>:
    
OCR可就比较难了。

      
英文的可以 pdfimages 后 gocr,

或者直接 PIL/ImageMagick 将 pdf 转为图片,再 gocr (可能会稍差些)
    

哈哈,不是难在ocr,而是难在文档的质量太差,全是潦草的手写体,人去读都未必读的懂,何况机器

  
恩,还有某些PDF恐怖的质量,我可怜的眼睛....
signature.asc

pong Chong

unread,
May 15, 2009, 5:31:13 PM5/15/09
to pyth...@googlegroups.com
今天研究了下win32下的xpdf转换中文的pdf,发现还是挺方便的,总结了一下,拿给大家分享,也可以访问我的博客博客


我要转换的pdf是中文的,而且有很多。也想写一个脚本来一次性解决,但是马上我就遇到了问题。当使用命令:

pdftotext -layout -nopgbrk 1.pdf
转换的时候,发现转换的并不成功,输出的txt文本中会有乱码出现,而且有的文本还被截断了。于是我又到官方网站去下载了中文的Language support以及中文字体支持,按照chinese-simplified目录下的README老老实实的配置xpdfrc文件。其中README中提到:
Place all of these files in a directory, typically:

Unix - /usr/local/share/xpdf/chinese-simplified
Win32 - C:\Program Files\xpdf\chinese-simplified

Add the contents of the "add-to-xpdfrc" file to your system-wide
xpdfrc config file, which is typically:

Unix - /usr/local/etc/xpdfrc
Win32 - C:\Program Files\xpdf\xpdfrc

在chinese-simplified目录中找到了add-to-xpdfrc,修改里面的路径为win32相对路径(我的ttf字体支持存放在xpdf根目录下):

#----- begin Chinese Simplified support package (2004-jul-27) 
cidToUnicode Adobe-GB1 chinese-simplified\Adobe-GB1.cidToUnicode
unicodeMap ISO-2022-CN chinese-simplified\ISO-2022-CN.unicodeMap
unicodeMap EUC-CN chinese-simplified\EUC-CN.unicodeMap
unicodeMap GBK chinese-simplified\GBK.unicodeMap
cMapDir Adobe-GB1 chinese-simplified\CMap
toUnicodeDir chinese-simplified\CMap
displayCIDFontTT Adobe-GB1 gkai00mp.ttf
#----- end Chinese Simplified support package

这样,配置就完成了,在xpdf目录下新建一个xpdfrc文件,注意没有扩展名!将上面的文本拷贝进去。再执行

pdftotext -layout -nopgbrk 1.pdf
文本完美转换。 参数说明,
  • -layout:保持原有版面
  • -nopgbrk:不插入分页符号

剩下的工作就简单了,只需遍历目录下的pdf文档顺序生成就OK了。改天写好代码补上来。

文中资源下载:

xpdf for win32:xpdf-3.02pl3-win32.zip

xpdf 中文支持库:xpdf-chinese-simplified.tar.gz

xpdf 中文支持字体:gkai00mp.ttf.gz


Zoom.Quiet

unread,
May 15, 2009, 11:10:48 PM5/15/09
to pyth...@googlegroups.com
2009/5/16 pong Chong <zanpe...@gmail.com>:

> 今天研究了下win32下的xpdf转换中文的pdf,发现还是挺方便的,总结了一下,拿给大家分享,也可以访问我的博客博客
>
Win32 下面也不方便哪,,,
收录了!
http://wiki.woodpecker.org.cn/moin/MiscItems/2009-05-16

--
http://zoomquiet.org
'''过程改进乃是催生可促生靠谱的人的组织!'''
向靠谱,反脑残! Kaopulity,小白退散!

rosory

unread,
May 16, 2009, 3:43:57 AM5/16/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
收录。。。

On 5月16日, 上午11时10分, "Zoom.Quiet" <zoom.qu...@gmail.com> wrote:
> 2009/5/16 pong Chong <zanpen2...@gmail.com>:> 今天研究了下win32下的xpdf转换中文的pdf,发现还是挺方便的,总结了一下,拿给大家分享,也可以访问我的博客博客


>
> Win32 下面也不方便哪,,,
> 收录了!http://wiki.woodpecker.org.cn/moin/MiscItems/2009-05-16
>
>
>
>
>
>
>
> > 我要转换的pdf是中文的,而且有很多。也想写一个脚本来一次性解决,但是马上我就遇到了问题。当使用命令:
>
> > pdftotext -layout -nopgbrk 1.pdf
>
> > 转换的时候,发现转换的并不成功,输出的txt文本中会有乱码出现,而且有的文本还被截断了。于是我又到官方网站去下载了中文的Language
> > support以及中文字体支持,按照chinese-simplified目录下的README老老实实的配置xpdfrc文件。其中README中提到:
>
> > Place all of these files in a directory, typically:
>
> > Unix - /usr/local/share/xpdf/chinese-simplified
> > Win32 - C:\Program Files\xpdf\chinese-simplified
>
> > Add the contents of the "add-to-xpdfrc" file to your system-wide
>
> > xpdfrc config file, which is typically:
>
> > Unix - /usr/local/etc/xpdfrc
> > Win32 - C:\Program Files\xpdf\xpdfrc
>

> > 在chinese-simplified目录中找到了add-to-xpdfrc,修改里面的路径为win32相对路径(我的ttf字体支持存放在xpdf根目-录下):


>
> > #----- begin Chinese Simplified support package (2004-jul-27)
> > cidToUnicode Adobe-GB1 chinese-simplified\Adobe-GB1.cidToUnicode
> > unicodeMap ISO-2022-CN chinese-simplified\ISO-2022-CN.unicodeMap
> > unicodeMap EUC-CN chinese-simplified\EUC-CN.unicodeMap
>
> > unicodeMap GBK chinese-simplified\GBK.unicodeMap
> > cMapDir Adobe-GB1 chinese-simplified\CMap
> > toUnicodeDir chinese-simplified\CMap
> > displayCIDFontTT Adobe-GB1 gkai00mp.ttf
> > #----- end Chinese Simplified support package
>
> > 这样,配置就完成了,在xpdf目录下新建一个xpdfrc文件,注意没有扩展名!将上面的文本拷贝进去。再执行
>
> > pdftotext -layout -nopgbrk 1.pdf
>
> > 文本完美转换。 参数说明,
>
> > -layout:保持原有版面
> > -nopgbrk:不插入分页符号
>
> > 剩下的工作就简单了,只需遍历目录下的pdf文档顺序生成就OK了。改天写好代码补上来。
>
> > 文中资源下载:
>
> > xpdf for win32:xpdf-3.02pl3-win32.zip
>
> > xpdf 中文支持库:xpdf-chinese-simplified.tar.gz
>
> > xpdf 中文支持字体:gkai00mp.ttf.gz
>
> --http://zoomquiet.org
> '''过程改进乃是催生可促生靠谱的人的组织!'''

> 向靠谱,反脑残! Kaopulity,小白退散!- 隐藏被引用文字 -
>
> - 显示引用的文字 -

wmr2007

unread,
May 16, 2009, 9:08:39 AM5/16/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
有没有能识别图片pdf的?

Jiahua Huang

unread,
May 16, 2009, 9:22:36 AM5/16/09
to pyth...@googlegroups.com
2009/5/16 wmr2007 <wmr89...@gmail.com>:
> 有没有能识别图片pdf的?
>

上边说了, pdfimages (在 poppler-utils 里)后 gocr (或其他你能搞到的 ocr)

mifly

unread,
May 16, 2009, 10:03:53 PM5/16/09
to python-cn`CPyUG`华蟒用户组(中文Py用户组)
像中文,韩文,日文这样的结构复杂的字体,开源ocr支持不好呀,曾经找到google code里的http://code.google.com/
p/tesseract-ocr/,不暂不支持中文.

On 5月16日, 下午9时22分, Jiahua Huang <jhuangjia...@gmail.com> wrote:
> 2009/5/16 wmr2007 <wmr89502...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages