2016-09-21 3 views
-1

Ich bekomme kein Tutorial zum Hinzufügen eines Textwasserzeichens in einer PDF-Datei? Kannst du mich bitte alle leiten, ich bin sehr neu bei PDFBOX.Wie man Wasserzeichen zum pdf in Java unter Verwendung der Apache PDFBox hinzufügt?

Es ist nicht doppelt, der Link im Kommentar hat mir nicht geholfen. Ich möchte Text, kein Bild zum PDF hinzufügen.

+1

Mögliche Duplikat [Watermarking mit PDFBox] (http://stackoverflow.com/questions/8929954/watermarking-with-pdfbox) –

+0

* Ich habe versucht, iText vor diesem, aber iText ist nicht frei. Ich möchte eine Open Source ... * - Solche Behauptungen sind hier unangebracht. Wenn Sie eine Aufgabe mit der Bibliothek XXX ausführen möchten, müssen Sie nicht erklären, warum Sie die Bibliothek YYY nicht verwenden. Stattdessen hättest du erklären sollen, was du versucht hast und wo du stecken geblieben bist. Was den Anspruch selbst betrifft, ist iText * * Open Source und Sie können es verwenden, ohne Lizenzgebühren zu bezahlen, solange Sie die AGPL-Regeln befolgen. PDFBox ist ebenfalls Open Source und Sie können es verwenden, solange Sie die Regeln von Apache License v2.0 befolgen. – mkl

+1

Sehen Sie sich das AddMessageToEachPage.java-Beispiel im Quellcode-Download an. Bearbeiten Sie dann Ihre Frage für das verbleibende Problem. –

Antwort

0

Hier ist ein Beispiel mit PDFBox 2.0.2. Dies wird ein PDF laden und etwas Text in der unteren rechten Ecke in einer roten transparenten Schriftart schreiben. Wenn es sich um ein mehrseitiges PDF handelt, erscheint das Wasserzeichen auf jeder Seite. Es ist möglicherweise nicht produktionsbereit, da ich nicht sicher bin, ob einige zusätzliche Nullbedingungen überprüft werden müssen, aber Sie sollten in die richtige Richtung laufen.

Beachten Sie, dass dieser bestimmte Codeblock die ursprüngliche PDF-Datei nicht ändert, sondern eine neue PDF-Datei mit Tmp_ (Dateiname) als Ausgabe erstellt.

 private static void watermarkPDF (File fileStored) { 
    File tmpPDF; 
    PDDocument doc; 
    tmpPDF = new File(fileStored.getParent() + System.getProperty("file.separator") +"Tmp_"+fileStored.getName()); 
    doc = PDDocument.load(fileStored); 
    for(PDPage page:doc.getPages()){ 
     PDPageContentStream cs = new PDPageContentStream(doc, page, AppendMode.APPEND, true, true); 
     String ts = "Some sample text"; 
     PDFont font = PDType1Font.HELVETICA_BOLD; 
     float fontSize = 14.0f; 
     PDResources resources = page.getResources(); 
     PDExtendedGraphicsState r0 = new PDExtendedGraphicsState(); 
     r0.setNonStrokingAlphaConstant(0.5f); 
     cs.setGraphicsStateParameters(r0); 
     cs.setNonStrokingColor(255,0,0);//Red 
     cs.beginText(); 
     cs.setFont(font, fontSize); 
     cs.setTextMatrix(Matrix.getTranslateInstance(0f,0f)); 
     cs.showText(ts); 
     cs.endText(); 
     } 
     cs.close(); 
    } 
    doc.save(tmpPDF); 
} 
+1

* Es ist möglicherweise nicht produktionsbereit * - um es noch besser zu machen, ** A ** aktualisiere die Positionsberechnungen, um zu berücksichtigen, dass der Koordinatensystemursprung nicht unten links sein muss, ** B ** benutze den 'PDPageContentStream'-Konstruktor mit dem 'resetContext' Parameter und setzen Sie es auf' true', und ** C ** vereinfachen die 'PDExtendedGraphicsState' Behandlung, insbesondere stoppen Sie explizit einmischen mit den Ressourcen,' setGraphicsStateParameters' fügt den Ressourcen bei Bedarf bereits den Status hinzu. Und da das OP * Text, kein Bild zur PDF * hinzufügen möchte, lassen Sie auch das Bild hinzufügen. – mkl

+0

Hallo MKL - Ich habe das gerade am selben Tag gepatched ich habe es aus anderen Beispielen online gepostet. Aber von dem, was ich von Ihnen erfasse, sollte ich in der Lage sein, dies zu ändern, indem ich den gesamten IF-Abschnitt entferne und nur den r0.setNonStrokingAlphaConstant beibehalte. Ist das korrekt? – MDig

+0

Ja, das sollte Artikel ** C ** beheben. – mkl

Verwandte Themen