Ist Ihr PDF fehlerfrei?

Automatisieren Sie Ihre Tests. Testversion herunterladen

PDFUnit auf den PDF Days Europe 2016

Eine erfolgreiche Konferenz ist zu Ende. Für alle, die nicht dabeisein konnten, gibt es die Präsentation zum Herunterladen.

Automatisiertes Testen mit PDFUnit

Warum PDF testen?

PDF-Dokumente, wie z.B. Rechnungen, Versicherungspolicen, amtliche Bescheide, sind das Ergebnis vieler Businessprozesse, für die die Bemerkung vom ehemaligen Bundeskanzler Helmut Kohl gelten muss: "Entscheidend ist, was hinten 'rauskommt".

Ihre Erstellung erfolgt durch unternehmenseigene Programme, die eine nicht geringe fachliche und technische Komplexität abbilden. Um die Programmierfehler zu entdecken, sollten Sie die erzeugten PDF-Dokumente überprüfen:

  • Steht in einem bestimmten Bereich einer Seite der erwartete Text?
  • Stimmt der Barcode (QR-Code) auf dem Dokument mit dem erwarteten Inhalt überein?
  • Stimmt das Layout mit der Vorgabe überein?
  • Ist das PDF signiert? Wann und von wem?
  • Stimmen die Werte der eingebetteten ZUGFeRD-Daten mit den erwarteten Daten überein?
  • Stimmen die Werte der eingebetteten ZUGFeRD-Daten mit den sichtbaren Daten überein?
  • Entspricht ein Dokument den Regeln von DIN 5008?

Es sollte Entwickler, Projekt- und Unternehmensverantwortliche erschrecken, dass es bisher kaum Möglichkeiten gibt, PDF-Dokumente automatisiert zu testen. Manuelles Testen ist fehleranfällig und zu teuer.

Technische Aspekte

Für Tests spielt es keine Rolle, ob die PDF-Dokumente mit einem mächtigen Design-Werkzeug erstellt, aus MS-Word oder Libre-Office exportiert, über eine API erstellt wurden oder aus einem XSL-FO Workflow herausgefallen sind. PDFUnit testet sie alle. PDFUnit gibt es als Java-API, .NET-API, XML-Schnittstelle und als Perl-Modul. Alle Technologien sind funktional identisch. Weiterhin gibt es einen Monitor, der PDF-Dokumente in vorgegebenen Verzeichnissen überwachen kann.

PDFUnit integriert sich in JUnit und TestNG und kann problemlos in Automatisierungs-Tools wie z.B. ANT, Maven oder Graddle eingebunden werden.

Sprechen Sie uns an, schreiben Sie uns: info[at]pdfunit.com

Beispiel

Probieren Sie PDFUnit. Das folgende Beispiel zeigt, wie einfach es ist.

@Test
public void hasText_OnFirstPage_InRegion() throws Exception {
  String pdfUnderTest = "documentUnderTest.pdf";
  int leftX  =  17;  // in millimeter
  int upperY =  45;
  int width  =  80;
  int height =  50; 
  PageRegion addressRegion = new PageRegion(leftX, upperY, width, height);
  AssertThat.document(pdfUnderTest)
            .restrictedTo(FIRST_PAGE)
            .restrictedTo(addressRegion)
            .hasText()
            .containing("John Doe Ltd.")
  ; 
}

Derselbe Test in Perl:

lives_ok {
 my $pdfUnderTest = "documentUnderTest.pdf";
    
 my $leftX  =   0;
 my $upperY =   0;
 my $width  = 210;
 my $height =  50;
 my $addressRegion = PageRegion->new($leftX, $upperY, $width, $height);
    
 AssertThat->document($pdfUnderTest)
           ->restrictedTo(FIRST_PAGE)
           ->restrictedTo($addressRegion)
           ->hasText()
           ->containing('John Doe Ltd.')
 ;
} 'hasText_OnFirstPage_InRegion';

Derselbe Test in C#:

[TestMethod] 
public void hasContentOnFirstPage() 
{
  String pdfUnderTest = "documentUnderTest.pdf";
    
  int leftX  =   0;
  int upperY =   0;
  int width  = 210;
  int height =  50; 
  PageRegion region = new PageRegion(leftX, upperY, width, height);

  AssertThat.document(pdfUnderTest)
            .restrictedTo(Constants.FIRST_PAGE)
            .restrictedTo(region)
            .hasText()
            .containing("John Doe Ltd.")
  ;

In der XML-Version sieht der Test so aus:

<testcase name="hasText_OnFirstPage_InRegion">
  <assertThat testDocument="documentUnderTest.pdf">
    <hasText on="FIRST_PAGE" >
      <inRegion upperLeftX="0" upperLeftY="0" width="210" height="50" >
        <containing>John Doe Ltd.</containing>
      </inRegion>
    </hasText>
  </assertThat>
</testcase>

Downloads

Das Release steht zum Download zur Verfügung, ebenso stehen alle Dokumentationen und viele Beispiele.

Artikel in 'Java aktuell', Ausgabe 02-2015

In der Zeitschrift "Java aktuell, Heft 02-2015" erschien ein Übersichtsartikel über PDFUnit. Er kann
hier heruntergeladen werden.

Lizenz

Probieren Sie PDFUnit aus, ohne sich registrieren zu müssen. Nach der Evaluation ist die Benutzung von PDFUnit im kommerziellen Umfeld kostenpflichtig. Informationen zu Lizenzen finden Sie hier.