我使用以下代码从特定位置获取PDF格式的数据。我希望在该位置显示粗体文本。
Rectangle rect = new Rectangle(0,0,250,250);
RenderFilter filter = new RegiontextRenderFilter(rect);
fontBasedTextExtractionStrategy strategy = new fontBasedTextExtractionStrategy();
strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), filter); //Throws Error.
首先,创建一个名为fontBasedTextExtractionStrategy的新方法,而不是文本简单的TextExtractionStrategy帮助?像下面的东西
public class fontBasedTextExtractionStrategy implements TextExtractionStrategy {
private String text;
@Override
public void beginTextBlock() {
}
@Override
public void renderText(TextRenderInfo renderInfo) {
text = renderInfo.getText();
System.out.println(renderInfo.getFont().getFontType());
System.out.print(text);
}
@Override
public void endTextBlock() {
}
@Override
public void renderImage(ImageRenderInfo renderInfo) {
}
@Override
public String getResultantText() {
return text;
}
}
但又怎么称呼它?
答案 0 :(得分:1)
请查看ParseCustom
示例。在此示例中,我们创建了自定义RenderFilter
(不是TextExtractionStrategy
):
class FontRenderFilter extends RenderFilter {
public boolean allowText(TextRenderInfo renderInfo) {
String font = renderInfo.getFont().getPostscriptFontName();
return font.endsWith("Bold") || font.endsWith("Oblique");
}
}
此文本将过滤所有文本,以便只有Postscript字体名称以Bold或Oblique结尾的文本。
这是您使用此过滤器的方式:
public void parse(String filename) throws IOException {
PdfReader reader = new PdfReader(filename);
Rectangle rect = new Rectangle(36, 750, 559, 806);
RenderFilter regionFilter = new RegionTextRenderFilter(rect);
FontRenderFilter fontFilter = new FontRenderFilter();
TextExtractionStrategy strategy = new FilteredTextRenderListener(
new LocationTextExtractionStrategy(), regionFilter, fontFilter);
System.out.println(PdfTextExtractor.getTextFromPage(reader, 1, strategy));
reader.close();
}
正如您所看到的,我们创建了一个FilteredTextRenderListener
,其中包含两个过滤器RegionTextRenderFilter
以及基于该字体的自制过滤器。