Text-Extraktion aus PDF mit PDFBox 2.0
Ich versuche, PDFBox 2.0 für die text-Extraktion. Wie erhalte ich Informationen über die Größe der schriftart von bestimmten Zeichen und die position Rechteck-dieses Zeichen auf der Seite.
Ich habe diese umgesetzt in PDFBox 1.6 mit einem PDFTextStripper:
PDFParser parser = new PDFParser(is);
try{
parser.parse();
}catch(IOException e){
}
COSDocument cosDoc = parser.getDocument();
PDDocument pdd = new PDDocument(cosDoc);
final StringBuffer extractedText = new StringBuffer();
PDFTextStripper textStripper = new PDFTextStripper(){
@Override
protected void processTextPosition(TextPosition text) {
extractedText.append(text.getCharacter());
logger.debug("text position: "+text.toString());
}
};
textStripper.setSuppressDuplicateOverlappingText(false);
for(int pageNum = 0;pageNum<pdd.getNumberOfPages();pageNum++){
PDPage page = (PDPage) pdd.getDocumentCatalog().getAllPages().get(pageNum);
textStripper.processStream(page, page.findResources(), page.getContents().getStream());
}
pdd.close();
Aber in der 2.0-version von PDFBox, die processStream
Methode wurde entfernt.
Wie kann ich erreichen das gleiche mit PDFBox 2.0?
Ich habe versucht, die folgenden:
PDDocument pdd = PDDocument.load(inputStream);
PDFTextStripper textStripper = new PDFTextStripper(){
@Override
protected void processTextPosition(TextPosition text){
int pos = PDFdocument.length();
String textadded = text.getUnicode();
Range range = new Range(pos,pos+textadded.length());
int pagenr = this.getCurrentPageNo();
Rectangle2D rect = new Rectangle2D.Float(text.getX(),text.getY(),text.getWidth(),text.getHeight());
}
};
textStripper.setSuppressDuplicateOverlappingText(false);
for(int pageNum = 0;pageNum<pdd.getNumberOfPages();pageNum++){
PDPage page = (PDPage) pdd.getDocumentCatalog().getPages().get(pageNum);
textStripper.processPage(page);
}
pdd.close();
Den processTextPosition(TextPosition text)
Methode nicht aufgerufen.
Anregungen wäre sehr willkommen.
- Bitte schauen Sie auf die DrawPrintTextLocations Beispiel im source code das tut, was du anscheinend vorhast. Es verwendet die writeString () - Aufruf.
- Danke, das Beispiel macht genau das, was ich suchte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
DrawPrintTextLocations
Beispiel, vorgeschlagen von @tilmanhausherr, sofern die Lösung zu meinem problem.Den parser gestartet wird, mithilfe des folgenden Codes (die
inputStream
wird der input-stream aus der URL der PDF-Datei):Dieser code verwendet eine benutzerdefinierte Unterklasse der
PDFTextStripper
:Hier ist eine Implementierung, die verwendet @tilmanhausherr suggestion(s):