2010-02-09 13 views
1

J'ai utilisé cette technique pour insérer une imageComment ajouter un lien vers un fichier PDF avec ColdFusion et iText

Adding a dynamic image to a PDF using ColdFusion and iText

Maintenant, je dois insérer un lien vers une URL externe à X/Y et du texte avec itext et ColdFusion.

Quelqu'un peut-il m'aider à faire cela?

Merci.

+0

Que voulez-vous dire par "texte". Le texte du lien, ou autre chose ..? – Leigh

+0

oui, le texte du lien – Alain

+0

Juste curieux, mais avez-vous essayé d'utiliser cfpdf action = "addWatermark" pour ajouter l'image? Puisque vous écrivez sur overContent de toute façon, c'est essentiellement la même chose. Il semble soutenir toutes les propriétés nécessaires: opacité, pages, premier plan et position. Ça vaut le coup de toute façon .. – Leigh

Répondre

1

Voici un exemple approximatif qui fonctionne avec CF9. Il y a probablement des méthodes plus élégantes, mais cela devrait vous donner l'idée de base.

Remarque - L'IIRC CF8 utilise une version antérieure d'iText (1.4). CF9 utilise 2.1.0. Je suis donc relativement certain qu'il ne fonctionnera pas «tel quel» avec CF8. Si nécessaire, vous pouvez utiliser JavaLoader.cfc pour exécuter une version ultérieure.

Mise à jour: Modifié pour afficher une manière de définir une police, une taille et une couleur spécifiques. Les paramètres corrects varient en fonction de votre système, de la police souhaitée, de l'encodage, etc.

<cfscript> 
    inputPath = "c:\sourceFile.pdf"; 
    outputPath = "c:\sourceFileWithLink.pdf"; 

    try { 
     // initialize objects 
     pdfReader = createObject("java", "com.lowagie.text.pdf.PdfReader").init(inputPath); 
     outStream = createObject("java", "java.io.FileOutputStream").init(outputPath); 
     pdfStamper = createObject("java", "com.lowagie.text.pdf.PdfStamper").init(pdfReader, outStream); 

     // create a chunk with a link to www.google.com 
     chunk = createObject("java", "com.lowagie.text.Chunk").init("Go To Google"); 
     chunk.setAnchor("http://www.google.com"); 

     ////////////////////////////////////////// 
     // Define embedded font 
     BaseFont = createObject("java", "com.lowagie.text.pdf.BaseFont"); 
     Font = createObject("java", "com.lowagie.text.Font"); 
     bf = BaseFont.createFont("c:/windows/fonts/Framd.ttf", BaseFont.CP1252, BaseFont.EMBEDDED); 

     // Create the main font object (size 14) 
     Color = createObject("java", "java.awt.Color"); 
     textFont = Font.init(bf, 14, Font.UNDERLINE, Color.RED); 
     // Apply the font to the chunk text 
     chunk.setFont(textFont); 
     ////////////////////////////////////////// 

     // prepare to write the link onto the *first* page only   
     cb = pdfStamper.getOverContent(1); // first page 
     ct = createObject("java", "com.lowagie.text.pdf.ColumnText").init(cb); 
     ct.addElement(chunk); 

     // position towards bottom right of page 
     page = pdfReader.getPageSize(1); 
     llx = page.getRight()-200; 
     lly = page.getBottom();  
     urx = page.getRight();     
     ury = page.getBottom() + 36;  
     // initialize column dimensions 
     ct.setSimpleColumn(llx, lly, urx, ury); 
     // write the text 
     ct.go(); 

     WriteOutput("Finished!"); 
    }   
    finally 
    { 
     // cleanup 
     if (IsDefined("pdfStamper")) { 
      pdfStamper.close(); 
     } 
     if (IsDefined("outStream")) { 
      outStream.close(); 
     } 
    } 
</cfscript> 
+0

Hooo .. merveilleux .. c'est le travail !! Pourriez-vous m'expliquer comment changer la police, la taille, la couleur et le Unlerline? pour le texte? – Alain

+0

Créez un objet Police et appliquez-le au bloc contenant le texte. Vous devrez probablement créer un objet BaseFont et java.awt.Color en premier. Ensuite, utilisez-les pour créer une police() avec la taille, le style et la couleur désirés. http://api.itextpdf.com/com/itextpdf/text/Font.html – Leigh

+0

Oups, c'est la mauvaise version de l'API (5.0.0). Celui-ci ressemble plus http://www.docjar.com/docs/api/com/lowagie/text/Font.html – Leigh