Der Text eines PDF-Dokumentes hat Eigenschaften wie Schriftgröße, Schriftfarbe, Linien, die richtig sein müssen, bevor der Kunde es in den Händen hält. In die gleiche Kategorie fallen auch Absätze, Ausrichtung von Text sowie Bilder und Bildbezeichnungen. PDFUnit testet diese Layout-Aspekte, indem es das Test-Dokument seitenweise rendert und dann jede Seite:
... mit einer Bild-Datei vergleicht. PDFUnit liefert das Hilfsprogramm RenderPdfToImages
mit, um eine oder mehrere PDF-Seiten zu rendern.
Es ist in Kapitel
9.7: „PDF-Dokument seitenweise in PNG umwandeln“
beschrieben.
... mit der ebenfalls gerenderten Seite eines Referenz-Dokumentes vergleicht, die zuvor als richtig bewertet wurde. Das Kapitel 4.10: „Layout vergleichen (gerenderte Seiten)“ beschreibt diesen Vergleich.
Es gibt folgende Testmethoden:
// Compare rendered page(s) with a given image. // The left-upper corner is 0/0: .asRenderedPage(..).isEqualToImage(BufferedImage) .asRenderedPage(..).isEqualToImage(File) .asRenderedPage(..).isEqualToImage(String fileName) .asRenderedPage(..).isEqualToImages(BufferedImage[] images) .asRenderedPage(..).isEqualToImages(File[] imageFiles) .asRenderedPage(..).isEqualToImages(String[] fileNames) // Compare rendered page(s) with a given image. // The left-upper corner is given: 3.19: „Layout - gerenderte Seitenausschnitte“ .asRenderedPage(..).isEqualToImage(upperLeftX, upperLeftY, FormatUnit, BufferedImage) .asRenderedPage(..).isEqualToImage(upperLeftX, upperLeftY, FormatUnit, File) .asRenderedPage(..).isEqualToImage(upperLeftX, upperLeftY, FormatUnit, imageFileName) .asRenderedPage(..).isEqualToImages(upperLeftX, upperLeftY, FormatUnit, BufferedImage) .asRenderedPage(..).isEqualToImages(upperLeftX, upperLeftY, FormatUnit, File) .asRenderedPage(..).isEqualToImages(upperLeftX, upperLeftY, FormatUnit, imageFileName)
Für den Vergleich können beliebige Seiten ausgewählt werden. Das Kapitel 13.2: „Seitenauswahl“ geht näher darauf ein. Es können aber auch Teile einer Seite mit Bildern verglichen werden. Die Syntax dazu wird in Kapitel 3.19: „Layout - gerenderte Seitenausschnitte“ beschrieben.
Die Seiten 1, 3 und 4 sollen genauso aussehen, wie die referenzierten Bilddateien:
@Test public void compareAsRenderedPage_MultipleImages() throws Exception { String filename = "documentUnderTest.pdf"; String imagePage1 = "images/documentUnderTest_page1.png"; String imagePage3 = "images/documentUnderTest_page3.png"; String imagePage4 = "images/documentUnderTest_page4.png"; PagesToUse pages134 = PagesToUse.getPages(1, 3, 4); AssertThat.document(filename) .restrictedTo(pages134) .asRenderedPage() .isEqualToImages(imagePage1, imagePage3, imagePage4) ; }
Die Bilder können in allen Formaten vorliegen, die von java.awt.image.BufferedImage
unterstützt werden. Das sind laut Javadoc
GIF
, PNG
, JPEG
, BMP
und WBMP
.