编辑(再次):

PDFMiner已在版本中再次更新。20100213

您可以使用以下内容检查已安装的版本:>>> import pdfminer>>> pdfminer.__version__'20100213'

以下是更新的版本(附带关于我更改/添加的内容的注释):def pdf_to_csv(filename):

from cStringIO import StringIO  #

from pdfminer.converter import LTTextItem, TextConverter

from pdfminer.pdfparser import PDFDocument, PDFParser

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter

class CsvConverter(TextConverter):

def __init__(self, *args, **kwargs):

TextConverter.__init__(self, *args, **kwargs)

def end_page(self, i):

from collections import defaultdict

lines = defaultdict(lambda : {})

for child in self.cur_item.objs:

if isinstance(child, LTTextItem):

(_,_,x,y) = child.bbox                   #

line = lines[int(-y)]

line[x] = child.text.encode(self.codec)  #

for y in sorted(lines.keys()):

line = lines[y]

self.outfp.write(";".join(line[x] for x in sorted(line.keys())))

self.outfp.write("\n")

# ... the following part of the code is a remix of the

# convert() function in the pdfminer/tools/pdf2text module

rsrc = PDFResourceManager()

outfp = StringIO()

device = CsvConverter(rsrc, outfp, codec="utf-8")  #

# becuase my test documents are utf-8 (note: utf-8 is the default codec)

doc = PDFDocument()

fp = open(filename, 'rb')

parser = PDFParser(fp)       #

parser.set_document(doc)     #

doc.set_parser(parser)       #

doc.initialize('')

interpreter = PDFPageInterpreter(rsrc, device)

for i, page in enumerate(doc.get_pages()):

outfp.write("START PAGE %d\n" % i)

interpreter.process_page(page)

outfp.write("END PAGE %d\n" % i)

device.close()

fp.close()

return outfp.getvalue()

编辑(再一次):

下面是最新版本的更新皮皮, 20100619p1..总之我代替了LTTextItem带着LTChar并将LAParams的一个实例传递给Csv转换器构造函数。def pdf_to_csv(filename):

from cStringIO import StringIO

from pdfminer.converter import LTChar, TextConverter    #

from pdfminer.layout import LAParams

from pdfminer.pdfparser import PDFDocument, PDFParser

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter

class CsvConverter(TextConverter):

def __init__(self, *args, **kwargs):

TextConverter.__init__(self, *args, **kwargs)

def end_page(self, i):

from collections import defaultdict

lines = defaultdict(lambda : {})

for child in self.cur_item.objs:

if isinstance(child, LTChar):               #

(_,_,x,y) = child.bbox

line = lines[int(-y)]

line[x] = child.text.encode(self.codec)

for y in sorted(lines.keys()):

line = lines[y]

self.outfp.write(";".join(line[x] for x in sorted(line.keys())))

self.outfp.write("\n")

# ... the following part of the code is a remix of the

# convert() function in the pdfminer/tools/pdf2text module

rsrc = PDFResourceManager()

outfp = StringIO()

device = CsvConverter(rsrc, outfp, codec="utf-8", laparams=LAParams())  #

# becuase my test documents are utf-8 (note: utf-8 is the default codec)

doc = PDFDocument()

fp = open(filename, 'rb')

parser = PDFParser(fp)

parser.set_document(doc)

doc.set_parser(parser)

doc.initialize('')

interpreter = PDFPageInterpreter(rsrc, device)

for i, page in enumerate(doc.get_pages()):

outfp.write("START PAGE %d\n" % i)

if page is not None:

interpreter.process_page(page)

outfp.write("END PAGE %d\n" % i)

device.close()

fp.close()

return outfp.getvalue()

编辑(再编辑一次):

更新为版本20110515(感谢Oeufcoque Peneano!):def pdf_to_csv(filename):

from cStringIO import StringIO

from pdfminer.converter import LTChar, TextConverter

from pdfminer.layout import LAParams

from pdfminer.pdfparser import PDFDocument, PDFParser

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter

class CsvConverter(TextConverter):

def __init__(self, *args, **kwargs):

TextConverter.__init__(self, *args, **kwargs)

def end_page(self, i):

from collections import defaultdict

lines = defaultdict(lambda : {})

for child in self.cur_item._objs:                #

if isinstance(child, LTChar):

(_,_,x,y) = child.bbox

line = lines[int(-y)]

line[x] = child._text.encode(self.codec) #

for y in sorted(lines.keys()):

line = lines[y]

self.outfp.write(";".join(line[x] for x in sorted(line.keys())))

self.outfp.write("\n")

# ... the following part of the code is a remix of the

# convert() function in the pdfminer/tools/pdf2text module

rsrc = PDFResourceManager()

outfp = StringIO()

device = CsvConverter(rsrc, outfp, codec="utf-8", laparams=LAParams())

# becuase my test documents are utf-8 (note: utf-8 is the default codec)

doc = PDFDocument()

fp = open(filename, 'rb')

parser = PDFParser(fp)

parser.set_document(doc)

doc.set_parser(parser)

