استخراج بيانات الجدول من PDF
Contents
[
Hide
]
استخراج الجداول من PDF برمجياً
استخراج الجداول من ملفات PDF ليس مهمة بسيطة لأن الجدول يمكن إنشاؤه بطرق مختلفة.
Aspose.PDF لأجهزة Android عبر Java يحتوي على أداة تجعل استخراج الجداول سهلًا. لاستخراج بيانات الجدول، يجب عليك تنفيذ الخطوات التالية:
- افتح المستند - أنشئ كائنًا مستند كائن؛
- إنشاء TableAbsorber كائن.
- قرر أي الصفحات يجب تحليلها وتطبيقها زيارة إلى الصفحات المطلوبة. سيتم مسح البيانات الجدولية، وسيتم حفظ النتيجة في قائمة من AbsorbedTable. يمكننا الحصول على هذه القائمة من خلال getTableList طريقة.
- للحصول على البيانات، قم بالتكرار عبر
TableListوتتعامل مع قائمة من صفوف مستوعبة وقائمة الخلايا المستوعبة. يمكننا الوصول إلى القائمة الأولى عن طريق الاستدعاء getTableList الطريقة وإلى الثانية عن طريق الاستدعاء getCellList. - كل AbsorbedCell يحتوي على TextFragmentCollections. يمكنك معالجته لأغراضك الخاصة.
المثال التالي يظهر استخراج الجدول من جميع الصفحات:
public void extractTable () {
// Open document
try {
document=new Document(inputStream);
} catch (Exception e) {
resultMessage.setText(e.getMessage());
return;
}
com.aspose.pdf.TableAbsorber absorber=new com.aspose.pdf.TableAbsorber();
File file=new File(fileStorage, "extracted-text.txt");
FileOutputStream fileOutputStream;
try {
fileOutputStream=new FileOutputStream(file);
} catch (FileNotFoundException e) {
resultMessage.setText(e.getMessage());
return;
}
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(fileOutputStream));
// Scan pages
for (Page page : (Iterable<? extends Page>) document.getPages()) {
absorber.visit(page);
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
try {
bw.write("Table");
bw.newLine();
// Iterate through list of rows
for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
// Iterate through list of cell
for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
StringBuilder sb=new StringBuilder();
for (TextSegment seg :
(Iterable<? extends TextSegment>) fragment.getSegments())
sb.append(seg.getText());
bw.write(sb.toString() + "|");
}
}
bw.newLine();
}
} catch (IOException e) {
resultMessage.setText(e.getMessage());
return;
}
}
}
try {
bw.close();
} catch (IOException e) {
resultMessage.setText(e.getMessage());
return;
}
resultMessage.setText(R.string.success_message);
}
استخراج جدول في منطقة محددة من صفحة PDF
كل جدول تم امتصاصه لديه مستطيل خاصية تصف موقع الجدول على الصفحة.
لذا، إذا كنت بحاجة إلى استخراج الجداول الموجودة في منطقة محددة، يجب عليك العمل مع إحداثيات محددة.
المثال التالي يوضح كيفية استخراج الجدول المُعلَّم بتعليق مربع:
public void extractMarkedTable () {
// Open document
try {
document=new Document(inputStream);
} catch (Exception e) {
resultMessage.setText(e.getMessage());
return;
}
com.aspose.pdf.Page page=document.getPages().get_Item(1);
com.aspose.pdf.AnnotationSelector annotationSelector=
new com.aspose.pdf.AnnotationSelector(
new com.aspose.pdf.SquareAnnotation(page, com.aspose.pdf.Rectangle.getTrivial()));
List list=annotationSelector.getSelected();
if (list.size() == 0) {
resultMessage.setText("Marked tables not found..");
return;
}
com.aspose.pdf.SquareAnnotation squareAnnotation = (com.aspose.pdf.SquareAnnotation) list.get(0);
com.aspose.pdf.TableAbsorber absorber=new com.aspose.pdf.TableAbsorber();
absorber.visit(page);
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
{
boolean isInRegion=(squareAnnotation.getRect().getLLX() < table.getRectangle().getLLX())
&& (squareAnnotation.getRect().getLLY() < table.getRectangle().getLLY())
&& (squareAnnotation.getRect().getURX() > table.getRectangle().getURX())
&& (squareAnnotation.getRect().getURY() > table.getRectangle().getURY());
if (isInRegion) {
File file=new File(fileStorage, "extracted-text.txt");
FileOutputStream fileOutputStream;
try {
fileOutputStream=new FileOutputStream(file);
} catch (FileNotFoundException e) {
resultMessage.setText(e.getMessage());
return;
}
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(fileOutputStream));
try {
//Parse table
for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
{
for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
for (com.aspose.pdf.TextFragment fragment :
cell.getTextFragments()) {
bw.write(fragment.getText());
}
bw.write("|");
}
bw.newLine();
}
}
bw.close();
// -------------
} catch (IOException e) {
resultMessage.setText(e.getMessage());
return;
}
resultMessage.setText(R.string.success_message);
}
}
}
}
استخراج بيانات الجدول من PDF وتخزينها في ملف CSV
المثال التالي يوضح كيفية استخراج الجدول وتخزينه كملف CSV. لرؤية كيفية تحويل PDF إلى جدول بيانات Excel يرجى الرجوع إلى تحويل PDF إلى Excel مقال.
public void extractTableSaveCSV () {
// Open document
try {
document=new Document(inputStream);
} catch (Exception e) {
resultMessage.setText(e.getMessage());
return;
}
File file=new File(fileStorage, "PDFToXLS_out.csv");
// Instantiate ExcelSave Option object
com.aspose.pdf.ExcelSaveOptions excelSave=new com.aspose.pdf.ExcelSaveOptions();
excelSave.setFormat(com.aspose.pdf.ExcelSaveOptions.ExcelFormat.CSV);
try {
document.save(file.toString(), excelSave);
} catch (Exception e) {
resultMessage.setText(e.getMessage());
return;
}
resultMessage.setText(R.string.success_message);
}