קבצי 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->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->getPages()->idxget(int32t index).
- עברו בלולאה בין ההערות וקבלו את ההערה המרובעת.
- צור מופע של המחלקה 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_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 בפירוט על ידי ביקור בתיעוד הרשמי. בכל שאלה, אנא אל תהסס לפנות אלינו בפורום התמיכה החינמי שלנו.