2016-09-21 2 views
-1

Je ne reçois aucun tutoriel pour ajouter un filigrane de texte dans un fichier PDF? Pouvez-vous tous s'il vous plaît me guider, je suis très nouveau à PDFBOX.Comment ajouter un filigrane de texte à pdf en Java en utilisant Apache PDFBox?

Ce n'est pas en double, le lien dans le commentaire ne m'a pas aidé. Je veux ajouter du texte, pas une image au pdf.

+1

double possible de [Watermarking avec PDFBox] (http://stackoverflow.com/questions/8929954/watermarking-with-pdfbox) –

+0

* Je tentais iText avant, mais iText est pas libre. Je veux une source ouverte ... * - De telles revendications sont inappropriées ici. Si vous voulez faire une tâche en utilisant la bibliothèque XXX, il n'est pas nécessaire d'expliquer pourquoi vous n'utilisez pas la bibliothèque YYY. Au lieu de cela, vous auriez dû expliquer ce que vous avez essayé et où vous êtes coincé. Concernant la revendication elle-même, iText * est * open source et vous pouvez l'utiliser sans payer de royalties tant que vous respectez les règles AGPL. PDFBox est également open source et vous pouvez l'utiliser aussi longtemps que vous suivez les règles de la licence Apache v2.0. – mkl

+1

Veuillez jeter un oeil à l'exemple AddMessageToEachPage.java dans le téléchargement du code source. Ensuite, éditez votre question pour tout problème restant. –

Répondre

0

Voici un exemple utilisant PDFBox 2.0.2. Cela va charger un PDF et écrire du texte dans le coin en bas à droite dans une police transparente rouge. S'il s'agit d'un PDF de plusieurs pages, le filigrane apparaît sur chaque page. Il n'est peut-être pas prêt pour la production, car je ne suis pas sûr qu'il y ait des conditions nulles supplémentaires qui doivent être vérifiées, mais cela devrait vous permettre de courir dans la bonne direction. Gardez à l'esprit que ce bloc de code particulier ne modifiera pas le PDF d'origine, mais créera un nouveau PDF en utilisant le Tmp_ (nom de fichier) comme sortie.

 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

* Il n'est peut-être pas prêt pour la production * - pour le faire plus, ** A ** met à jour les calculs de position pour considérer que l'origine du système de coordonnées n'est pas en bas à gauche, ** B ** utilise le constructeur 'PDPageContentStream' avec le paramètre 'resetContext' et le mettre à' true', et ** C ** simplifier le traitement 'PDExtendedGraphicsState', en particulier arrêter d'interférer explicitement avec les ressources,' setGraphicsStateParameters' ajoute déjà l'état aux ressources si nécessaire. Et comme l'OP * veut ajouter du texte, pas une image au pdf *, supprimez également l'ajout d'image. – mkl

+0

Salut MKL - Je viens de patcher ensemble le même jour que je l'ai posté à partir d'autres exemples en ligne. Mais, d'après ce que je comprends de vous, je devrais être capable de changer cela en supprimant toute la section IF et de ne conserver que r0.setNonStrokingAlphaConstant. Est-ce exact? – MDig

+0

Oui, cela devrait corriger l'item ** C **. – mkl