Anotações e texto especial usando Java
Contents
[
Hide
]
Extrair texto destacado
Iterar pelas anotações da página e ler o texto marcado de HighlightAnnotation.
- Abra o PDF de origem em uma instância de Document.
- Itere através do objetos Annotation no destino Page.
- Verifique se cada anotação é um HighlightAnnotation antes de convertê-la para a classe de anotação tipada.
- Leia o texto marcado de cada anotação de destaque e imprima-o no console.
public static void extractHighlightedText(Path inputFile) {
try (Document document = new Document(inputFile.toString())) {
for (Annotation annotation : document.getPages().get_Item(1).getAnnotations()) {
if (annotation instanceof HighlightAnnotation) {
HighlightAnnotation highlightAnnotation = (HighlightAnnotation) annotation;
System.out.println(highlightAnnotation.getMarkedText());
}
}
}
}
Extrair texto de anotações de carimbo
Leia o fluxo de aparência normal de uma anotação de carimbo e passe‑o adiante TextAbsorber.
- Abra o PDF de origem em uma instância de Document.
- Itere através do objetos Annotation no destino Page.
- Filtre as anotações para aquelas cujo tipo é
Stamp. - Crie um TextAbsorber e solicite a entrada de aparência normal do dicionário de aparência da anotação de carimbo.
- Visite a aparência XForm e imprima o texto extraído.
public static void extractStampText(Path inputFile) {
try (Document document = new Document(inputFile.toString())) {
for (Annotation annotation : document.getPages().get_Item(1).getAnnotations()) {
if (annotation.getAnnotationType() == AnnotationType.Stamp) {
TextAbsorber absorber = new TextAbsorber();
Object[] xforms = new Object[1];
if (annotation.getAppearance().tryGetValue("N", xforms) && xforms[0] instanceof XForm) {
absorber.visit((XForm) xforms[0]);
System.out.println(absorber.getText());
}
}
}
}
}
Extrair detalhes de texto sobrescrito e subscrito
Use TextFragmentAbsorber quando precisar tanto do texto extraído quanto das marcações de sobrescrito ou subscrito em cada fragmento.
- Abra o PDF de origem em uma instância de Document.
- Crie um TextFragmentAbsorber para análise de texto em nível de fragmento.
- Visite o destino Page e coletar o seu objetos TextFragment.
- Itere pelos fragmentos e leia o texto junto com as bandeiras de sobrescrito e subscrito de
fragment.getTextState(). - Escreva os detalhes extraídos no arquivo de saída.
public static void extractSuperSubDetails(Path inputFile, Path outputFile, int pageNumber) throws Exception {
try (Document document = new Document(inputFile.toString())) {
TextFragmentAbsorber absorber = new TextFragmentAbsorber();
document.getPages().get_Item(pageNumber).accept(absorber);
StringBuilder details = new StringBuilder();
for (TextFragment fragment : absorber.getTextFragments()) {
details.append("Text: '").append(fragment.getText())
.append("' | Superscript: ").append(fragment.getTextState().isSuperscript())
.append(" | Subscript: ").append(fragment.getTextState().isSubscript())
.append(System.lineSeparator());
}
Files.writeString(outputFile, details.toString());
}
}