في عصر الأعمال التجارية عبر الإنترنت ، ازداد استخدام الفواتير والإيصالات الرقمية بشكل كبير. وبالمثل ، فإن الاستخراج الفعال للبيانات من هذه الفواتير الرقمية يتطلب أيضًا الكثير. في هذه المقالة ، ستتعرف على كيفية استخراج البيانات من فواتير PDF أو الإيصالات برمجيًا في Java. سابقًا رأينا استخراج بيانات الفاتورة باستخدام C # في إحدى المنشورات السابقة.

استخراج البيانات من فواتير PDF أو الإيصالات

تحليل المستندات واستخراج البيانات Java API

سأستخدم GroupDocs.Parser for Java لتحليل فواتير PDF واستخراج قيم البيانات داخل تطبيق Java. تسمح واجهة برمجة التطبيقات هذه أيضًا باستخراج النصوص والصور والبيانات الوصفية من المستندات والصور والعروض التقديمية والمحفوظات والبريد الإلكتروني والعديد من تنسيقات المستندات المدعومة.

تنزيل أو تكوين

من قسم التنزيلات ، يمكنك تنزيل ملف JAR أو الحصول على المستودع وتكوينات التبعية لـ pom.xml لتطبيقات Java المستندة إلى المخضرم.

كيفية استخراج بيانات فاتورة PDF بجافا

ستتيح لك الخطوات التالية استخراج البيانات بسهولة من فواتير PDF باستخدام Java.

  • قم بإنشاء قالب.
  • قم بتحليل فاتورة PDF وفقًا للقالب الذي تم إنشاؤه.
  • استخرج المعلومات من ملف PDF الذي تم تحليله.

إنشاء نموذج للفاتورة

يوجد أدناه القالب الذي تم إنشاؤه وفقًا للفاتورة. يمكنك أيضًا تنزيل الفاتورة المستخدمة من ملفات نموذجية المتوفرة في مستودع GitHub.

// قم بإنشاء نموذج لتحليل البيانات من الفاتورة باستخدام Java
// قم أولاً بإنشاء عناصر القالب
TemplateItem[] templateItems = new TemplateItem[]
{
    new TemplateField(new TemplateFixedPosition(new Rectangle(new Point(35, 135), new Size(100, 10))), "FromCompany"),
    new TemplateField(new TemplateFixedPosition(new Rectangle(new Point(35, 150), new Size(100, 35))), "FromAddress"),
    new TemplateField(new TemplateFixedPosition(new Rectangle(new Point(35, 190), new Size(150, 2))), "FromEmail"),
    new TemplateField(new TemplateFixedPosition(new Rectangle(new Point(35, 250), new Size(100, 2))), "ToCompany"),
    new TemplateField(new TemplateFixedPosition(new Rectangle(new Point(35, 260), new Size(100, 15))), "ToAddress"),
    new TemplateField(new TemplateFixedPosition(new Rectangle(new Point(35, 290), new Size(150, 2))), "ToEmail"),
    new TemplateField(new TemplateRegexPosition("Invoice Number"), "InvoiceNumber"),
    new TemplateField(new TemplateLinkedPosition(
            "InvoiceNumber",
            new Size(200, 15),
            new TemplateLinkedPositionEdges(false, false, true, false)),
            "InvoiceNumberValue"),
    new TemplateField(new TemplateRegexPosition("Order Number"), "InvoiceOrder"),
    new TemplateField(new TemplateLinkedPosition(
            "InvoiceOrder",
            new Size(200, 15),
            new TemplateLinkedPositionEdges(false, false, true, false)),
            "InvoiceOrderValue"),
    new TemplateField(new TemplateRegexPosition("Invoice Date"), "InvoiceDate"),
    new TemplateField(new TemplateLinkedPosition(
            "InvoiceDate",
            new Size(200, 15),
            new TemplateLinkedPositionEdges(false, false, true, false)),
            "InvoiceDateValue"),
    new TemplateField(new TemplateRegexPosition("Due Date"), "DueDate"),
    new TemplateField(new TemplateLinkedPosition(
            "DueDate",
            new Size(200, 15),
            new TemplateLinkedPositionEdges(false, false, true, false)),
            "DueDateValue"),
    new TemplateField(new TemplateRegexPosition("Total Due"), "TotalDue"),
    new TemplateField(new TemplateLinkedPosition(
            "TotalDue",
            new Size(200, 15),
            new TemplateLinkedPositionEdges(false, false, true, false)),
            "TotalDueValue")
};
// تحويل إلى قالب
Template template = new Template(Arrays.asList(templateItems));

تحليل فاتورة / إيصال PDF لاستخراج البيانات

ستقوم الأسطر التالية بتحليل فاتورة PDF وفقًا للقالب الذي تم إنشاؤه واستخراج بيانات الفاتورة باستخدام كود Java بسيط.

// قم بتحليل فاتورة PDF باستخدام القالب المحدد في Java
Parser parser = new Parser("filePath/invoice.pdf");
DocumentData data = parser.parseByTemplate(template);
// اطبع البيانات المستخرجة
for (int i = 0; i < data.getCount(); i++) {
    // طباعة اسم الحقل
    System.out.print(data.get(i).getName() + ": ");
    // قيمة خاصية Cast PageArea في PageTextArea
    // كما حددنا الحقول النصية فقط في النموذج
    PageTextArea area = data.get(i).getPageArea() instanceof PageTextArea
            ? (PageTextArea) data.get(i).getPageArea()
            : null;
    System.out.println(area == null ? "Not a template field" : area.getText());
}

الإخراج

التالي هو إخراج الكود أعلاه بعد استخراج البيانات من الفاتورة.

**FROMCOMPANY:**    DEMO - Sliced Invoices
**FROMADDRESS:**    Suite 5A-1204
123 Somewhere Street
Your City AZ 12345
**FROMEMAIL:**     admin@slicedinvoices.com
**TOCOMPANY:**    Test Business
**TOADDRESS:**    123 Somewhere St
Melbourne, VIC 3000
**INVOICENUMBER:**             Invoice Number
**INVOICENUMBERVALUE:** NV-3337
**INVOICEORDER:**                Order Number
**INVOICEORDERVALUE:**    12345
**INVOICEDATE:**                    Invoice Date
**INVOICEDATEVALUE:**        January 25, 2016
**DUEDATE:**                           Due Date
**DUEDATEVALUE:**               January 31, 2016
**TOTALDUE:**                         Total Due
**TOTALDUEVALUE:**             $93.50

هناك العديد من الأمثلة مفتوحة المصدر الأخرى المتاحة في GitHub Repository. يمكنك تنزيل الكود وتشغيل الأمثلة بسرعة. لمزيد من الإرشادات وبعض الطرق الأخرى لاستخدام القوالب للتحليل واستخراج البيانات في Java ، قم بزيارة دليل المطور في التوثيق. في حالة وجود أي صعوبة أخرى ، تواصل مع فريق الدعم مجانًا ، في أي وقت على المنتدى.

أنظر أيضا