در عصر کسب و کارهای آنلاین، استفاده از فاکتورها و رسیدهای دیجیتال تا حد زیادی افزایش یافته است. به طور مشابه، استخراج داده های کارآمد از این فاکتورهای دیجیتال نیز خواستار است. در این مقاله، نحوه استخراج داده ها از فاکتورها یا رسیدهای PDF را به صورت برنامه ریزی شده در Java خواهید دانست. قبلاً استخراج داده‌های فاکتور با استفاده از C# را در یکی از پست‌های قبلی دیده‌ایم.

استخراج داده ها از فاکتورها یا رسیدهای PDF

API Java تجزیه اسناد و استخراج داده

من از GroupDocs.Parser for Java برای تجزیه فاکتورهای PDF و استخراج مقادیر داده در برنامه Java استفاده خواهم کرد. این API همچنین امکان استخراج متن، تصاویر و ابرداده را از اسناد، تصاویر، ارائه‌ها، آرشیوها، ایمیل و بسیاری دیگر [فرمت‌های سند پشتیبانی شده] فراهم می‌کند.

دانلود یا پیکربندی کنید

از بخش دانلودها، می‌توانید فایل JAR را دانلود کنید یا فقط مخزن و پیکربندی‌های وابستگی را برای pom.xml برنامه‌های Java مبتنی بر maven خود دریافت کنید.

نحوه استخراج اطلاعات فاکتور 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() + ": ");
    // مقدار ویژگی 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 موجود است. می توانید کد را دانلود کرده و به سرعت نمونه ها را اجرا کنید. برای راهنمایی بیشتر و برخی راه‌های دیگر برای استفاده از الگوها برای تجزیه و استخراج داده‌ها در جاوا، از راهنمای توسعه‌دهنده در اسناد دیدن کنید. در صورت بروز هرگونه مشکل بیشتر، هر زمان که بخواهید در فروم به صورت رایگان با تیم پشتیبانی تماس بگیرید.

همچنین ببینید