PDF dosyaları, internet üzerinden belge alışverişi için standart bir biçimdir. Faturalar ve ürün kılavuzları gibi belgeler genellikle PDF biçiminde paylaşılır. Çıkarmanız ve daha fazla işlemeniz gereken tablo verilerini içeren birden çok faturanızın olduğu durumlar olabilir. Bu verileri programlı olarak çıkarmak daha verimli olacaktır. Bu amaçla, bu makale size C++ kullanarak PDF tablolarından nasıl veri çıkaracağınızı öğretecektir.
- PDF Dosyalarındaki Tablolardan Veri Çıkarmak için C++ API
- C++ kullanarak PDF Tablolarından Veri Çıkarma
- Bir PDF Sayfasının Belirli Bir Alanındaki Tablodan Veri Çıkarma
PDF Dosyalarındaki Tablolardan Veri Çıkarmak için C++ API
Aspose.PDF for C++, PDF dosyaları oluşturmanıza, okumanıza ve güncellemenize olanak tanıyan bir C++ kitaplığıdır. Ayrıca API, PDF dosyalarındaki tablolardan veri çıkarmayı destekler. API’yi NuGet aracılığıyla yükleyebilir veya doğrudan indirilenler bölümünden indirebilirsiniz.
PM> Install-Package Aspose.PDF.Cpp
C++ kullanarak PDF Tablolarından Veri Çıkarma
Aşağıdakiler, PDF tablolarından veri ayıklama adımlarıdır.
- Belge sınıfını kullanarak PDF belgesini yükleyin.
- Document->getPages() yöntemini kullanarak belgenin sayfalarını yineleyin.
- Her yinelemede, TableAbsorber sınıfının bir örneğini oluşturun ve TableAbsorber->Visit(System::SharedPtr) kullanarak tabloların ayıklanacağı sayfayı belirtin. sayfa) yöntemi.
- TableAbsorber->getTableList() yöntemini kullanarak tabloları alın ve üzerlerinde yineleme yapın.
- Her AbsorbedTable için, AbsorbedTable->getRowList() yöntemini kullanarak satırları yineleyin.
- Her AbsorbedRow için, AbsorbedRow->getCellList() yöntemini kullanarak hücreler arasında yineleme yapın.
- AbsorbedCell->getTextFragments() yöntemini kullanarak her AbsorbedCell için TextFragmentCollection alın ve içinden döngü yapın.
- TextFragment->getSegments() yöntemini kullanarak her TextFragment için TextSegmentCollection alın ve bunun üzerinden döngü yapın.
- Her TextSegment‘den metni alın ve yazdırın.
Aşağıdaki örnek kod, C++ kullanarak PDF tablolarından nasıl veri çıkarılacağını gösterir.
// PDF belgesini yükleyin
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");
// Belgenin sayfalarını yineleyin
for (auto page : pdfDocument->get_Pages())
{
// TableAbsorber sınıfının bir örneğini oluşturun
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Tablolar arasında yineleme yapın
for (auto table : absorber->get_TableList())
{
Console::WriteLine(u"Table");
// Satırları yinele
for (auto row : table->get_RowList())
{
// Hücreler arasında yineleme
for (auto cell : row->get_CellList())
{
// Metin parçalarını yineleyin
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Metin segmentlerini yineleyin
for (auto seg : fragment->get_Segments())
{
// metni al
string = String::Concat(string, seg->get_Text());
}
// metni yazdır
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
Bir PDF Sayfasının Belirli Bir Alanındaki Tablodan Veri Çıkarma
Bir PDF sayfasının belirli bir alanındaki bir tablodan veri çıkarmak için lütfen aşağıda verilen adımları izleyin.
- Belge sınıfını kullanarak PDF belgesini yükleyin.
- Document->getPages()->idxget(int32t index) yöntemini kullanarak tabloyu içeren sayfayı alın.
- Açıklamalar arasında dolaşın ve kare açıklamayı alın.
- TableAbsorber sınıfının bir örneğini oluşturun ve TableAbsorber->Visit(System::SharedPtr) kullanarak tabloların ayıklanacağı sayfayı belirtin sayfa) yöntemi.
- TableAbsorber->getTableList() yöntemini kullanarak tabloları alın ve üzerlerinde yineleme yapın.
- Tablo bölgedeyse, aşağıdaki adımları gerçekleştirin:
- AbsorbedTable satırlarını AbsorbedTable->getRowList() yöntemini kullanarak yineleyin.
- Her AbsorbedRow için, AbsorbedRow->getCellList() yöntemini kullanarak hücreler arasında yineleme yapın.
- AbsorbedCell->getTextFragments() yöntemini kullanarak her AbsorbedCell için TextFragmentCollection alın ve içinden döngü yapın.
- TextFragment->getSegments() yöntemini kullanarak her TextFragment için TextSegmentCollection alın ve bunun üzerinden döngü yapın.
- Her bir TextSegment öğesinden metni alın ve yazdırın.
Aşağıdaki örnek kod, C++ kullanarak bir PDF sayfasının belirli bir alanındaki bir tablodan nasıl veri çıkarılacağını gösterir.
// PDF belgesini yükleyin
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");
// Belgenin ilk sayfasını alın
auto page = pdfDocument->get_Pages()->idx_get(1);
// Sayfadaki ek açıklamaları yineleyin
for (auto annotation : page->get_Annotations())
{
// Ek açıklama türünü kontrol edin
if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
{
System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);
// TableAbsorber sınıfının bir örneğini oluşturun
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Tablolar arasında yineleme yapın
for (auto table : absorber->get_TableList())
{
// Tablonun bölgede olup olmadığını kontrol edin
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())
)
{
// Satırları yinele
for (auto row : table->get_RowList())
{
// Hücreler arasında yineleme
for (auto cell : row->get_CellList())
{
// Metin parçalarını yineleyin
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Metin segmentlerini yineleyin
for (auto seg : fragment->get_Segments())
{
// metni al
string = String::Concat(string, seg->get_Text());
}
// metni yazdır
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
break;
}
}
Ücretsiz Lisans Alın
API’yi değerlendirme kısıtlamaları olmadan denemek için [ücretsiz bir geçici lisans] talep edebilirsiniz37.
Çözüm
Bu makalede, C++ kullanarak PDF tablolarından nasıl veri çıkarılacağını öğrendiniz. Ayrıca, PDF sayfasının belirli bir bölgesindeki bir tablodan nasıl veri çıkarılacağını öğrendiniz. Aspose.PDF for C++ API, PDF dosyalarıyla çalışmak için birçok ek özellik sağlar. Resmi belgeleri ziyaret ederek API’yi ayrıntılı olarak inceleyebilirsiniz. Herhangi bir sorunuz olması durumunda lütfen ücretsiz destek forumumuzdan bize ulaşmaktan çekinmeyin.