PDF Dateien sind ein Standardformat für den Austausch von Dokumenten über das Internet. Dokumente wie Rechnungen und Produkthandbücher werden normalerweise in Form von PDFs geteilt. Es kann Situationen geben, in denen Sie mehrere Rechnungen mit tabellarischen Daten haben, die Sie extrahieren und weiterverarbeiten müssen. Es ist effizienter, diese Daten programmgesteuert zu extrahieren. Zu diesem Zweck lernen Sie in diesem Artikel, wie Sie mit C++ Daten aus PDF-Tabellen extrahieren.
- C++-API zum Extrahieren von Daten aus Tabellen in PDF Dateien
- Extrahieren Sie Daten aus PDF-Tabellen mit C++
- Extrahieren Sie Daten aus einer Tabelle in einem bestimmten Bereich einer PDF-Seite
C++-API zum Extrahieren von Daten aus Tabellen in PDF Dateien
Aspose.PDF for C++ ist eine C++ Bibliothek, mit der Sie PDF Dateien erstellen, lesen und aktualisieren können. Darüber hinaus unterstützt die API das Extrahieren von Daten aus Tabellen in PDF Dateien. Sie können die API entweder über NuGet installieren oder direkt aus dem Abschnitt downloads herunterladen.
PM> Install-Package Aspose.PDF.Cpp
Extrahieren Sie Daten aus PDF-Tabellen mit C++
Im Folgenden sind die Schritte zum Extrahieren von Daten aus PDF-Tabellen aufgeführt.
- Laden Sie das PDF Dokument mit der Klasse Document.
- Durchlaufen Sie die Seiten des Dokuments mit der methode Document->getPages().
- Erstellen Sie in jeder Iteration eine Instanz der Klasse TableAbsorber und geben Sie die Seite zum Extrahieren von Tabellen mit TableAbsorber->Visit(System::SharedPtr Seite) Methode.
- Rufen Sie die Tabellen mit der methode TableAbsorber->getTableList() ab und durchlaufen Sie sie.
- Durchlaufen Sie für jede AbsorbedTable die Zeilen mit der methode AbsorbedTable->getRowList().
- Durchlaufen Sie für jede AbsorbedRow die Zellen mit der methode AbsorbedRow->getCellList().
- Rufen Sie TextFragmentCollection für jede AbsorbedCell mit der methode AbsorbedCell->getTextFragments() ab und durchlaufen Sie sie.
- Rufen Sie TextSegmentCollection für jedes TextFragment mit der methode TextFragment->getSegments() ab und durchlaufen Sie es.
- Rufen Sie den Text von jedem TextSegment ab und drucken Sie ihn aus.
Der folgende Beispielcode zeigt, wie Daten aus PDF-Tabellen mit C++ extrahiert werden.
// Laden Sie das PDF Dokument
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");
// Durchlaufen Sie die Seiten des Dokuments
for (auto page : pdfDocument->get_Pages())
{
// Erstellen Sie eine Instanz der TableAbsorber Klasse
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Iterieren Sie durch die Tabellen
for (auto table : absorber->get_TableList())
{
Console::WriteLine(u"Table");
// Iteriere durch die Zeilen
for (auto row : table->get_RowList())
{
// Iteriere durch die Zellen
for (auto cell : row->get_CellList())
{
// Iteriere durch die Textfragmente
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Iterieren Sie durch die Textsegmente
for (auto seg : fragment->get_Segments())
{
// Holen Sie sich den Text
string = String::Concat(string, seg->get_Text());
}
// Drucken Sie den Text aus
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
Extrahieren Sie Daten aus einer Tabelle in einem bestimmten Bereich einer PDF-Seite
Um Daten aus einer Tabelle in einem bestimmten Bereich einer PDF-Seite zu extrahieren, befolgen Sie bitte die unten angegebenen Schritte.
- Laden Sie das PDF Dokument mit der Klasse Document.
- Rufen Sie die Seite mit der Tabelle mit der methode Document->getPages()->idxget(int32t index) ab.
- Durchlaufen Sie die Anmerkungen und erhalten Sie die quadratische Anmerkung.
- Erstellen Sie eine Instanz der Klasse TableAbsorber und geben Sie die Seite zum Extrahieren von Tabellen mit TableAbsorber->Visit(System::SharedPtr Seite) Methode.
- Rufen Sie die Tabellen mit der methode TableAbsorber->getTableList() ab und durchlaufen Sie sie.
- Wenn sich die Tabelle in der Region befindet, führen Sie die folgenden Schritte aus:
- Durchlaufen Sie die Zeilen der AbsorbedTable mit der methode AbsorbedTable->getRowList().
- Durchlaufen Sie für jede AbsorbedRow die Zellen mit der methode AbsorbedRow->getCellList().
- Rufen Sie TextFragmentCollection für jede AbsorbedCell mit der methode AbsorbedCell->getTextFragments() ab und durchlaufen Sie sie.
- Rufen Sie TextSegmentCollection für jedes TextFragment mit der methode TextFragment->getSegments() ab und durchlaufen Sie es.
- Rufen Sie den Text von jedem TextSegment ab und drucken Sie ihn aus.
Der folgende Beispielcode zeigt, wie Daten aus einer Tabelle in einem bestimmten Bereich einer PDF-Seite mit C++ extrahiert werden.
// Laden Sie das PDF Dokument
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");
// Holen Sie sich die erste Seite des Dokuments
auto page = pdfDocument->get_Pages()->idx_get(1);
// Durchlaufen Sie die Anmerkungen auf der Seite
for (auto annotation : page->get_Annotations())
{
// Überprüfen Sie den Anmerkungstyp
if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
{
System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);
// Erstellen Sie eine Instanz der TableAbsorber Klasse
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Iterieren Sie durch die Tabellen
for (auto table : absorber->get_TableList())
{
// Überprüfen Sie, ob sich die Tabelle in der Region befindet
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())
)
{
// Iteriere durch die Zeilen
for (auto row : table->get_RowList())
{
// Iteriere durch die Zellen
for (auto cell : row->get_CellList())
{
// Iteriere durch die Textfragmente
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Iterieren Sie durch die Textsegmente
for (auto seg : fragment->get_Segments())
{
// Holen Sie sich den Text
string = String::Concat(string, seg->get_Text());
}
// Drucken Sie den Text aus
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
break;
}
}
Holen Sie sich eine kostenlose Lizenz
Um die API ohne Evaluierungseinschränkungen zu testen, können Sie eine kostenlose temporäre Lizenz anfordern.
Fazit
In diesem Artikel haben Sie gelernt, wie Sie mit C++ Daten aus PDF-Tabellen extrahieren. Außerdem haben Sie gelernt, wie Sie Daten aus einer Tabelle in einem bestimmten Bereich der PDF-Seite extrahieren. Aspose.PDF for C++ API bietet viele zusätzliche Funktionen für die Arbeit mit PDF Dateien. Sie können die API im Detail erkunden, indem Sie die offizielle Dokumentation besuchen. Bei Fragen können Sie uns gerne in unserem kostenlosen Support-Forum erreichen.