【问题标题】:How to Add a link to a PDF with ColdFusion and iText如何使用 ColdFusion 和 iText 添加指向 PDF 的链接
【发布时间】:2011-01-14 16:21:12
【问题描述】:

我使用这种技术插入图像

Adding a dynamic image to a PDF using ColdFusion and iText

现在,我需要在 X/Y 处插入一个指向外部 URL 的链接,并在其中插入带有 itext 和 ColdFusion 的文本。

有人可以帮我做这件事吗?

谢谢。

【问题讨论】:

  • “文本”是什么意思。链接的文本,或其他内容..?
  • 只是好奇,但您是否尝试使用 cfpdf action="addWatermark" 添加图像?反正你是在 overContent 上写的,本质上是一样的。它似乎支持所有需要的属性:不透明度、页面、前景和位置。无论如何都值得一试..
  • 我与 cfpdf 有一些不同,首先是 PNG 的 alpha 透明度,对于这个应用程序,我不需要不透明度或前景。我只有一个问题是“图像大小”,但我有耻辱问题是 cfpdf。
  • 您的意思是 iText 和 cfpdf 都有问题?随意发布另一个问题,也许我们可以提出一些想法。另外,您使用的是什么版本的 CF .. 8 或 9?

标签: pdf coldfusion hyperlink itext


【解决方案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>

【讨论】:

  • 呼 .. 太棒了 .. 那是工作!你能解释一下如何更改字体、大小、颜色和 unlerline 吗?对于文本?
  • 创建一个 Font 对象并将其应用到包含文本的 Chunk。您可能需要先创建一个 BaseFont 和 java.awt.Color 对象。然后使用它们创建具有所需大小、样式和颜色的 Font()。 api.itextpdf.com/com/itextpdf/text/Font.html
  • 糟糕,这是错误的 API 版本 (5.0.0)。这个看起来更接近docjar.com/docs/api/com/lowagie/text/Font.html
  • 谢谢.. 但我在coldfusion中翻译Java确实有问题:S
  • @Alain - 我用字体更新了示例。你可能想先研究一下。看看它在做什么。使用您不理解的代码绝不是一个好主意;)
猜你喜欢
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 2014-04-11
  • 1970-01-01
  • 2019-01-07
相关资源
最近更新 更多