2010-02-09 5 views
1

Я использовал эту технику, чтобы вставить изображениеКак добавить ссылку на PDF с ColdFusion и IText

Adding a dynamic image to a PDF using ColdFusion and iText

Теперь мне нужно вставить ссылку на внешний URL в X/Y и текст внутри с itext и ColdFusion.

Может ли кто-нибудь помочь мне сделать это?

Спасибо.

+0

Что вы подразумеваете под «текстом». Текст ссылки, или что-то еще ..? – Leigh

+0

да, текст ссылки – Alain

+0

Просто любопытно, но вы попробовали использовать cfpdf action = "addWatermark", чтобы добавить изображение? Так как вы все равно пишете над overContent, это по сути то же самое. Кажется, он поддерживает все необходимые свойства: непрозрачность, страницы, передний план и положение. Стоит кадр в любом случае .. – Leigh

ответ

1

Вот пример, который работает с CF9. Есть, вероятно, более элегантные методы, но это должно дать вам основную идею.

Примечание. IIRC CF8 использует более раннюю версию iText (1.4). CF9 использует 2.1.0. Поэтому я относительно уверен, что он не будет работать «как есть» с CF8. При необходимости вы можете использовать JavaLoader.cfc для запуска более поздней версии.

Обновление: Изменено, чтобы показать один из способов определения определенного шрифта, размера и цвета. Правильные настройки будут различаться в зависимости от вашей системы, желаемого шрифта, кодировки и т. Д.

<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 .. чудесный .. это произведение !! Не могли бы вы объяснить мне, как изменить шрифт, размер, цвет и unlerline? для текста? – Alain

+0

Создайте объект Font и примените его к фрагменту, содержащему текст. Возможно, вам сначала понадобится создать объект BaseFont и java.awt.Color. Затем используйте их для создания Font() с желаемым размером, стилем и цветом. http://api.itextpdf.com/com/itextpdf/text/Font.html – Leigh

+0

К сожалению, это неправильная версия API (5.0.0). Этот выглядит ближе http://www.docjar.com/docs/api/com/lowagie/text/Font.html – Leigh