【发布时间】:2012-11-29 18:44:02
【问题描述】:
我试图读取一个流并希望得到每个字符串的确切位置(坐标)
int size = reader.getXrefSize();
for (int i = 0; i < size; ++i)
{
PdfObject pdfObject = reader.getPdfObject(i);
if ((pdfObject == null) || !pdfObject.isStream())
continue;
PdfStream stream = (PdfStream) pdfObject;
PdfObject obj = stream.get(PdfName.FILTER);
if ((obj != null) && obj.toString().equals(PdfName.FLATEDECODE.toString()))
{
byte[] codedText = PdfReader.getStreamBytesRaw((PRStream) stream);
byte[] text = PdfReader.FlateDecode(codedText);
FileOutputStream o = new FileOutputStream(new File("/home..../Text" + i + ".txt"));
o.write(text);
o.flush();
o.close();
}
}
我居然得到了这样的职位
......
BT
70.9 800.9 Td /F1 14 Tf <01> Tj
10.1 0 Td <02> Tj
9.3 0 Td <03> Tj
3.9 0 Td <01> Tj
10.1 0 Td <0405> Tj
18.7 0 Td <060607> Tj
21 0 Td <08090A07> Tj
24.9 0 Td <05> Tj
10.1 0 Td <0B0C0D> Tj
28.8 0 Td <0E> Tj
3.8 0 Td <0F> Tj
8.6 0 Td <090B1007> Tj
29.5 0 Td <0B11> Tj
16.4 0 Td <12> Tj
7.8 0 Td <1307> Tj
12.4 0 Td <14> Tj
7.8 0 Td <07> Tj
3.9 0 Td <15> Tj
7.8 0 Td <16> Tj
7.8 0 Td <07> Tj
3.9 0 Td <17> Tj
10.8 0 Td <0D> Tj
7.8 0 Td <18> Tj
10.9 0 Td <19> Tj
ET
.....
但我不知道哪个字符串适合哪个位置 另一方面,在 Itext 中,我可以使用
获取纯文本PdfReader reader = new PdfReader(new FileInputStream("/home/....xxx.pdf"));
PdfTextExtractor extract = new PdfTextExtractor(reader);
但当然完全没有任何职位......
那么我怎样才能得到每个 text(string,char,...) 的确切位置呢?
【问题讨论】:
-
我知道例如第 1 行中的 是 Ascii Hex,意思是 START OF HEADING .... 但它们都不是指 PDF 中的实际文本
-
将解析器包的类与自定义 RenderListener iText 结合使用,您可以提取具有位置等的文本。明天我会写一个完整的答案。