doc.initialize('')

interpreter = PDFPageInterpreter(rsrc, device)

for i, page in enumerate(doc.get_pages()):

outfp.write("START PAGE %d\n" % i)

if page is not None:

interpreter.process_page(page)

outfp.write("END PAGE %d\n" % i)

device.close()

fp.close()

return outfp.getvalue()

python pdf模块_用于将PDF转换为文本的Python模块相关推荐

  1. python:curses.textpad --- 用于 curses 程序的文本输入控件

    python:curses.textpad --- 用于 curses 程序的文本输入控件 文本框对象 curses.textpad 模块提供了一个 Textbox 类,该类在 curses 窗口中处 ...

  2. python文件处理pdf_Python用于NLP :处理文本和PDF文件

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 这是我的Python用于自然语言处理(NLP)系列文章的第一篇文章.在本文中,我们将从Python for ...

  3. python写入pdf文件_Python用于NLP :处理文本和PDF文件

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 这是我的Python用于自然语言处理(NLP)系列文章的第一篇文章.在本文中,我们将从Python for ...

  4. 将PDF和Gutenberg文档格式转换为文本:生产中的自然语言处理

    Estimates state that 70%–85% of the world's data is text (unstructured data). Most of the English an ...

  5. python全栈测试开发_用于全栈自动化测试的最佳Python工具

    我知道大多数测试人员会说Java是他们创建自动化测试的首选语言. 但是我最喜欢的是Python.为什么?为什么是Python ? Al Sweigart,<自动化那些无聊的东西>的作者,P ...

  6. R pdf大小_免费的pdf压缩大法

    欢迎关注我们~ 今天突然需要压缩pdf,网上都要收钱贼坑,于是乎决定一切的一切都要靠自己,给自己省几块钱的压缩费吧: ) 基本思路就是,把pdf拆成jpg图片然后用SVD压缩图片,再拼接成PDF. 这 ...

  7. itext7读取pdf 中文_如何把PDF转为Word?转换软件哪个好?

    样把pdf转换成word? PDF是一种文件格式,全称是Portable Document Format,这种文件格式的最大优点是与操作系统平台无关,可以完美再现原稿的设计风貌.也就是说一个pdf文档 ...

  8. php在线读取pdf文件大小_怎么压缩PDF文件?快来试试这些工具!

    怎么压缩PDF文件?需要处理一些大体积的文件,我们首先想到的就是把它进行压缩.如果遇到的是PDF文件,知道该怎么去压缩吗?PDF压缩有一些简单又高效的方法,今天小编就选择两个觉得还不错的PDF压缩方法 ...

  9. 电脑上怎么做pdf文件_怎么编辑pdf文件内容?什么工具可以编辑pdf?

    怎么编辑pdf文件内容?临近毕业时候,我有了报考教师资格证的想法,打算之后当老师.期间,我在网上找了很多报考教资的参考资料,不过它们大多是以pdf格式文件形式存在.有时候要往里加入.修改些内容,但我不 ...

最新文章

  1. Visual C++ 控制栏
  2. 线程同步——内核对象实现线程同步——等待函数
  3. JSON Web Token - 在Web应用间安全地传递信息
  4. CentOS/用FTP客户端软件连接到服务器
  5. 矩形嵌套 南阳理工ACM
  6. 静态路由_配置IPv4静态路由
  7. 下图为双总线结构机器的数据通路_海康机器人为物流加码:进击吧,双11新“打工人”...
  8. Java调用exe阻塞
  9. Yslow-23条规则
  10. c语言主函数名用户指定,C语言允许main函数带形参,且形参个数和形参名均可由用户指定。()...
  11. linux的usermod命令参数,linux usermod命令参数及用法详解
  12. POI EXCEL读取 性能问题
  13. 手游复古传奇服务器维护,复古传奇手游:服务器中那些极品装备,属性也是逆天!...
  14. linux内核源码分析plat-form 分析
  15. 步骤一:支付宝-查看PID和APPID信息步骤
  16. 1.5.37:雇佣兵
  17. 和平精英清明节服务器维修时间,和平精英开服时间/和平精英几点能玩 和平精英常见问题解答汇总...
  18. python的学习记录
  19. matlab 生成 word 表格,Matlab生成Word表格范例代码
  20. java aes ctr_AES CBC和CTR加解密实例

热门文章

  1. 台式电脑主板插线步骤图_主板电池怎么放电?电脑主板电池放电的方法
  2. mysql 5.7 sql mode_MySQL 5.7版本sql_mode=only_full_group_by问题
  3. ssm框架验证码图片加载不出_基于SSM框架的文件图片上传/下载功能实现
  4. android imei *#06#,[Android]Hot key IMEI *#06# and *#07#
  5. php 抽象 接口类 区别,PHP 抽象類和接口區別
  6. Android 数据库加密
  7. WebKitGTK+ 编译
  8. TreeView 用法(有代码)
  9. java web 锁_Java中锁的分类
  10. python小程序设计4s店_python自写的车牌识别小程序,完全自主实现。图片处理