I file PDF sono un formato standard per lo scambio di documenti su Internet. Documenti come fatture e guide ai prodotti sono generalmente condivisi sotto forma di PDF. Potrebbero esserci situazioni in cui hai più fatture contenenti dati tabulari che devi estrarre ed elaborare ulteriormente. Sarà più efficiente estrarre questi dati a livello di codice. A tal fine, questo articolo ti insegnerà come estrarre i dati dalle tabelle PDF utilizzando C++.
- API C++ per estrarre dati da tabelle in file PDF
- Estrai dati da tabelle PDF usando C++
- Estrai dati da una tabella in un’area specifica di una pagina PDF
API C++ per estrarre dati da tabelle in file PDF
Aspose.PDF for C++ è una libreria C++ che consente di creare, leggere e aggiornare file PDF. Inoltre, l’API supporta l’estrazione di dati dalle tabelle nei file PDF. Puoi installare l’API tramite NuGet o scaricarla direttamente dalla sezione download.
PM> Install-Package Aspose.PDF.Cpp
Estrai dati da tabelle PDF usando C++
Di seguito sono riportati i passaggi per estrarre i dati dalle tabelle PDF.
- Carica il documento PDF utilizzando la classe Document.
- Scorri le pagine del documento usando il metodo Document->getPages().
- In ogni iterazione, crea un’istanza della classe TableAbsorber e specifica la pagina per estrarre le tabelle usando TableAbsorber->Visit(System::SharedPtr pagina).
- Ottieni le tabelle usando il metodo TableAbsorber->getTableList() e ripeti su di esse.
- Per ogni AbsorbedTable, scorrere le righe utilizzando il metodo AbsorbedTable->getRowList().
- Per ogni AbsorbedRow, scorrere le celle utilizzando il metodo AbsorbedRow->getCellList().
- Ottieni TextFragmentCollection per ogni AbsorbedCell usando il metodo AbsorbedCell->getTextFragments() e scorrelo.
- Ottieni TextSegmentCollection per ogni TextFragment usando il metodo TextFragment->getSegments() e scorrelo.
- Recupera il testo da ogni TextSegment e stampalo.
Il codice di esempio seguente mostra come estrarre i dati dalle tabelle PDF usando C++.
// Carica il documento PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");
// Scorri le pagine del documento
for (auto page : pdfDocument->get_Pages())
{
// Crea un'istanza della classe TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Scorri le tabelle
for (auto table : absorber->get_TableList())
{
Console::WriteLine(u"Table");
// Scorri le righe
for (auto row : table->get_RowList())
{
// Iterare attraverso le celle
for (auto cell : row->get_CellList())
{
// Scorri i frammenti di testo
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Scorri i segmenti di testo
for (auto seg : fragment->get_Segments())
{
// Ottieni il testo
string = String::Concat(string, seg->get_Text());
}
// Stampa il testo
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
Estrai dati da una tabella in un’area specifica di una pagina PDF
Per estrarre i dati da una tabella in un’area specifica di una pagina PDF, seguire i passaggi indicati di seguito.
- Carica il documento PDF utilizzando la classe Document.
- Recupera la pagina contenente la tabella utilizzando il metodo Document->getPages()->idxget(int32t index).
- Scorri le annotazioni e ottieni l’annotazione quadrata.
- Crea un’istanza della classe TableAbsorber e specifica la pagina per estrarre le tabelle usando TableAbsorber->Visit(System::SharedPtr pagina) metodo.
- Ottieni le tabelle usando il metodo TableAbsorber->getTableList() e ripeti su di esse.
- Se la tabella si trova nella regione, attenersi alla seguente procedura:
- Scorri le righe di AbsorbedTable usando il metodo AbsorbedTable->getRowList().
- Per ogni AbsorbedRow, scorrere le celle utilizzando il metodo AbsorbedRow->getCellList().
- Ottieni TextFragmentCollection per ogni AbsorbedCell usando il metodo AbsorbedCell->getTextFragments() e scorrelo.
- Ottieni TextSegmentCollection per ogni TextFragment usando il metodo TextFragment->getSegments() e scorrelo.
- Recupera il testo da ogni TextSegment e stampalo.
Il codice di esempio seguente mostra come estrarre i dati da una tabella in un’area specifica di una pagina PDF usando C++.
// Carica il documento PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");
// Ottieni la prima pagina del documento
auto page = pdfDocument->get_Pages()->idx_get(1);
// Scorri le annotazioni sulla pagina
for (auto annotation : page->get_Annotations())
{
// Controlla il tipo di annotazione
if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
{
System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);
// Crea un'istanza della classe TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Scorri le tabelle
for (auto table : absorber->get_TableList())
{
// Controlla se il tavolo è nella regione
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())
)
{
// Scorri le righe
for (auto row : table->get_RowList())
{
// Iterare attraverso le celle
for (auto cell : row->get_CellList())
{
// Scorri i frammenti di testo
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Scorri i segmenti di testo
for (auto seg : fragment->get_Segments())
{
// Ottieni il testo
string = String::Concat(string, seg->get_Text());
}
// Stampa il testo
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
break;
}
}
Ottieni una licenza gratuita
Per provare l’API senza limitazioni di valutazione, puoi richiedere una licenza temporanea gratuita.
Conclusione
In questo articolo, hai imparato come estrarre i dati dalle tabelle PDF usando C++. Inoltre, hai imparato come estrarre i dati da una tabella in un’area specifica della pagina PDF. L’API Aspose.PDF per C++ offre molte funzionalità aggiuntive per lavorare con i file PDF. Puoi esplorare l’API in dettaglio visitando la documentazione ufficiale. In caso di domande, non esitare a contattarci sul nostro forum di supporto gratuito.