Annotations et textes spéciaux utilisant Java

Extraire le texte surligné

Parcourez les annotations de page et lisez le texte marqué à partir de HighlightAnnotation.

  1. Ouvrez le PDF source dans une instance Document.

  2. Parcourez les objets Annotation sur la Page cible.

  3. Vérifiez si chaque annotation est une HighlightAnnotation avant de la convertir vers ce type.

  4. Lisez le texte marqué de chaque annotation de surlignage et affichez-le dans la 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());
            }
        }
    }
}

Extraire le texte des annotations de tampon

Lisez le flux d’apparence normale à partir d’une annotation de tampon et transmettez-le via TextAbsorber.

  1. Ouvrez le PDF source dans une instance Document.

  2. Parcourez les objets Annotation sur la Page cible.

  3. Conservez uniquement les annotations dont le type est Stamp.

  4. Créez un TextAbsorber et récupérez l’entrée d’apparence normale dans le dictionnaire d’apparence de l’annotation de tampon.

  5. Visitez l’apparence XForm et affichez le texte extrait.

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());
                }
            }
        }
    }
}

Extraire les détails du texte en exposant et en indice

Utilisez TextFragmentAbsorber lorsque vous avez besoin à la fois du texte extrait et des indicateurs en exposant ou en indice sur chaque fragment.

  1. Ouvrez le PDF source dans une instance Document.

  2. Créez un TextFragmentAbsorber pour l’analyse de texte au niveau des fragments.

  3. Visitez la Page cible et récupérez ses objets TextFragment.

  4. Parcourez ces fragments et lisez le texte avec les indicateurs de mise en exposant et en indice de fragment.getTextState().

  5. Écrivez les détails extraits dans le fichier de sortie.

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());
    }
}