Soubory PDF jsou standardním formátem pro výměnu dokumentů přes internet. Dokumenty, jako jsou faktury a příručky k produktům, jsou obvykle sdíleny ve formě PDF. Mohou nastat situace, kdy máte více faktur obsahujících tabulková data, která potřebujete extrahovat a dále zpracovávat. Bude efektivnější extrahovat tato data programově. Za tímto účelem vás tento článek naučí, jak extrahovat data z tabulek PDF pomocí C++.
- C++ API pro extrahování dat z tabulek v souborech PDF
- Extrahujte data z tabulek PDF pomocí C++
- Extrahujte data z tabulky v určité oblasti stránky PDF
C++ API pro extrahování dat z tabulek v souborech PDF
Aspose.PDF for C++ je knihovna C++, která umožňuje vytvářet, číst a aktualizovat soubory PDF. Kromě toho API podporuje extrahování dat z tabulek v souborech PDF. Rozhraní API můžete nainstalovat buď prostřednictvím NuGet, nebo si jej stáhnout přímo ze sekce stahování.
PM> Install-Package Aspose.PDF.Cpp
Extrahujte data z tabulek PDF pomocí C++
Následují kroky k extrahování dat z tabulek PDF.
- Načtěte dokument PDF pomocí třídy Document.
- Procházejte stránky dokumentu pomocí metody Document->getPages().
- V každé iteraci vytvořte instanci třídy TableAbsorber a určete stránku pro extrahování tabulek pomocí TableAbsorber->Visit(System::SharedPtr strana) metoda.
- Získejte tabulky pomocí metody TableAbsorber->getTableList() a iterujte je.
- Pro každou AbsorbedTable iterujte řádky pomocí metody AbsorbedTable->getRowList().
- Pro každý AbsorbedRow iterujte přes buňky pomocí metody AbsorbedRow->getCellList().
- Získejte TextFragmentCollection pro každou AbsorbedCell pomocí metody AbsorbedCell->getTextFragments() a projděte ji.
- Získejte TextSegmentCollection pro každý TextFragment pomocí metody TextFragment->getSegments() a projděte ji.
- Načtěte text z každého TextSegment a vytiskněte jej.
Následující ukázkový kód ukazuje, jak extrahovat data z tabulek PDF pomocí C++.
// Načtěte dokument PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");
// Procházejte stránky dokumentu
for (auto page : pdfDocument->get_Pages())
{
// Vytvořte instanci třídy TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Iterujte tabulky
for (auto table : absorber->get_TableList())
{
Console::WriteLine(u"Table");
// Procházejte řádky
for (auto row : table->get_RowList())
{
// Iterujte přes buňky
for (auto cell : row->get_CellList())
{
// Iterujte fragmenty textu
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Procházejte textovými segmenty
for (auto seg : fragment->get_Segments())
{
// Získejte text
string = String::Concat(string, seg->get_Text());
}
// Vytiskněte text
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
Extrahujte data z tabulky v určité oblasti stránky PDF
Chcete-li extrahovat data z tabulky v určité oblasti stránky PDF, postupujte podle níže uvedených kroků.
- Načtěte dokument PDF pomocí třídy Document.
- Načtěte stránku obsahující tabulku pomocí metody Document->getPages()->idxget(int32t index).
- Projděte si anotace a získejte čtvercovou anotaci.
- Vytvořte instanci třídy TableAbsorber a určete stránku pro extrahování tabulek pomocí TableAbsorber->Visit(System::SharedPtr strana) metoda.
- Získejte tabulky pomocí metody TableAbsorber->getTableList() a iterujte je.
- Pokud je tabulka v oblasti, proveďte následující kroky:
- Iterujte řádky AbsorbedTable pomocí metody AbsorbedTable->getRowList().
- Pro každý AbsorbedRow iterujte přes buňky pomocí metody AbsorbedRow->getCellList().
- Získejte TextFragmentCollection pro každou AbsorbedCell pomocí metody AbsorbedCell->getTextFragments() a projděte ji.
- Získejte TextSegmentCollection pro každý TextFragment pomocí metody TextFragment->getSegments() a projděte ji.
- Načtěte text z každého TextSegment a vytiskněte jej.
Následující ukázkový kód ukazuje, jak extrahovat data z tabulky v určité oblasti stránky PDF pomocí C++.
// Načtěte dokument PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");
// Získejte první stránku dokumentu
auto page = pdfDocument->get_Pages()->idx_get(1);
// Procházejte poznámky na stránce
for (auto annotation : page->get_Annotations())
{
// Zkontrolujte typ anotace
if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
{
System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);
// Vytvořte instanci třídy TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Iterujte tabulky
for (auto table : absorber->get_TableList())
{
// Zkontrolujte, zda je stůl v regionu
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())
)
{
// Procházejte řádky
for (auto row : table->get_RowList())
{
// Iterujte přes buňky
for (auto cell : row->get_CellList())
{
// Iterujte fragmenty textu
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Procházejte textovými segmenty
for (auto seg : fragment->get_Segments())
{
// Získejte text
string = String::Concat(string, seg->get_Text());
}
// Vytiskněte text
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
break;
}
}
Získejte bezplatnou licenci
Abyste mohli API vyzkoušet bez omezení hodnocení, můžete požádat o bezplatnou dočasnou licenci.
Závěr
V tomto článku jste se naučili extrahovat data z tabulek PDF pomocí C++. Navíc jste se naučili, jak extrahovat data z tabulky v určité oblasti stránky PDF. Aspose.PDF for C++ API poskytuje mnoho dalších funkcí pro práci se soubory PDF. Rozhraní API můžete podrobně prozkoumat na oficiální dokumentaci. V případě jakýchkoli dotazů nás neváhejte kontaktovat na našem bezplatném fóru podpory.