Dateien, die als Attachments in PDF-Dokumenten enthalten sind, spielen in nachverarbeitenden Prozessen meist eine wichtige Rolle. Deshalb stellt PDFUnit Testmethoden für Attachments (eingebettete Dateien) bereit:
// Simple tests: .hasEmbeddedFile() .hasNumberOfEmbeddedFiles(..) // More detailed tests: .hasEmbeddedFile().withContent(..) .hasEmbeddedFile().withName(..)
Die folgenden Tests beziehen sich auf das PDF-Formular für die deutsche Umsatzsteuervoranmeldung 2010, „umsatzsteuervoranmeldung-2010.pdf“. Es enthält eine Datei mit dem Namen „PrePress-Qualität.joboptions“.
Der einfachste Test ist, zu prüfen, ob es überhaupt eingebettete Dateien gibt:
@Test public void hasEmbeddedFile() throws Exception { String filename = "umsatzsteuervoranmeldung-2010.pdf"; AssertThat.document(filename) .hasEmbeddedFile() ; }
Etwas weiter geht die Prüfung der Anzahl der eingebetteten Dateien:
@Test public void hasNumberOfEmbeddedFiles() throws Exception { String filename = "documentUnderTest.pdf"; AssertThat.document(filename) .hasNumberOfEmbeddedFiles(1) ; }
Danach kommen die Namen der Dateien:
@Test public void hasEmbeddedFile_WithName() throws Exception { String filename = "documentUnderTest.pdf"; AssertThat.document(filename) .hasEmbeddedFile().withName("PrePress-Qualität.joboptions") ; }
Und schließlich kann der Inhalt der in PDF eingebetteten Datei mit einer externen Datei verglichen werden:
@Test public void hasEmbeddedFile_WithContent() throws Exception { String filename = "documentUnderTest.pdf"; String embeddedFileName = "embeddedfiles/PrePress-Qualität.joboptions"; AssertThat.document(filename) .hasEmbeddedFile().withContent(embeddedFileName) ; }
Der Vergleich erfolgt Byte-weise.
Als Parameter für die Vergleichsdatei kann entweder ein Dateiname oder
eine Instanz von java.util.File
verwendet werden.
Das nächste Beispiel bezieht sich auf die Datei „kubrick_dvds.pdf“, eine Beispieldatei von iText. Der Adobe Reader® zeigt die eingebetteten Dateien an:
Mehrere Dateien können mit einem Test überprüft werden. Wählen Sie aber einen passenderen Namen für die Testmethode, als in dem nächsten Beispiel:
@Test public void hasEmbeddedFile_MultipleInvocation() throws Exception { String filename = "kubrick_dvds.pdf"; String embeddedFileName1 = "0048254.jpg"; String embeddedFileName2 = "0049406.jpg"; String embeddedFileName3 = "0050825.jpg"; AssertThat.document(filename) .hasEmbeddedFile().withName(embeddedFileName1) .hasEmbeddedFile().withName(embeddedFileName2) .hasEmbeddedFile().withName(embeddedFileName3) ; }
Wenn die eingebetteten Dateien nicht als eigene Datei vorliegen, können sie
mit dem Hilfsprogramm ExtractEmbeddedFiles
aus einem bestehenden PDF-Dokument extrahiert werden.
Das Programm wird in Kapitel
9.2: „Anhänge extrahieren“
genauer beschrieben.