动态pdf-cfdocument + cfcontent +图像+电子邮件附件

时间:2011-01-27 06:58:51

标签: coldfusion coldfusion-9

如何将图像加载到动态生成的pdf(cfdocument)中?因为pdf没有存储在hdd中。需要通过电子邮件发送pdf,并清除ram。图像存储在wwwroot文件夹之外。 如果需要,pdf可以存储在硬盘中,附加,通过电子邮件发送,然后删除,但会选择不存储在硬盘中。

c:\ coldFusion9 \ imgs \是dir

样品:

<cfdocument format="PDF" localurl="true">
<cfoutput> #vars#</cfoutput>
</cfdocument>

我用过

<img src="">

在cfdocument中,如果图像在wwwroot(http ...)文件夹中,它就可以工作,但是当图像在wwwroot(“c:\ coldFusion9 \ imgs#image#.png”或“。 ./imgs/#image#.png“)。

我认为cfcontent是理想的

所以,在cfdocument中,我这样做:

<cffile action="readbinary" file="c:\coldFusion9\imgs\#image#.png" variable="img">
<cfcontent type="image/jpg" variable="#img#" > 

结果是图像在屏幕上加载而不是pdf。

想将pdf作为电子邮件附件发送电子邮件。 pdf不需要在屏幕上呈现,但出于测试目的,我们可以通过命名或不命名cfdocument让它在屏幕上呈现以了解图像是否已加载。 pdf在删除名称时呈现,在名称出现时不会呈现。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题。你想要 1.从webroot外部的文件夹中抓取图像 2.将图像放在cfdocument中 3.将cfdocument附加到cfmail

如果是这种情况你需要cfimage而不是img,其余的你可以在Ben Nadel的网站上找到http://www.bennadel.com/blog/1700-Ask-Ben-Creating-A-PDF-And-Attaching-It-To-An-Email-Using-ColdFusion.htm

或展开下面的代码段。

<cfdocument format="pdf" name="mydoc">

    <cfimage action="writeTobrowser" source="c:\temp\test.png" >

</cfdocument>

<cfmail
    from="x@y.com"
    to="y@x.com"
    subject="this is it">
    <cfmailparam
        file="mydoc.pdf"
        type="application/pdf"
        content="#mydoc#"/>
</cfmail>

答案 1 :(得分:2)

要澄清一些注意事项:

cfdocument使用HTTP连接来抓取图像,这就是为什么你不能抓住webroot之外的任何东西。根据我的经验,相对路径是有问题的,因此最好使用绝对路径。如果您想使用来自webroot外部的图像,您需要直接提供它们,如您的示例或@KobbyPemson所做的那样。

添加名称时没有看到PDF的原因是name属性未命名PDF。它是存储PDF的变量的名称。因此,当您提供它时,您告诉CF使用您提供的名称将PDF填入变量。