PDFUnit bietet die Möglichkeit, Barcode innerhalb von PDF-Dokumenten zu validieren. Dazu wird ZXing als Parser verwendet. Detailierte Informationen zu ZXing liefert die Homepage des Projektes.
Die vom Parser ausgelesenen Texte können dann mit verschiedenen Methoden verglichen werden. Insgesamt stehen folgende Methoden zur Verfügung:
// Entry to all bar code validations: .hasImage().withBarcode() // Validate text in bar codes: ...withBarcode().containing(..) ...withBarcode().containing(.., WhitespaceProcessing) ...withBarcode().endingWith(..) ...withBarcode().equalsTo(..) ...withBarcode().equalsTo(.., WhitespaceProcessing) ...withBarcode().matchingRegex(..) ...withBarcode().startingWith(..) // Validate text in bar code in image region: ...withBarcodeInRegion(imageRegion).containing(..) ...withBarcodeInRegion(imageRegion).containing(.., WhitespaceProcessing) ...withBarcodeInRegion(imageRegion).endingWith(..) ...withBarcodeInRegion(imageRegion).equalsTo(..) ...withBarcodeInRegion(imageRegion).equalsTo(.., WhitespaceProcessing) ...withBarcodeInRegion(imageRegion).matchingRegex(..) ...withBarcodeInRegion(imageRegion).startingWith(..) // Compare with another bar code: ...withBarcode().matchingImage(..)
Die folgenden Barcode Formate werden von ZXing automatisch erkannt und können in PDFUnit-Tests verwendet werden:
// 1D bar codes, supported by PDFUnit/ZXing: CODE_128 CODE_39 CODE_93 EAN_13 EAN_8 CODABAR UPC_A UPC_E UPC_EAN_EXTENSION ITF
In den folgenden Beispielen werden diese zwei Barcode-Muster verwendet:
Der erste Code enthält den Text 'TESTING BARCODES WITH PDFUNIT' und der zweite Code den Text 'hello, world - 1234567890'.
@Test public void hasBarCode_Code3of9() throws Exception { String filename = "documentUnderTest.pdf"; int leftX = 0; int upperY = 70; int width = 210; int height = 30; PageRegion pageRegion = new PageRegion(leftX, upperY, width, height); AssertThat.document(filename) .restrictedTo(FIRST_PAGE) .restrictedTo(pageRegion) .hasImage() .withBarcode() .containing("TESTING BARCODES WITH PDFUNIT") ; }
@Test public void hasBarCode_Code128() throws Exception { String filename = "documentUnderTest.pdf"; int leftX = 0; int upperY = 105; int width = 210; int height = 30; PageRegion pageRegion = new PageRegion(leftX, upperY, width, height); AssertThat.document(filename) .restrictedTo(FIRST_PAGE) .restrictedTo(pageRegion) .hasImage() .withBarcode() .containing("hello, world") ; }
Wenn in der ausgewählten Region mehrere Bilder existieren, muss jedes Bild den erwarteten Text enhalten. Whitespaces werden vor einem Vergleich normalisiert. Die Behandlung der Whitespaces kann aber durch einen Parameter von außen vorgegeben werden.
Der intern verwendete Barcode-Parser ZXing kennt viele Barcode-Typen, dennoch nicht alle. Deshalb stellt PDFUnit noch eine externe Schnittstelle zur Verfügung, über die kundenspezifische Barcode-Parser eingebunden werden können. Die Verwendung dieser Schnittstelle wird separat dokumentiert. Schicken Sie ein kurzes Mail an info[at]pdfunit.com, um Informationen über die Einbindung eines individuellen Barcode-Parser zu erhalten.
Ein Barcode innerhalb eines PDF-Dokumentes kann auch gegen ein anderes Barcode-Image verglichen werden:
@Test public void hasBarCodeMatchingImage() throws Exception { String filename = "documentUnderTest.pdf"; int leftX = 0; int upperY = 105; int width = 210; int height = 30; PageRegion pageRegion = new PageRegion(leftX, upperY, width, height); String expectedImageFilename = "images/barcode-128.png"; AssertThat.document(filename) .restrictedTo(FIRST_PAGE) .restrictedTo(pageRegion) .hasImage() .withBarcode() .matchingImage(expectedImageFilename); ; }
Wichtig: Der Dateityp des Bildes, beispielsweise PNG oder TIFF, muss zum Typ des Barcode Bildes im PDF-Dokument passen, damit ein Bildvergleich funktioniert.