J'ai essayé de lire un flux et a été l'espoir d'obtenir pour chaque chaîne la position exacte (coordonnées)Obtenez le Stringposition exacte au format PDF
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();
}
}
En fait, j'ai obtenu la position comme
......
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
.....
Mais Je ne sais pas quelle chaîne correspond à quelle position D'autre part dans Itext je pourrais juste obtenir le texte clair avec
PdfReader reader = new PdfReader(new FileInputStream("/home/....xxx.pdf"));
PdfTextExtractor extract = new PdfTextExtractor(reader);
mais bien sûr sans aucune position ....
Alors, comment puis-je obtenir la position exacte de chaque texte (chaîne, caractère, ...)?
Je sais que par exemple <01> dans La ligne 1 est Ascii Hex signifiant START OF HEADING .... mais tous ne se réfèrent pas au texte réel dans le PDF – Fendrix
Utilisation des classes du paquet analyseur en combinaison avec un RenderListener personnalisé. IText vous permet d'extraire du texte avec des positions et plus. Je vais écrire une réponse complète demain. – mkl