Extraire le paragraphe d'un PDF
Extraire le texte d’un document PDF sous forme de paragraphes
Nous pouvons obtenir du texte d’un document PDF en recherchant un texte particulier (en utilisant “plain text” ou “regular expressions”) à partir d’une seule page ou de l’ensemble du document, ou nous pouvons obtenir le texte complet d’une page unique, d’une plage de pages ou du document complet. Cependant, dans certains cas, vous devez extraire des paragraphes d’un document PDF ou du texte sous forme de paragraphes. Nous avons implémenté une fonctionnalité de recherche de sections et de paragraphes dans le texte des pages de documents PDF. Nous avons introduit la classe ParagraphAbsorber (comme TextFragmentAbsorber et TextAbsorber), qui peut être utilisée pour extraire des paragraphes de documents PDF. Il existe deux façons suivantes d’utiliser ParagraphAbsorber :
1- En dessinant la bordure des sections et des paragraphes de texte sur la page PDF :
public static void ExtractParagraph() {
// The path to the documents directory.
Document doc = new Document(_dataDir + "input.pdf");
Page page = doc.getPages().get_Item(2);
ParagraphAbsorber absorber = new ParagraphAbsorber();
absorber.visit(page);
PageMarkup markup = absorber.getPageMarkups().get(0);
for (MarkupSection section : markup.getSections()) {
DrawRectangleOnPage(section.getRectangle(), page);
for (MarkupParagraph paragraph : section.getParagraphs()) {
DrawPolygonOnPage(paragraph.getPoints(), page);
}
}
doc.save(_dataDir + "output_out.pdf");
}
private static void DrawRectangleOnPage(Rectangle rectangle, Page page) {
page.getContents().add(new GSave());
page.getContents().add(new ConcatenateMatrix(1, 0, 0, 1, 0, 0));
page.getContents().add(new SetRGBColorStroke(0, 1, 0));
page.getContents().add(new SetLineWidth(2));
page.getContents()
.add(new Re(rectangle.getLLX(), rectangle.getLLY(), rectangle.getWidth(), rectangle.getHeight()));
page.getContents().add(new ClosePathStroke());
page.getContents().add(new GRestore());
}
private static void DrawPolygonOnPage(Point[] polygon, Page page) {
page.getContents().add(new GSave());
page.getContents().add(new ConcatenateMatrix(1, 0, 0, 1, 0, 0));
page.getContents().add(new SetRGBColorStroke(0, 0, 1));
page.getContents().add(new SetLineWidth(1));
page.getContents().add(new MoveTo(polygon[0].getX(), polygon[0].getY()));
for (int i = 1; i < polygon.length; i++) {
page.getContents().add(new LineTo(polygon[i].getX(), polygon[i].getY()));
}
page.getContents().add(new LineTo(polygon[0].getX(), polygon[0].getY()));
page.getContents().add(new ClosePathStroke());
page.getContents().add(new GRestore());
}
2- En parcourant la collection de paragraphes et en récupérant le texte de ceux‑ci :
public static void ExtractParagraph02() {
// Open an existing PDF file
Document doc = new Document(_dataDir + "input.pdf");
// Instantiate ParagraphAbsorber
ParagraphAbsorber absorber = new ParagraphAbsorber();
absorber.visit(doc);
for (PageMarkup markup : absorber.getPageMarkups()) {
int i = 1;
for (MarkupSection section : markup.getSections()) {
int j = 1;
for (MarkupParagraph paragraph : section.getParagraphs()) {
StringBuilder paragraphText = new StringBuilder();
for (java.util.List<TextFragment> line : paragraph.getLines()) {
for (TextFragment fragment : line) {
paragraphText.append(fragment.getText());
}
paragraphText.append("\r\n");
}
paragraphText.append("\r\n");
System.out.println("Paragraph " + j + " of section " + i + " on page" + ":" + markup.getNumber());
System.out.println(paragraphText.toString());
j++;
}
i++;
}
}
}