如何使用ColdFusion和iText添加PDF链接

时间:2010-02-09 05:35:41

标签: pdf coldfusion hyperlink itext

我用这种技术插入图像

Adding a dynamic image to a PDF using ColdFusion and iText

现在,我需要在X/Y处插入指向外部网址的链接,并使用itext和ColdFusion插入文本内部。

有人可以帮我这么做吗?

感谢。

1 个答案:

答案 0 :(得分: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>