曾经为了实现pdf的转化测试了太多的文件,导致现在我自己都有点晕了。
再者就是从cnki下载的pdf文件不知道为什么用pdf2htmlEX无法转化。
xpdf
xpdf的使用:参考链接 http://blog.csdn.net/jiang1984j/article/details/5757427 和 http://my.oschina.net/zbrxtpgyaps/blog/28171?fromerr=zd6Ms31I
我再使用的过程中将http://blog.csdn.net/jiang1984j/article/details/5757427此连接下的displayCIDFontTT 注释掉。
这个链接http://www.jb51.net/softjc/20047.html也是参考之一,注意里面的文件夹关系
以上都是解决了中文的问题。xpdf的转化效果有点差 ,尤其是多列的数据,基本就是混乱的。
pdf2htmlex
然后是pdf2htmlex这个工具,真心非常强大转换出来的html样式也特别好看,但是从cnki下载的pdf文件无法转换(报错:ToUnicode CMap is not valid and got dropped,然后一部分中文就无法显示,如果有人知道怎么解决请教教我),
进行测试发现与电脑是否安装字体无关,怀疑是pdf文件本身的问题。
此文件只需要data文件夹和pdf2htmlEX.exe这两个即可以运行:cmd命令 pdf2htmlEX file.pdf outfile.pdf
下载地址:http://soft.rubypdf.com/software/pdf2htmlex-windows-version
选项翻译:http://m.oschina.net/blog/206900
还有人自己用cmake进行编译的,可惜不会。
下面是使用pdfminer
pdfminer的安装比较麻烦,安装了好几次,已经忘记怎么安装的了,如果在运行代码过程中出现import错误,那可能是安装包的版本问题,我再使用过程中遇到过说是作者在后续的版本中更改了函数。
1 import os 2 parent = "G:/Python/Pythonproject/pdf" 3 os.chdir(parent) 4 5 from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 6 from pdfminer.pdfpage import PDFPage 7 from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter 8 from pdfminer.layout import LAParams 9 from cStringIO import StringIO 10 11 12 def pdfparser(data): 13 14 15 outfile = data+'.txt' 16 fp = file(data, 'rb') 17 outfp = file(outfile,'w') 18 rsrcmgr = PDFResourceManager() 19 retstr = StringIO() 20 codec = "utf-8" 21 laparams = LAParams() 22 device = TextConverter(rsrcmgr, outfp, codec=codec, laparams=laparams) 23 # Create a PDF interpreter object. 24 interpreter = PDFPageInterpreter(rsrcmgr, device) 25 # Process each page contained in the document. 26 27 28 29 for page in PDFPage.get_pages(fp): 30 #print page 31 interpreter.process_page(page) 32 data = retstr.getvalue() 33 #layout = device.get_result() 34 35 36 print data 37 38 39 device.close() 40 outfp.close() 41 42 43 if __name__ == '__main__': 44 pdfparser(u'基于PIL的验证码快速识别框架的研究_胡光中.pdf')
总体来说pdfminer的结果可以阅读,但是格式特别混乱,不过要比xpdf的好一点,而且依然有错误。速度超级慢。pdfminer的文档看不懂,不知道是否能有人写一篇详细的用法。
中文是实现的难点,很多对英文支持特别好,但是到了中文这儿就不行了。
就写到这儿吧,以后再想起来了,在进行更新!