CheckPDFTextAgainstXML
Methode (Function) · gibt Integer zurück
CheckPDFTextAgainstXML ist eine Methode der Klasse Aloaha_ZUGFeRD.XML im Aloaha ZUGFeRD SDK. Sie betrifft BT-112 (Rechnungsgesamtbetrag einschließlich Umsatzsteuer), BT-115 (Fälliger Zahlungsbetrag), BT-109 (Rechnungsgesamtbetrag ohne Umsatzsteuer), BT-110 (Gesamtbetrag der Umsatzsteuer).
Beschreibung (Originaltext der englischen SDK-Dokumentation): Rough plausibility check of a hybrid invoice PDF (ZUGFeRD / Factur-X / XRechnung): are grand total (BT-112), amount due (BT-115), net total (BT-109), VAT total (BT-110), invoice number (BT-1) and IBAN (BT-84) of the embedded XML also printed on the PDF pages? Legally the XML counts, but people usually read the PDF - a PDF that shows other values than the XML is a mistake or a fraud attempt.
Rückgabe: 1 = the payable amount of the XML is printed on the PDF and nothing contradicts; 2 = payable amount printed, but a warning (invoice number not printed, or the PDF prints another IBAN than the XML); 0 = neither grand total nor amount due are printed; -1 = not checkable (licence, file not found, no embedded XML, no text in the PDF such as a scan) - see PDFTextCheckReport and LastError
Hinweis: Rough check: a value counts as printed when it appears anywhere in the page text. Amounts are recognised in the usual print formats (1.234,56 / 1,234.56 / 1234,56 / 1 234,56). A scanned PDF without text gives -1, not 0. The check does not replace ValidateInvoicePDF and does not prove that PDF and XML are identical. It needs a licence like the validation functions. Available from version 11.0.0.19.
Deklaration
Public Function CheckPDFTextAgainstXML(ByVal PDFPath As String, Optional ByVal LicenseKey As String = "") As Integer
Parameter
| Name | Typ | Pflicht | Beschreibung |
|---|---|---|---|
PDFPath | String | erforderlich | ZUGFeRD / Factur-X / XRechnung PDF with embedded invoice XML |
LicenseKey | String | optional (Standard: "") | Licence key (empty = the key already set) |
Aufruf (VB.NET)
Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL")
Dim PDFPath As String = ""
Dim ergebnis = alo.CheckPDFTextAgainstXML(PDFPath)
Aufruf (C#)
var zfStandard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice; // Optional ByRef im Konstruktor: in C# mit ref übergeben
var alo = new Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, false, "IHR-LIZENZSCHLUESSEL", ref zfStandard);
string pdfPath = "";
var ergebnis = alo.CheckPDFTextAgainstXML(pdfPath);
Vollständiges Beispiel (VB.NET)
' VB.NET (Konsolenanwendung, Verweis auf Aloaha_ZUGFeRD.dll)
' Rechnungseingang: Format prüfen, dann PDF und XML abgleichen
Module RechnungsEingang
Sub Main()
Dim key As String = "IHR-LIZENZSCHLUESSEL"
Dim alo As New Aloaha_ZUGFeRD.XML(key)
For Each datei As String In System.IO.Directory.GetFiles("C:\Eingang", "*.pdf")
Dim name As String = System.IO.Path.GetFileNameWithoutExtension(datei)
' 1. Ist die Rechnung nach EN 16931 / XRechnung gültig?
If Not alo.ValidateInvoicePDF(datei, key) Then
System.IO.File.WriteAllText("C:\Klaerung\" & name & "_format.txt", alo.ValidationReport)
Continue For
End If
' 2. Stehen die Werte des XML auch auf den Seiten der PDF?
Select Case alo.CheckPDFTextAgainstXML(datei, key)
Case 1
Console.WriteLine(name & ": PDF und XML passen zusammen")
Case 2
' Betrag gedruckt, aber Rechnungsnummer oder IBAN weichen ab: ansehen
System.IO.File.WriteAllText("C:\Klaerung\" & name & "_abgleich.txt", alo.PDFTextCheckReport)
Case 0
' Betrag des XML steht nicht in der PDF: Zahlung sperren
System.IO.File.WriteAllText("C:\Gesperrt\" & name & "_abgleich.txt", alo.PDFTextCheckReport)
Case Else
' -1: nicht prüfbar (z. B. Scan ohne Text); Grund im Bericht bzw. in LastError
Console.WriteLine(name & ": " & alo.PDFTextCheckReport & " " & alo.LastError)
End Select
Next
End Sub
End ModuleVollständiges Beispiel (C#)
// C# (Konsolenanwendung, Verweis auf Aloaha_ZUGFeRD.dll)
// Rechnungseingang: Format prüfen, dann PDF und XML abgleichen
using System;
using System.IO;
class RechnungsEingang
{
static void Main()
{
string key = "IHR-LIZENZSCHLUESSEL";
var standard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice; // Optional ByRef im Konstruktor: in C# mit ref
var alo = new Aloaha_ZUGFeRD.XML(key, ref standard);
foreach (string datei in Directory.GetFiles(@"C:\Eingang", "*.pdf"))
{
string name = Path.GetFileNameWithoutExtension(datei);
// 1. Ist die Rechnung nach EN 16931 / XRechnung gültig?
if (!alo.ValidateInvoicePDF(datei, key))
{
File.WriteAllText(@"C:\Klaerung\" + name + "_format.txt", alo.ValidationReport);
continue;
}
// 2. Stehen die Werte des XML auch auf den Seiten der PDF?
switch (alo.CheckPDFTextAgainstXML(datei, key))
{
case 1:
Console.WriteLine(name + ": PDF und XML passen zusammen");
break;
case 2: // Betrag gedruckt, aber Rechnungsnummer oder IBAN weichen ab: ansehen
File.WriteAllText(@"C:\Klaerung\" + name + "_abgleich.txt", alo.PDFTextCheckReport);
break;
case 0: // Betrag des XML steht nicht in der PDF: Zahlung sperren
File.WriteAllText(@"C:\Gesperrt\" + name + "_abgleich.txt", alo.PDFTextCheckReport);
break;
default: // -1: nicht prüfbar (z. B. Scan ohne Text)
Console.WriteLine(name + ": " + alo.PDFTextCheckReport + " " + alo.LastError);
break;
}
}
}
}Worauf es bei CheckPDFTextAgainstXML ankommt:
- Rückgabe
1= der Betrag des XML steht in der PDF,2= Betrag gedruckt, aber Rechnungsnummer fehlt oder die PDF druckt eine andere IBAN,0= weder Rechnungsbetrag (BT-112) noch Zahlbetrag (BT-115) stehen in der PDF,-1= nicht prüfbar. - Den Bericht mit einer Zeile je verglichenem Wert liefert PDFTextCheckReport.
- Es ist eine grobe Prüfung: Ein Wert gilt als gedruckt, wenn er irgendwo im Seitentext steht. Beträge werden in den üblichen Schreibweisen erkannt (1.234,56 – 1,234.56 – 1234,56 – 1 234,56).
- Eine gescannte PDF ohne Text ergibt
-1, nicht0. Das ist kein Hinweis auf Betrug. - Die Prüfung ersetzt nicht ValidateInvoicePDF und nicht den Abgleich von USt-IdNr. und IBAN mit Ihren Stammdaten. Sie braucht eine Lizenz wie die Validierung und läuft lokal.
Hintergrund und Testergebnisse: PDF und XML einer E-Rechnung abgleichen. Verfügbar ab Version 11.0.0.19.