Améliorer l’extraction de texte à partir de PDF multicolonnes
Les mises en page multicolonnes nécessitent souvent un traitement supplémentaire pour améliorer l’ordre de lecture et la qualité de l’extraction.
Extraire le texte après avoir réduit la taille de la police
Cette technique met à jour les tailles de police des fragments de texte, enregistre le document ajusté en mémoire, puis extrait le texte du résultat transformé.
-
Ouvrez le PDF source dans une instance
Document. -
Créez un
TextFragmentAbsorberet visitez toutes les pages du document pour collecter des objetsTextFragment. -
Parcourez les fragments et réduisez la taille de chaque police selon le rapport demandé afin que la disposition des colonnes denses puisse être normalisée avant l’extraction.
-
Enregistrez le
Documentajusté dans un flux d’octets en mémoire. -
Rouvrez un deuxième
Documentà partir de cette mémoire tampon. -
Créez un
TextAbsorber, visitez toutes les pages du document transformé et écrivez le texte extrait dans le fichier de sortie.
public static void extractTextReduceFont(Path inputFile, Path outputFile, double reduceRatio) throws Exception {
try (Document document = new Document(inputFile.toString())) {
TextFragmentAbsorber fragmentAbsorber = new TextFragmentAbsorber();
document.getPages().accept(fragmentAbsorber);
for (TextFragment fragment : fragmentAbsorber.getTextFragments()) {
fragment.getTextState().setFontSize((float) (fragment.getTextState().getFontSize() * reduceRatio));
}
ByteArrayOutputStream stream = new ByteArrayOutputStream();
document.save(stream);
try (Document document2 = new Document(new ByteArrayInputStream(stream.toByteArray()))) {
TextAbsorber textAbsorber = new TextAbsorber();
document2.getPages().accept(textAbsorber);
Files.writeString(outputFile, textAbsorber.getText());
}
}
}
Extraire du texte avec un facteur d’échelle
Utilisez TextExtractionOptions avec le mode de mise en forme Pure et ajustez le facteur d’échelle pour les mises en page comportant beaucoup de colonnes.
-
Ouvrez le PDF source dans une instance
Document. -
Créez un
TextAbsorberpour l’extraction du document complet. -
Créez
TextExtractionOptionsavec le mode de mise en forme Pure afin d’utiliser un comportement d’extraction qui tient compte de la mise en page. -
Définissez le facteur d’échelle et appliquez les options d’extraction à l’absorbeur avant de visiter les pages.
-
Visitez toutes les pages du document et écrivez le texte extrait dans le fichier de sortie.
public static void extractTextScaleFactor(Path inputFile, Path outputFile, double scaleFactor) throws Exception {
try (Document document = new Document(inputFile.toString())) {
TextAbsorber textAbsorber = new TextAbsorber();
TextExtractionOptions extractionOptions =
new TextExtractionOptions(TextExtractionOptions.TextFormattingMode.Pure);
extractionOptions.setScaleFactor(scaleFactor);
textAbsorber.setExtractionOptions(extractionOptions);
document.getPages().accept(textAbsorber);
Files.writeString(outputFile, textAbsorber.getText());
}
}