فایلها PDF فرمت استانداردی برای تبادل اسناد از طریق اینترنت هستند. اسنادی مانند فاکتورها و راهنمای محصول معمولاً در قالب PDF به اشتراک گذاشته می شوند. ممکن است شرایطی وجود داشته باشد که چندین فاکتور حاوی داده های جدولی داشته باشید که باید آنها را استخراج و پردازش کنید. استخراج این داده ها به صورت برنامه نویسی کارآمدتر خواهد بود. برای این منظور، این مقاله به شما آموزش می دهد که چگونه داده ها را از جداول PDF با استفاده از C++ استخراج کنید.
- C++ API برای استخراج داده ها از جداول در فایل های PDF
- استخراج داده ها از جداول PDF با استفاده از ++C
- استخراج داده ها از یک جدول در یک منطقه خاص از یک صفحه PDF
C++ API برای استخراج داده ها از جداول در فایل های PDF
Aspose.PDF for C++ یک کتابخانه C++ است که به شما امکان می دهد فایل های PDF را ایجاد، بخوانید و به روز کنید. علاوه بر این، API از استخراج داده ها از جداول در فایل های PDF پشتیبانی می کند. میتوانید API را از طریق NuGet نصب کنید یا آن را مستقیماً از بخش دانلودها دانلود کنید.
PM> Install-Package Aspose.PDF.Cpp
استخراج داده ها از جداول PDF با استفاده از ++C
در زیر مراحل استخراج داده ها از جداول PDF آمده است.
- سند PDF را با استفاده از کلاس Document بارگیری کنید.
- با استفاده از روش Document->getPages() در صفحات سند تکرار کنید.
- در هر تکرار، یک نمونه از کلاس TableAbsorber ایجاد کنید و صفحه ای را برای استخراج جداول با استفاده از TableAbsorber->Visit(System::SharedPtr مشخص کنید. صفحه) روش.
- جداول را با استفاده از روش TableAbsorber->getTableList() دریافت کنید و روی آنها تکرار کنید.
- برای هر AbsorbedTable، سطرها را با استفاده از روش AbsorbedTable->getRowList() تکرار کنید.
- برای هر AbsorbedRow، با استفاده از روش AbsorbedRow->getCellList() در سلول ها تکرار کنید.
- TextFragmentCollection را برای هر AbsorbedCell با استفاده از روش AbsorbedCell->getTextFragments() دریافت کنید و از طریق آن حلقه بزنید.
- TextSegmentCollection را برای هر TextFragment با استفاده از روش TextFragment->getSegments() دریافت کنید و از طریق آن حلقه بزنید.
- متن را از هر TextSegment بازیابی کنید و آن را چاپ کنید.
کد نمونه زیر نحوه استخراج داده ها از جداول PDF را با استفاده از C++ نشان می دهد.
// سند PDF را بارگیری کنید
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");
// از طریق صفحات سند تکرار کنید
for (auto page : pdfDocument->get_Pages())
{
// یک نمونه از کلاس TableAbsorber ایجاد کنید
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// از طریق جداول تکرار کنید
for (auto table : absorber->get_TableList())
{
Console::WriteLine(u"Table");
// در ردیف ها تکرار کنید
for (auto row : table->get_RowList())
{
// در سلول ها تکرار کنید
for (auto cell : row->get_CellList())
{
// در قطعات متن تکرار کنید
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// در بخش های متنی تکرار کنید
for (auto seg : fragment->get_Segments())
{
// متن را دریافت کنید
string = String::Concat(string, seg->get_Text());
}
// متن را چاپ کنید
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
استخراج داده ها از یک جدول در یک منطقه خاص از یک صفحه PDF
برای استخراج داده ها از یک جدول در یک منطقه خاص از صفحه PDF، لطفاً مراحل زیر را دنبال کنید.
- سند PDF را با استفاده از کلاس Document بارگیری کنید.
- صفحه حاوی جدول را با استفاده از روش Document->getPages()->idxget(int32t index) بازیابی کنید.
- از طریق حاشیه نویسی حلقه بزنید و حاشیه نویسی مربع را دریافت کنید.
- نمونه ای از کلاس TableAbsorber ایجاد کنید و صفحه ای را برای استخراج جداول با استفاده از TableAbsorber->Visit(System::SharedPtr مشخص کنید. صفحه) روش.
- جداول را با استفاده از روش TableAbsorber->getTableList() دریافت کنید و روی آنها تکرار کنید.
- اگر جدول در منطقه است، مراحل زیر را انجام دهید:
- با استفاده از روش AbsorbedTable->getRowList() در ردیف های AbsorbedTable تکرار کنید.
- برای هر AbsorbedRow، با استفاده از روش AbsorbedRow->getCellList() در سلول ها تکرار کنید.
- TextFragmentCollection را برای هر AbsorbedCell با استفاده از روش AbsorbedCell->getTextFragments() دریافت کنید و از طریق آن حلقه بزنید.
- TextSegmentCollection را برای هر TextFragment با استفاده از روش TextFragment->getSegments() دریافت کنید و از طریق آن حلقه بزنید.
- متن را از هر TextSegment بازیابی کنید و آن را چاپ کنید.
کد نمونه زیر نحوه استخراج داده ها از یک جدول در یک منطقه خاص از صفحه PDF را با استفاده از C++ نشان می دهد.
// سند PDF را بارگیری کنید
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");
// صفحه اول سند را دریافت کنید
auto page = pdfDocument->get_Pages()->idx_get(1);
// از طریق حاشیه نویسی در صفحه تکرار کنید
for (auto annotation : page->get_Annotations())
{
// نوع حاشیه نویسی را بررسی کنید
if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
{
System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);
// یک نمونه از کلاس TableAbsorber ایجاد کنید
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// از طریق جداول تکرار کنید
for (auto table : absorber->get_TableList())
{
// بررسی کنید که آیا جدول در منطقه است
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())
)
{
// در ردیف ها تکرار کنید
for (auto row : table->get_RowList())
{
// در سلول ها تکرار کنید
for (auto cell : row->get_CellList())
{
// در قطعات متن تکرار کنید
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// در بخش های متنی تکرار کنید
for (auto seg : fragment->get_Segments())
{
// متن را دریافت کنید
string = String::Concat(string, seg->get_Text());
}
// متن را چاپ کنید
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
break;
}
}
مجوز رایگان دریافت کنید
برای امتحان کردن API بدون محدودیت ارزیابی، می توانید [مجوز موقت رایگان] را درخواست کنید.
نتیجه
در این مقاله نحوه استخراج داده ها از جداول PDF با استفاده از C++ را آموختید. علاوه بر این، شما یاد گرفته اید که چگونه داده ها را از یک جدول در یک منطقه خاص از صفحه PDF استخراج کنید. Aspose.PDF for C++ API بسیاری از ویژگی های اضافی را برای کار با فایل های PDF فراهم می کند. میتوانید با مراجعه به مستندات رسمی API را با جزئیات بررسی کنید. در صورت وجود هرگونه سوال، لطفاً در [تالار گفتمان پشتیبانی رایگان39 ما با ما تماس بگیرید.