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:
<!-- Defining a clipping area: --> <inClippingArea upperLeftX=".." upperLeftY=".." width=".." height=".." /> <inClippingArea upperLeftY=".." upperLeftX=".." width=".." height=".." unit=".." />
Die verfügbaren Einheiten werden in Kapitel,
13.7: „Maßeinheiten - Points, Millimeter, ...“
beschrieben. Wenn keine Einheit mitgegeben wird, gilt die Einheit MILLIMETER
.
Hier ein paar Beispiele:
<testcase name="hasText_InClippingArea"> <assertThat testDocument="content/documentForTextClipping.pdf"> <hasText on="FIRST_PAGE" > <inClippingArea upperLeftX="17.6" upperLeftY="45.8" width="60.0" height="8.8" unit="MILLIMETER" > <containing>Content on first page.</containing> </inClippingArea> </hasText> </assertThat> </testcase>
<testcase name="haveSameAppearance_InClippingArea"> <assertThat testDocument="master/compareToMaster_sameImagesDifferentOrder.pdf" masterDocument="master/compareToMaster.pdf" > <haveSameAppearance on="FIRST_PAGE"> <inClippingArea upperLeftX="50" upperLeftY="755" width="370" height="35" unit="POINTS" /> </haveSameAppearance> </assertThat> </testcase>
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 RenderPdfClippingAreaToImage
zur Verfügung.
Mit diesem können Sie das Rechteck mit den notwendigen Werten auf der Basis der Einheiten mm
oder points
als PNG-Datei extrahieren:
:: :: Render a part of a PDF page into an image file :: @echo off setlocal set CLASSPATH=./lib/pdfunit-2015.10/*;%CLASSPATH% set CLASSPATH=./lib/jpedal/*;%CLASSPATH% set CLASSPATH=./lib/bouncycastle-jdk15on-150/*;%CLASSPATH% set CLASSPATH=./lib/aspectj-1.8.0/*;%CLASSPATH% set TOOL=com.pdfunit.tools.RenderPdfClippingAreaToImage set PAGENUMBER=1 set OUT_DIR=./tmp set IN_FILE=../content/documentForTextClipping.pdf set PASSWD= :: Format unit can only be 'mm' or 'points' set FORMATUNIT=points set UPPERLEFTX=50 set UPPERLEFTY=130 set WIDTH=170 set HEIGHT=25 java %TOOL% %IN_FILE% %PAGENUMBER% %OUT_DIR% %FORMATUNIT% %UPPERLEFTX% %UPPERLEFTY% %WIDTH% %HEIGHT% %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.