Zurück |  | Weiter

## 3.3. Anhänge (Attachments)

### Überblick

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“.

### Existenz

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()
      ;
    }

### Anzahl

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)
      ;
    }

### Dateiname

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")
      ;
    }

### Inhalt

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.

### Mehrfachaufrufe

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.

Zurück | Nach oben | Weiter
3.2. Aktionen (Actions) | Zum Anfang | 3.4. Anzahl verschiedener PDF-Bestandteile