PDF-filer är ett standardformat för utbyte av dokument över internet. Dokument som fakturor och produktguider delas vanligtvis i form av PDF-filer. Det kan finnas situationer där du har flera fakturor som innehåller tabelldata som du behöver extrahera och bearbeta vidare. Det kommer att vara mer effektivt att extrahera denna data programmatiskt. För detta ändamål kommer den här artikeln att lära dig hur du extraherar data från PDF-tabeller med C++.
- C++ API för att extrahera data från tabeller i PDF-filer
- Extrahera data från PDF-tabeller med C++
- Extrahera data från en tabell i ett specifikt område på en PDF-sida
C++ API för att extrahera data från tabeller i PDF-filer
Aspose.PDF for C++ är ett C++-bibliotek som låter dig skapa, läsa och uppdatera PDF-filer. Dessutom stöder API:et extrahering av data från tabeller i PDF-filer. Du kan antingen installera API:t genom NuGet eller ladda ner det direkt från avsnittet downloads.
PM> Install-Package Aspose.PDF.Cpp
Extrahera data från PDF-tabeller med C++
Följande är stegen för att extrahera data från PDF-tabeller.
- Ladda PDF-dokumentet med klassen Document.
- Iterera genom dokumentets sidor med metoden Document->getPages().
- Skapa en instans av klassen TableAbsorber i varje iteration och ange sidan för att extrahera tabeller med hjälp av TableAbsorber->Visit(System::SharedPtr) sida) metod.
- Hämta tabellerna med metoden TableAbsorber->getTableList() och iterera över dem.
- För varje AbsorbedTable, iterera genom raderna med metoden AbsorbedTable->getRowList().
- För varje AbsorbedRow, iterera genom cellerna med metoden AbsorbedRow->getCellList().
- Hämta TextFragmentCollection för varje AbsorbedCell med metoden AbsorbedCell->getTextFragments() och gå igenom den.
- Hämta TextSegmentCollection för varje TextFragment med metoden TextFragment->getSegments() och gå igenom den.
- Hämta texten från varje TextSegment och skriv ut den.
Följande exempelkod visar hur man extraherar data från PDF-tabeller med C++.
// Ladda PDF-dokumentet
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");
// Iterera genom dokumentets sidor
for (auto page : pdfDocument->get_Pages())
{
// Skapa en instans av klassen TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Iterera genom tabellerna
for (auto table : absorber->get_TableList())
{
Console::WriteLine(u"Table");
// Iterera genom raderna
for (auto row : table->get_RowList())
{
// Iterera genom cellerna
for (auto cell : row->get_CellList())
{
// Iterera genom textfragmenten
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Iterera genom textsegmenten
for (auto seg : fragment->get_Segments())
{
// Få texten
string = String::Concat(string, seg->get_Text());
}
// Skriv ut texten
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
Extrahera data från en tabell i ett specifikt område på en PDF-sida
För att extrahera data från en tabell i ett specifikt område på en PDF-sida, följ stegen nedan.
- Ladda PDF-dokumentet med klassen Document.
- Hämta sidan som innehåller tabellen med metoden Document->getPages()->idxget(int32t index).
- Gå igenom anteckningarna och hämta den fyrkantiga anteckningen.
- Skapa en instans av klassen TableAbsorber och ange sidan för att extrahera tabeller med hjälp av TableAbsorber->Visit(System::SharedPtr) sida) metod.
- Hämta tabellerna med metoden TableAbsorber->getTableList() och iterera över dem.
- Om tabellen är i regionen, utför följande steg:
- Iterera genom raderna i AbsorbedTable med metoden AbsorbedTable->getRowList().
- För varje AbsorbedRow, iterera genom cellerna med metoden AbsorbedRow->getCellList().
- Hämta TextFragmentCollection för varje AbsorbedCell med metoden AbsorbedCell->getTextFragments() och gå igenom den.
- Hämta TextSegmentCollection för varje TextFragment med metoden TextFragment->getSegments() och gå igenom den.
- Hämta texten från varje TextSegment och skriv ut den.
Följande exempelkod visar hur man extraherar data från en tabell i ett specifikt område på en PDF-sida med C++.
// Ladda PDF-dokumentet
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");
// Hämta den första sidan av dokumentet
auto page = pdfDocument->get_Pages()->idx_get(1);
// Iterera genom kommentarerna på sidan
for (auto annotation : page->get_Annotations())
{
// Kontrollera anteckningstypen
if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
{
System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);
// Skapa en instans av klassen TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Iterera genom tabellerna
for (auto table : absorber->get_TableList())
{
// Kontrollera om tabellen är i regionen
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())
)
{
// Iterera genom raderna
for (auto row : table->get_RowList())
{
// Iterera genom cellerna
for (auto cell : row->get_CellList())
{
// Iterera genom textfragmenten
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Iterera genom textsegmenten
for (auto seg : fragment->get_Segments())
{
// Få texten
string = String::Concat(string, seg->get_Text());
}
// Skriv ut texten
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
break;
}
}
Skaffa en gratis licens
För att prova API:et utan utvärderingsbegränsningar kan du begära en gratis tillfällig licens.
Slutsats
I den här artikeln har du lärt dig hur du extraherar data från PDF-tabeller med C++. Dessutom har du lärt dig hur du extraherar data från en tabell i en specifik region på PDF-sidan. Aspose.PDF för C++ API ger många ytterligare funktioner för att arbeta med PDF-filer. Du kan utforska API:et i detalj genom att besöka den officiella dokumentationen. Om du har några frågor är du välkommen att kontakta oss på vårt gratis supportforum.