从 java 中的特定位置提取文本
Extract text from specific position in java
我想从 pdf 中提取特定文本我有文本的确切位置
我尝试使用 itext7 进行提取,但是当我使用正确的尺寸创建用于提取的矩形时,它似乎太大而无法匹配文本,但尺寸是正确的我尝试了 SimpleTextExtractionStrategy 和
LocationTextExtractionStrategy 结果相同
pdfFile
private void estraiValori(PdfPage page) {
for (Entry<String, Elemento> entry : templateMap.entrySet()) {
String key = entry.getKey();
Elemento value=(Elemento) entry.getValue();
//Rectangle tmp=new Rectangle((float)238.64,(float) 14.8,(float) 122,(float) 28.7);
TextRegionEventFilter fontFilter = new TextRegionEventFilter(value.getDim()); //getDim is a rectangle
FilteredEventListener listener = new FilteredEventListener();
//LocationTextExtractionStrategy extractionStrategy = listener.attachEventListener(new LocationTextExtractionStrategy(), fontFilter);
SimpleTextExtractionStrategy extractionStrategy = listener.attachEventListener(new SimpleTextExtractionStrategy(), fontFilter);
new PdfCanvasProcessor(listener).processPageContent(page);//page is a PdfPage
String actualText = extractionStrategy.getResultantText();
System.out.println(actualText);
}
}
有多种方法可以(视觉上)显示 PDF 中的相同内容。您可以逐字形或整个句子附加文本字形。 TextRegionEventFilter
在过滤之前不会将较大的文本块拆分为较小的文本块。如果文本写成一大块而您只想要其中的一部分,则需要对原始内容进行预处理,即拆分成更小的块。
幸运的是,iText 提供了一种开箱即用的方法 - class 称为 GlyphTextEventListener
,它可以链接到其他 ITextExtractionStrategy
实例。只需按以下方式将您的侦听器包装到 ITextExtractionStrategy
中:
TextRegionEventFilter filter = new TextRegionEventFilter(new Rectangle(x1, y1, x2, y2));
ITextExtractionStrategy filteredListener = new FilteredTextEventListener(new LocationTextExtractionStrategy(), filter);
ITextExtractionStrategy fineGrainedListener = new GlyphTextEventListener(filteredListener);
new PdfCanvasProcessor(fineGrainedListener).processPageContent(page);
我想从 pdf 中提取特定文本我有文本的确切位置
我尝试使用 itext7 进行提取,但是当我使用正确的尺寸创建用于提取的矩形时,它似乎太大而无法匹配文本,但尺寸是正确的我尝试了 SimpleTextExtractionStrategy 和 LocationTextExtractionStrategy 结果相同 pdfFile
private void estraiValori(PdfPage page) {
for (Entry<String, Elemento> entry : templateMap.entrySet()) {
String key = entry.getKey();
Elemento value=(Elemento) entry.getValue();
//Rectangle tmp=new Rectangle((float)238.64,(float) 14.8,(float) 122,(float) 28.7);
TextRegionEventFilter fontFilter = new TextRegionEventFilter(value.getDim()); //getDim is a rectangle
FilteredEventListener listener = new FilteredEventListener();
//LocationTextExtractionStrategy extractionStrategy = listener.attachEventListener(new LocationTextExtractionStrategy(), fontFilter);
SimpleTextExtractionStrategy extractionStrategy = listener.attachEventListener(new SimpleTextExtractionStrategy(), fontFilter);
new PdfCanvasProcessor(listener).processPageContent(page);//page is a PdfPage
String actualText = extractionStrategy.getResultantText();
System.out.println(actualText);
}
}
有多种方法可以(视觉上)显示 PDF 中的相同内容。您可以逐字形或整个句子附加文本字形。 TextRegionEventFilter
在过滤之前不会将较大的文本块拆分为较小的文本块。如果文本写成一大块而您只想要其中的一部分,则需要对原始内容进行预处理,即拆分成更小的块。
幸运的是,iText 提供了一种开箱即用的方法 - class 称为 GlyphTextEventListener
,它可以链接到其他 ITextExtractionStrategy
实例。只需按以下方式将您的侦听器包装到 ITextExtractionStrategy
中:
TextRegionEventFilter filter = new TextRegionEventFilter(new Rectangle(x1, y1, x2, y2));
ITextExtractionStrategy filteredListener = new FilteredTextEventListener(new LocationTextExtractionStrategy(), filter);
ITextExtractionStrategy fineGrainedListener = new GlyphTextEventListener(filteredListener);
new PdfCanvasProcessor(fineGrainedListener).processPageContent(page);