Les fichiers PDF sont un format standard pour l’échange de documents sur Internet. Les documents tels que les factures et les guides de produits sont généralement partagés sous forme de fichiers PDF. Il peut y avoir des situations où vous avez plusieurs factures contenant des données tabulaires que vous devez extraire et traiter davantage. Il sera plus efficace d’extraire ces données par programmation. À cette fin, cet article vous apprendra comment extraire des données de tableaux PDF à l’aide de C++.
- API C++ pour extraire des données de tableaux dans des fichiers PDF
- Extraire des données de tableaux PDF à l’aide de C++
- Extraire des données d’un tableau dans une zone spécifique d’une page PDF
API C++ pour extraire des données de tableaux dans des fichiers PDF
Aspose.PDF for C++ est une bibliothèque C++ qui vous permet de créer, lire et mettre à jour des fichiers PDF. De plus, l’API prend en charge l’extraction de données à partir de tableaux dans des fichiers PDF. Vous pouvez soit installer l’API via NuGet ou la télécharger directement à partir de la section downloads.
PM> Install-Package Aspose.PDF.Cpp
Extraire des données de tableaux PDF à l’aide de C++
Voici les étapes pour extraire les données des tableaux PDF.
- Chargez le document PDF à l’aide de la classe Document.
- Parcourez les pages du document à l’aide de la méthode Document->getPages().
- Dans chaque itération, créez une instance de la classe TableAbsorber et spécifiez la page d’extraction des tables à l’aide de TableAbsorber->Visit(System::SharedPtr page) méthode.
- Obtenez les tables à l’aide de la méthode TableAbsorber->getTableList() et parcourez-les.
- Pour chaque AbsorbedTable, parcourez les lignes à l’aide de la méthode AbsorbedTable->getRowList().
- Pour chaque AbsorbedRow, parcourez les cellules à l’aide de la méthode AbsorbedRow->getCellList().
- Obtenez TextFragmentCollection pour chaque AbsorbedCell en utilisant la méthode AbsorbedCell->getTextFragments() et parcourez-la en boucle.
- Obtenez TextSegmentCollection pour chaque TextFragment à l’aide de la méthode TextFragment->getSegments() et parcourez-la en boucle.
- Récupérez le texte de chaque TextSegment et imprimez-le.
L’exemple de code suivant montre comment extraire des données de tableaux PDF à l’aide de C++.
// Charger le document PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");
// Parcourir les pages du document
for (auto page : pdfDocument->get_Pages())
{
// Créer une instance de la classe TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Itérer dans les tables
for (auto table : absorber->get_TableList())
{
Console::WriteLine(u"Table");
// Itérer dans les lignes
for (auto row : table->get_RowList())
{
// Itérer dans les cellules
for (auto cell : row->get_CellList())
{
// Itérer à travers les fragments de texte
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Parcourir les segments de texte
for (auto seg : fragment->get_Segments())
{
// Obtenir le texte
string = String::Concat(string, seg->get_Text());
}
// Imprimer le texte
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
Extraire des données d’un tableau dans une zone spécifique d’une page PDF
Afin d’extraire des données d’un tableau dans une zone spécifique d’une page PDF, veuillez suivre les étapes ci-dessous.
- Chargez le document PDF à l’aide de la classe Document.
- Récupérez la page contenant la table à l’aide de la méthode Document->getPages()->idxget(int32t index).
- Parcourez les annotations et obtenez l’annotation carrée.
- Créez une instance de la classe TableAbsorber et spécifiez la page d’extraction des tables à l’aide de TableAbsorber->Visit(System::SharedPtr page) méthode.
- Obtenez les tables à l’aide de la méthode TableAbsorber->getTableList() et parcourez-les.
- Si la table se trouve dans la région, procédez comme suit :
- Parcourez les lignes de AbsorbedTable en utilisant la méthode AbsorbedTable->getRowList().
- Pour chaque AbsorbedRow, parcourez les cellules à l’aide de la méthode AbsorbedRow->getCellList().
- Obtenez TextFragmentCollection pour chaque AbsorbedCell en utilisant la méthode AbsorbedCell->getTextFragments() et parcourez-la en boucle.
- Obtenez TextSegmentCollection pour chaque TextFragment à l’aide de la méthode TextFragment->getSegments() et parcourez-la en boucle.
- Récupérez le texte de chaque TextSegment et imprimez-le.
L’exemple de code suivant montre comment extraire des données d’un tableau dans une zone spécifique d’une page PDF à l’aide de C++.
// Charger le document PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");
// Obtenir la première page du document
auto page = pdfDocument->get_Pages()->idx_get(1);
// Parcourir les annotations sur la page
for (auto annotation : page->get_Annotations())
{
// Vérifier le type d'annotation
if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
{
System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);
// Créer une instance de la classe TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Itérer dans les tables
for (auto table : absorber->get_TableList())
{
// Vérifiez si la table est dans la région
if ((squareAnnotation->get_Rect()->get_LLX() < table->get_Rectangle()->get_LLX()) &&
(squareAnnotation->get_Rect()->get_LLY() < table->get_Rectangle()->get_LLY()) &&
(squareAnnotation->get_Rect()->get_URX() > table->get_Rectangle()->get_URX()) &&
(squareAnnotation->get_Rect()->get_URY() > table->get_Rectangle()->get_URY())
)
{
// Itérer dans les lignes
for (auto row : table->get_RowList())
{
// Itérer dans les cellules
for (auto cell : row->get_CellList())
{
// Itérer à travers les fragments de texte
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Parcourir les segments de texte
for (auto seg : fragment->get_Segments())
{
// Obtenir le texte
string = String::Concat(string, seg->get_Text());
}
// Imprimer le texte
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
break;
}
}
Obtenez une licence gratuite
Afin d’essayer l’API sans limitation d’évaluation, vous pouvez demander une licence temporaire gratuite.
Conclusion
Dans cet article, vous avez appris à extraire des données de tableaux PDF à l’aide de C++. De plus, vous avez appris à extraire des données d’un tableau dans une région spécifique de la page PDF. L’API Aspose.PDF for C++ fournit de nombreuses fonctionnalités supplémentaires pour travailler avec des fichiers PDF. Vous pouvez explorer l’API en détail en visitant la documentation officielle. En cas de questions, n’hésitez pas à nous contacter sur notre forum d’assistance gratuit.