我想从 PDF 文件中提取表格数据,我正在使用 Itext,但我不知道如何搜索 dablur 数据,(拆分)任何人都可以给出与搜索表格内容相关的想法。这里的数据是无序格式,如何将该数据转换为可理解的格式。提前致谢。
问问题
139 次
1 回答
0
获取页面内容并扫描 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 是一项有趣的编程工作。我已经羡慕你了。
爪哇 7:
try (BufferedReader pin = new BufferedReader(new StringReader(pc))) {
...
}
爪哇 6:
BufferedReader pin = new BufferedReader(new StringReader(pc));
try {
...
} finally {
pin.close();
}
于 2013-09-02T13:40:37.080 回答