In het tijdperk van online ondernemen is het gebruik van digitale facturen en bonnen sterk toegenomen. Evenzo is de efficiënte gegevensextractie van deze digitale facturen veeleisend. In dit artikel weet u hoe u gegevens programmatisch kunt extraheren uit PDF-facturen of kwitanties in Java. Eerder hebben we de extractie van factuurgegevens met behulp van C# gezien in een van de eerdere berichten.
Documentparsing en gegevensextractie Java API
Ik zal GroupDocs.Parser for Java gebruiken om PDF-facturen te ontleden en gegevenswaarden te extraheren binnen de Java-toepassing. Deze API maakt het ook mogelijk om tekst, afbeeldingen en metadata te extraheren uit documenten, afbeeldingen, presentaties, archieven, e-mail en vele andere ondersteunde documentindelingen.
Downloaden of configureren
Vanuit de downloads-sectie kunt u het JAR-bestand downloaden of alleen de repository- en afhankelijkheidsconfiguraties voor de pom.xml van uw maven-gebaseerde Java-applicaties ophalen.
Hoe PDF-factuurgegevens in Java te extraheren
Met de volgende stappen kunt u eenvoudig gegevens uit de PDF-facturen extraheren met behulp van Java.
- Maak een sjabloon.
- Parseer de pdf-factuur volgens de gemaakte sjabloon.
- Extraheer de informatie uit de geparseerde PDF.
Maak een sjabloon voor de factuur
Hieronder vindt u de sjabloon die wordt gemaakt op basis van de factuur. U kunt de gebruikte factuur ook downloaden van de voorbeeldbestanden die beschikbaar zijn in de GitHub-repository.
// Maak een sjabloon om gegevens van facturen te ontleden met behulp van Java
// Maak eerst sjabloonitems aan
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")
};
// Transformeer in sjabloon
Template template = new Template(Arrays.asList(templateItems));
Parseer PDF-factuur/ontvangstbewijs voor gegevensextractie
De volgende regels ontleden de PDF-factuur volgens de gemaakte sjabloon en extraheren de factuurgegevens met behulp van eenvoudige Java-code.
// Parseer de PDF-factuur met behulp van de gedefinieerde sjabloon in Java
Parser parser = new Parser("filePath/invoice.pdf");
DocumentData data = parser.parseByTemplate(template);
// Druk de geëxtraheerde gegevens af
for (int i = 0; i < data.getCount(); i++) {
// Veldnaam afdrukken
System.out.print(data.get(i).getName() + ": ");
// Cast PageArea-eigenschapswaarde naar PageTextArea
// omdat we alleen tekstvelden in de sjabloon hebben gedefinieerd
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());
}
Het resultaat
Het volgende is de uitvoer van de bovenstaande code na extractie van gegevens uit de factuur.
**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
Er zijn veel andere open-source voorbeelden beschikbaar op GitHub Repository. U kunt de code downloaden en de voorbeelden snel uitvoeren. Voor meer richtlijnen en enkele andere manieren om sjablonen te gebruiken voor parsing en gegevensextractie in Java, gaat u naar de handleiding voor ontwikkelaars in de documentatie. In geval van verdere problemen kunt u het ondersteuningsteam gratis bereiken, op elk gewenst moment op het forum.