我想从PDF文件中提取表格数据,我正在使用Itext,但我不知道如何搜索dablur数据,(拆分)谁能给出相关的想法搜索表content.Here数据是无序的格式,如何将这些数据转换为可理解的格式。提前谢谢。
发布于 2013-09-02 21:40:37
获取页面内容并扫描MoveTo(x,y) (tm
)和text (tj
)命令。此外,字体更改(tf
),如将单词标记为粗体,可能会拆分文本。
final String NUM = "\\d*\\.?\\d+";
Pattern tj = Pattern.compile(".*\\((.*)\\) Tj");
Pattern tm = Pattern.compile("\\d+ \\d+ \\d+ \\d+ ("
+ NUM + ") (" + NUM + ") Tm");
Pattern tf = Pattern.compile("/(F\\d+) (" + NUM + ") Tf");
byte[] pageContent = pdfReader.getPageContent(pageno);
String pc = new String(pageContent, "Cp1252");
try (BufferedReader pin = new BufferedReader(new StringReader(pc))) {
for (;;) {
String cline = pin.readLine();
if (cline == null) {
break;
}
Matcher m = tm.matcher(cline);
if (m.matches()) {
请注意,部分(.123)可能并不总是存在,因此简单的Double.parseDouble(m.group(1))
是不够的。
这是如何工作的
在上面的“页面内容”中,你会看到几行创建页面的PostScript命令:选择一种字体,移动到(x,y),打印一些字符。
顺便说一句:命令采用所谓的后缀表示法:100.0 200.0 Tm
(move-to x: 100,y: 200)。首先是参数,然后是命令。对于堆栈-机器处理所有的。因此取名为“PostScript”。
如果你得到两个带有相同y的移动到命令,那么你就在同一行上。或者选择了另一种字体,例如将单词设为粗体,或者您在表格中。
您可以想象,分析PDF将成为一项有趣的编程工作。我已经很羡慕你了。
Java 7:
try (BufferedReader pin = new BufferedReader(new StringReader(pc))) {
...
}
Java 6:
BufferedReader pin = new BufferedReader(new StringReader(pc));
try {
...
} finally {
pin.close();
}
https://stackoverflow.com/questions/18574398
复制相似问题