Extraire un 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 du “texte brut” ou des “expressions régulières”) à partir d’une seule page ou de l’ensemble du document, ou nous pouvons obtenir le texte complet d’une seule page, d’une plage de pages ou de l’ensemble du document. Cependant, dans certains cas, vous devez extraire des paragraphes d’un document PDF ou du texte sous forme de paragraphes. Nous avons mis en œuvre une fonctionnalité pour rechercher des sections et des 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 manières suivantes dont vous pouvez utiliser ParagraphAbsorber :
static void DrawRectangleOnPage(System::SmartPtr<Rectangle> rectangle, System::SmartPtr<Page> page);
static void DrawPolygonOnPage(System::ArrayPtr<System::SmartPtr<Point>> polygon, System::SmartPtr<Page> page);
void Parsing::ExtractParagraph()
{
// Le chemin vers le répertoire des documents.
std::clog << __func__ << ": Démarrer" << std::endl;
// Chaîne pour le nom du chemin
String _dataDir("C:\\Samples\\Parsing\\");
auto doc = MakeObject<Document>(_dataDir + u"sample.pdf");
auto page = doc->get_Pages()->idx_get(1);
auto absorber = MakeObject<ParagraphAbsorber>();
absorber->Visit(page);
auto markup = absorber->get_PageMarkups()->idx_get(0);
for(auto §ion : markup->get_Sections())
{
DrawRectangleOnPage(section->get_Rectangle(), page);
for(auto ¶graph : section->get_Paragraphs())
{
DrawPolygonOnPage(paragraph->get_Points(), page);
}
}
doc->Save(_dataDir + u"output_out.pdf");
}
void DrawRectangleOnPage(System::SmartPtr<Rectangle> rectangle, System::SmartPtr<Page> page)
{
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::GSave>());
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::ConcatenateMatrix>(1, 0, 0, 1, 0, 0));
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::SetRGBColorStroke>(0, 1, 0));
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::SetLineWidth>(2));
page->get_Contents()->Add(
MakeObject<Aspose::Pdf::Operators::Re>(
rectangle->get_LLX(),
rectangle->get_LLY(),
rectangle->get_Width(),
rectangle->get_Height()));
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::ClosePathStroke>());
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::GRestore>());
}
void DrawPolygonOnPage(System::ArrayPtr<System::SmartPtr<Point>> polygon, System::SmartPtr<Page> page)
{
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::GSave>());
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::ConcatenateMatrix>(1, 0, 0, 1, 0, 0));
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::SetRGBColorStroke>(0, 0, 1));
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::SetLineWidth>(1));
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::MoveTo>(polygon->idx_get(0)->get_X(), polygon[0]->get_Y()));
for (int i = 1; i < polygon->get_Length(); i++)
{
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::LineTo>(polygon->idx_get(i)->get_X(), polygon[i]->get_Y()));
}
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::LineTo>(polygon->idx_get(0)->get_X(), polygon[0]->get_Y()));
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::ClosePathStroke>());
page->get_Contents()->Add(MakeObject<Aspose::Pdf::Operators::GRestore>());
}