F****3 发帖数: 1504 | 1 目前有2w多排版一样的pdf,里面有表格,可以用Adobe Acrobat把table弄出来,但是
一个一个弄估计会死。。。
查了stackoverflow,弄了半天没实现。 请问有什么好办法吗? 谢谢! |
t****a 发帖数: 1212 | 2 ubuntu的sudo apt-get install poppler-utils中有个tool叫做pdf2text可以转换pdf
成text格式,使用-layout参数可以保持表格的式样在text里,如果你的表格不太复杂
的话,运气好应该能留下来。
之后,如果你的表格有某些特殊的标记比如表头之类的,我想可以用个脚本语言把表格
抓出来生成excel。
当然,是运气好你的表格能留在txt里并且容易解析。
【在 F****3 的大作中提到】 : 目前有2w多排版一样的pdf,里面有表格,可以用Adobe Acrobat把table弄出来,但是 : 一个一个弄估计会死。。。 : 查了stackoverflow,弄了半天没实现。 请问有什么好办法吗? 谢谢!
|
e*******o 发帖数: 4654 | 3 貌似你用的是python, 搜一下Python的pdf lib 然后看文档。
如果你足够brave 看 adobe的 pdf specificaton。你找个很简单的PDF 文件用文本编
辑器查看,也能看出来些眉目的。
我做过生成PDF的活,逆向没做过。 |
z*******3 发帖数: 13709 | |
F****3 发帖数: 1504 | 5 谢谢楼上几位!
PDF内的表格非常工整,可以用Acrobat Professional单击右键就可以导出成csv文件,
转换成Excel没有问题。但是手工做实在麻烦。
试过pdftotext,但是有很多空余,misalignment问题有点小问题,怎么再用Python把
这些文件parse成表格目前还不会。。。水平还是入门级的。
iText下载了java的版本,好像不再是免费的了。Java有点专业目前还不太敢搞。
准备什么时候弄一些jExcel, 搜一搜PDF的python lib。
请问还有什么门槛比较低一点的办法吗? |
z*******3 发帖数: 13709 | 6 我看了下,目测还是可以免费用的,你试试不就知道了
这个我想出来比较麻烦的是要倒腾java.io,这个有些小烦
其它都还好
如果你真怕不免费,简单,google会告诉你很多其它选择,来看看java的类库有多牛吧
http://stackoverflow.com/questions/6118635/what-is-the-best-pdf
类似的,excel也一样
google会告诉你很多
目测apache有两个项目,正好对应这两个文件格式
一个是
http://poi.apache.org/
针对excel
一个是
http://pdfbox.apache.org/
针对pdf
so,放马上吧
【在 F****3 的大作中提到】 : 谢谢楼上几位! : PDF内的表格非常工整,可以用Acrobat Professional单击右键就可以导出成csv文件, : 转换成Excel没有问题。但是手工做实在麻烦。 : 试过pdftotext,但是有很多空余,misalignment问题有点小问题,怎么再用Python把 : 这些文件parse成表格目前还不会。。。水平还是入门级的。 : iText下载了java的版本,好像不再是免费的了。Java有点专业目前还不太敢搞。 : 准备什么时候弄一些jExcel, 搜一搜PDF的python lib。 : 请问还有什么门槛比较低一点的办法吗?
|
z*******3 发帖数: 13709 | 7 java直接写一个main不就搞定了
你把java放在eclipse当脚本写就好了
不用理会什么class之类的关键字
表被什么对象之类的给吓住了
要包装成web服务的话,可能还需要一些额外的操作
比如上传文件之类的
也可以从apache项目中找
比如这个:
http://commons.apache.org/
再弄一个tomcat
小server就出来了 |
F****3 发帖数: 1504 | 8 真是谢谢楼上的各位的帮助!
我按照你们的提示回去仔细一下,然后回来汇报一下,如果搞定了的话。 |
d******k 发帖数: 4295 | 9 你可以先试试是否可以写batch script把所有pdf文件批量save as csv文件。
【在 F****3 的大作中提到】 : 谢谢楼上几位! : PDF内的表格非常工整,可以用Acrobat Professional单击右键就可以导出成csv文件, : 转换成Excel没有问题。但是手工做实在麻烦。 : 试过pdftotext,但是有很多空余,misalignment问题有点小问题,怎么再用Python把 : 这些文件parse成表格目前还不会。。。水平还是入门级的。 : iText下载了java的版本,好像不再是免费的了。Java有点专业目前还不太敢搞。 : 准备什么时候弄一些jExcel, 搜一搜PDF的python lib。 : 请问还有什么门槛比较低一点的办法吗?
|
F****3 发帖数: 1504 | 10 谢谢啊!我用了下面这个
for file in *.pdf; do pdftotext -layout "$file" "$file.txt"; done
可以把所有的PDF转换成text文件,但是表格是"看上去"对齐了,但是好像中间空格数
目不一致,所以很难把text转换成table。
另外PDF里面有很多解释的文档,要把文档和table分开目前还不知道怎么实现。
文科的水平很菜,千万别笑啊。
【在 d******k 的大作中提到】 : 你可以先试试是否可以写batch script把所有pdf文件批量save as csv文件。
|
|
|
z*******3 发帖数: 13709 | 11 你需要parse文档
我估计你投机取巧之后,最后会发现还是java最简单
嘿嘿
比如你这个解释文档和table,在pdfbox里面就是不同的对象
直接丢掉解释文档就好了
【在 F****3 的大作中提到】 : 谢谢啊!我用了下面这个 : for file in *.pdf; do pdftotext -layout "$file" "$file.txt"; done : 可以把所有的PDF转换成text文件,但是表格是"看上去"对齐了,但是好像中间空格数 : 目不一致,所以很难把text转换成table。 : 另外PDF里面有很多解释的文档,要把文档和table分开目前还不知道怎么实现。 : 文科的水平很菜,千万别笑啊。
|
F****3 发帖数: 1504 | 12 呵呵,谢谢!
要是要用java,就搞大了。。。
【在 z*******3 的大作中提到】 : 你需要parse文档 : 我估计你投机取巧之后,最后会发现还是java最简单 : 嘿嘿 : 比如你这个解释文档和table,在pdfbox里面就是不同的对象 : 直接丢掉解释文档就好了
|
d******k 发帖数: 4295 | 13 两个问题:
1.你的tables的格式是否统一?是否都是固定列数?
2.table里头的每一个cell的值是数字?还是字符串,有没有包含空格逗号等特殊符号
的可能?
如果你的tables固定列数,且没有包含空格逗号等特殊符号的字符串。那你可以试着用
python,读文件的每一行,把空格数目(连续的空格当做一个空格)等于table列数的
行输出到新文件,把空格替换成逗号。这样新文件就变成csv了。
这是个笨办法吧,会有小错误,但你没法用java,.net的类库,也只能凑活了。
【在 F****3 的大作中提到】 : 谢谢啊!我用了下面这个 : for file in *.pdf; do pdftotext -layout "$file" "$file.txt"; done : 可以把所有的PDF转换成text文件,但是表格是"看上去"对齐了,但是好像中间空格数 : 目不一致,所以很难把text转换成table。 : 另外PDF里面有很多解释的文档,要把文档和table分开目前还不知道怎么实现。 : 文科的水平很菜,千万别笑啊。
|
F****3 发帖数: 1504 | 14 谢谢你的热心帮助!
1. 固定列数
2. 包括数字,string,和date, 有cell里面有些空格(见item 3)
3. date的格式是“Feb 01, 2011”
4. 左边第一列是列别,里面也有空格(比如, “Cost of Goods Sold ($ mlns)”)
5. 用pdftotext -layout以后,列于列时间的空格数目不完全一致,因为有的cell里面
东西都,所以不需要很多空格吧列于列据别开来,有的列cell东西少,需要很多空格吧
column区别开来。
:)
最终真的可能还是要用牛逼的东西比如java
【在 d******k 的大作中提到】 : 两个问题: : 1.你的tables的格式是否统一?是否都是固定列数? : 2.table里头的每一个cell的值是数字?还是字符串,有没有包含空格逗号等特殊符号 : 的可能? : 如果你的tables固定列数,且没有包含空格逗号等特殊符号的字符串。那你可以试着用 : python,读文件的每一行,把空格数目(连续的空格当做一个空格)等于table列数的 : 行输出到新文件,把空格替换成逗号。这样新文件就变成csv了。 : 这是个笨办法吧,会有小错误,但你没法用java,.net的类库,也只能凑活了。
|
d******k 发帖数: 4295 | 15 不客气,以前折腾过类似的东西,算有点经验。
如果date格式在固定的列,相对好解决。
如果有特征可以把第一列的内容和第二列简单区别开来,比如第一列以)”结尾,第二
列是数字,也是可以通过代码专门处理的。
(关键就是你要找到这个table的每一列的特征,用程序语言把他们区分开来。)
另外,可以直接在excel里面用vba把txt里头写到sheet里面,可以参考下边的例子。
vba要比java,c#简单一些。
http://stackoverflow.com/questions/15045446/extract-tables-from
【在 F****3 的大作中提到】 : 谢谢你的热心帮助! : 1. 固定列数 : 2. 包括数字,string,和date, 有cell里面有些空格(见item 3) : 3. date的格式是“Feb 01, 2011” : 4. 左边第一列是列别,里面也有空格(比如, “Cost of Goods Sold ($ mlns)”) : 5. 用pdftotext -layout以后,列于列时间的空格数目不完全一致,因为有的cell里面 : 东西都,所以不需要很多空格吧列于列据别开来,有的列cell东西少,需要很多空格吧 : column区别开来。 : :) : 最终真的可能还是要用牛逼的东西比如java
|
e*******o 发帖数: 4654 | 16 Perl 的老大也是你们文科生。
【在 F****3 的大作中提到】 : 谢谢啊!我用了下面这个 : for file in *.pdf; do pdftotext -layout "$file" "$file.txt"; done : 可以把所有的PDF转换成text文件,但是表格是"看上去"对齐了,但是好像中间空格数 : 目不一致,所以很难把text转换成table。 : 另外PDF里面有很多解释的文档,要把文档和table分开目前还不知道怎么实现。 : 文科的水平很菜,千万别笑啊。
|
l*********s 发帖数: 5409 | 17 嗯,忘了那里看到的,说是最牛的程序员都是学社科出身的。
【在 e*******o 的大作中提到】 : Perl 的老大也是你们文科生。
|
F****3 发帖数: 1504 | 18 谢谢大家的热心帮助啊。我仔细研究一下 :D 怎么解决这个工程问题.
【在 d******k 的大作中提到】 : 不客气,以前折腾过类似的东西,算有点经验。 : 如果date格式在固定的列,相对好解决。 : 如果有特征可以把第一列的内容和第二列简单区别开来,比如第一列以)”结尾,第二 : 列是数字,也是可以通过代码专门处理的。 : (关键就是你要找到这个table的每一列的特征,用程序语言把他们区分开来。) : 另外,可以直接在excel里面用vba把txt里头写到sheet里面,可以参考下边的例子。 : vba要比java,c#简单一些。 : http://stackoverflow.com/questions/15045446/extract-tables-from
|
e*******o 发帖数: 4654 | 19 估计是文科生喜欢留胡子
【在 l*********s 的大作中提到】 : 嗯,忘了那里看到的,说是最牛的程序员都是学社科出身的。
|
l*******s 发帖数: 1258 | |
r****o 发帖数: 1950 | 21 用 Perl
做这个最适合了。
【在 F****3 的大作中提到】 : 谢谢你的热心帮助! : 1. 固定列数 : 2. 包括数字,string,和date, 有cell里面有些空格(见item 3) : 3. date的格式是“Feb 01, 2011” : 4. 左边第一列是列别,里面也有空格(比如, “Cost of Goods Sold ($ mlns)”) : 5. 用pdftotext -layout以后,列于列时间的空格数目不完全一致,因为有的cell里面 : 东西都,所以不需要很多空格吧列于列据别开来,有的列cell东西少,需要很多空格吧 : column区别开来。 : :) : 最终真的可能还是要用牛逼的东西比如java
|