Text- und Bildvergleiche können auf Ausschnitte einer Seite beschränkt werden. Dazu wird ein rechteckiger Ausschnitt durch vier Werte definiert: die linke obere Ecke mit ihren x/y-Koordinaten sowie die Breite und Höhe des Auschnittes:
// Instantiating a page region public PageRegion(int leftX, int upperY, int width, int height) public PageRegion(int leftX, int upperY, int width, int height, FormatUnit init)
Seitenausschnitte können in den Einheiten Millimeter oder Points definiert werden. Weitere Informationen dazu liefert das Kapitel, 13.8: „Maßeinheiten - Points und Millimeter“ beschrieben.
Hier ein Beispiel:
@Test public void hasTextOnFirstPage_InPageRegion() throws Exception { String filename = "documentUnderTest.pdf"; int leftX = 17; // in millimeter int upperY = 45; int width = 60; int height = 9; PageRegion pageRegion = new PageRegion(leftX, upperY, width, height); AssertThat.document(filename) .restrictedTo(FIRST_PAGE) .restrictedTo(pageRegion) .hasText() .containing("on first") ; }
So leicht die Benutzung eines solchen Rechtecks ist, so liegt die Schwierigkeit
wahrscheinlich darin, die richtigen Werte für den Ausschnitt zu ermitteln.
PDFUnit stellt deshalb das kleine Hilfsprogramm RenderPdfPageRegionToImage
zur Verfügung.
Mit diesem können Sie das Rechteck mit den notwendigen Werten auf der Basis der Einheiten mm
als PNG-Datei extrahieren:
:: :: Render a part of a PDF page into an image file. :: @echo off setlocal set CLASSPATH=./lib/aspectj-1.8.7/*;%CLASSPATH% set CLASSPATH=./lib/commons-logging-1.2/*;%CLASSPATH% set CLASSPATH=./lib/pdfbox-2.0.0/*;%CLASSPATH% set CLASSPATH=./lib/pdfunit-2016.05/*;%CLASSPATH% set CLASSPATH=./build_eclipse;%CLASSPATH% set TOOL=com.pdfunit.tools.RenderPdfPageRegionToImage set PAGENUMBER=1 set OUT_DIR=./tmp set IN_FILE=./content/documentForTextClipping.pdf set PASSWD= :: All values must be millimeter: set UPPERLEFTX=135 set UPPERLEFTY=30 set WIDTH=70 set HEIGHT=30 set PAGEHEIGHT=297 java %TOOL% %IN_FILE% %PAGENUMBER% %OUT_DIR% %UPPERLEFTX% %UPPERLEFTY% %WIDTH% %HEIGHT% %PAGEHEIGHT% %PASSWD% endlocal
Das so entstandene Bild müssen Sie überprüfen. Enthält es exakt den gewünschten Ausschnitt? Falls nicht, variieren Sie die Werte solange, bis der Ausschnitt passt. Anschließend übernehmen Sie die Werte in Ihren Test.