2016-07-27 19 views
1

Ich muss ein Wasserzeichen zu einer vorhandenen PDF-Datei als Byte-Array hinzugefügt werden. Ich habe this Beispiel als Richtlinie verwendet, aber die PDF, die ich erstellt habe, scheint fehlende Dateiende-Marker und das Schlüsselwort "startxref" zu haben.Java iText: Kein EOF-Marker nach dem Hinzufügen von Wasserzeichen

Gibt es etwas, das ich nicht richtig gemacht habe? Oder etwas, das fehlt?

PdfReader reader = new PdfReader(inputPDF); 
    PdfStamper stamper; 
    stamper = new PdfStamper(reader, outputPDF); 
    PdfContentByte under = stamper.getUnderContent(1); 
    Font f = new Font(FontFamily.HELVETICA, 15); 
    Phrase p = new Phrase(watermarkText, f); 
    ColumnText.showTextAligned(under, Element.ALIGN_CENTER, p, 297, 550, 0); 
    stamper.close(); 
    reader.close(); 

überprüfte ich die pdf-Datei mit this Werkzeug und das sind die Fehler, die ich erhalten:

Open file. 
    0x80410108 - E - The end-of-file marker was not found. 
     - File: Formular_TEST_Watermark_V1_0.pdf 
    0x8041010A - E - The 'startxref' keyword or the xref position was not found. 
     - File: Formular_TEST_Watermark_V1_0.pdf 
    0x80410108 - E - The end-of-file marker was not found. 
     - File: Formular_TEST_Watermark_V1_0.pdf 
    Close file. 

EDIT:

Der obige Code richtig ist, ich habe einen Fehler später im Code gemacht Als ich die pdf zurück zur Hauptanwendung übertrug und irrtümlich die Annahme machte, musste ich beim Wasserzeichen einen Fehler gemacht haben, weil ich pdfs bereits mehrfach erfolgreich übertragen habe und dachte, dass ich dort keinen Fehler gemacht hätte. Mein Fehler.

Der Vollständigkeit halber sind inputPDF und outputPDF ein ByteArrayInputStream und ein ByteArrayInputStream.

+1

Es sieht richtig aus, aber Sie zeigen nicht, wie Sie das Dokument speichern und was. Das Speichern im Web ist notorisch leicht zu scheitern, wenn es nicht ordnungsgemäß ausgeführt wird. Bitte poste das kaputte PDF. –

+0

... und erklären Sie bitte, was 'inputPDF' und' outputPDF' sind. – mkl

+0

Danke Paulo, dein Tipp hat mich auf die richtigen Bahnen gestellt. Der obige Code ist korrekt und macht das, was er tun soll. Wenn ich das xmllencodierte mit Wasserzeichen versehene pdf zurück zur Hauptanwendung gebe, wo der Fehler passiert, habe ich einen Fehler übersehen, den ich dort gemacht habe. – Rubikan

Antwort

0

Dank einem Hinweis von Paulo Soares fand ich den wahren Schuldigen. Der Code für das Watermarking selbst in der Frage ist korrekt und tut was er soll. Ich habe die Frage entsprechend aktualisiert.