Аннотации и специальный текст с использованием Java
Contents
[
Hide
]
Извлечение выделенного текста
Переберите аннотации страниц и прочитайте выделенный текст из HighlightAnnotation.
- Откройте исходный PDF в экземпляре Document.
- Переберите объекты Annotation на нужной странице Page.
- Проверьте, является ли каждая аннотация HighlightAnnotation, перед приведением её к типу класса аннотации.
- Прочитайте помеченный текст из каждой аннотации выделения и выведите его в консоль.
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());
}
}
}
}
Извлечение текста из аннотаций штампа
Прочтите поток обычного отображения из аннотации штампа и передайте его объекту TextAbsorber.
- Откройте исходный PDF в экземпляре Документ.
- Переберите объекты Аннотация на нужной странице Страница.
- Отфильтруйте аннотации, тип которых
Stamp. - Создайте TextAbsorber и получите запись обычного отображения из словаря отображений аннотации штампа.
- Обработайте объект отображения XForm поглотителем и выведите извлечённый текст.
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());
}
}
}
}
}
Извлечение сведений о надстрочном и подстрочном тексте
Используйте TextFragmentAbsorber, когда вам нужны как извлечённый текст, так и флаги верхнего или нижнего индекса для каждого фрагмента.
- Откройте исходный PDF в экземпляре Документ.
- Создайте TextFragmentAbsorber для анализа текста на уровне фрагментов.
- Обработайте нужную страницу Страница и соберите её объекты TextFragment.
- Переберите эти фрагменты и прочитайте текст вместе с флагами надстрочного и подстрочного текста из
fragment.getTextState(). - Запишите извлечённые детали в выходной файл.
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());
}
}