如何将ColdFusion页面转换为PDF下载?

时间:2020-03-05 18:56:24  来源:igfitidea点击:

我想将我的CFM页面生成的HTML转换为PDF,并在导航到我的页面时让用户看到标准的"另存为"提示。

解决方案

回答

我对ColdFusion不太熟悉,但是我们需要做的是在用户要求页面为应用程序/八位字节流时​​设置页面的Content-Type。这将提示他们每次下载。

希望这可以帮助!

回答

我们应该使用cfdocument标记(格式为" PDF")将PDF放置在要生成的页面周围,以生成PDF。我们将需要指定文件名属性,否则文档将直接流到浏览器。

将内容另存为PDF后,请结合使用cfheader和cfcontent将PDF作为附件输出("另存为")并将文件添加到响应流中。我还在cfcontent标记上添加了deletefile =" Yes",以保持文件系统中文件的清洁。

<cfdocument format="PDF" filename="file.pdf" overwrite="Yes">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Hello World</title>
</head>
<body>
    Hello World
</body>
</html>
</cfdocument>
<cfheader name="Content-Disposition" value="attachment;filename=file.pdf">
<cfcontent type="application/octet-stream" file="#expandPath('.')#\file.pdf" deletefile="Yes">

顺便说一句:在下面的示例中,我仅使用file.pdf作为文件名,但是我们可能希望使用一些随机的或者会话生成的字符串作为文件名,以避免由于竞争条件而产生问题。

回答

如果我们想完全避免存储PDF,那么使用不带文件名的cfdocument会将pdf文件(闪光纸)直接发送到浏览器,而无需使用cfheader和cfcontent。

警告:与使用cfheader / cfcontent一样,我们需要在将缓存刷新到浏览器之前执行此操作,因为它基本上是在做相同的事情而不必存储文件。

为了获得内容,我可能会使用cfsavecontent包裹在相同的调用/ includes / etc中。会生成页面,但有两个主要例外。 cfdocument似乎与外部样式表有关,因此使用include将样式直接放入文档中可能是一个好主意。我们可以尝试使用@import代替-它对某些人有用。另外,对于图像的相对链接,我会特别小心,因为它们有时会断开。

回答

<cfdocument>方法是完成任务的认可方法,但是,它不能提供处理现有PDF文档的所有可能方式。我有一个项目,需要使用预先设计的打印分辨率PDF模板生成优惠券。 &lt;cfdocument>可以让我近似输出,但仅适用于嵌入HTML的位图图像。是的,我可以通过制作大图像并将其缩放为HTML来伪造打印分辨率,但是原始图像是一个漂亮,干净的矢量图像文件,我想改用它。

我最终使用了<cfx_pdf>的副本来完成工作。 (开发人员网站,CF标签存储)它是围绕Java PDF库的CF包装程序,可让我们处理现有的PDF文档,包括填写PDF表单,设置权限,合并文件,绘制矢量图形,表格和文本,使用自定义字体,等等。如果我们愿意使用它,则可以获得一些非常出色的结果。

一个缺点是,开发人员似乎已将该产品长时间放牧。开发人员站点的版权仍为2003,并且未提及ColdFusion MX 6.1以后的任何内容。我最终不得不破坏一些加密的模板,以便修复几个错误并使其能够按需工作。但是,它是一个强大的工具。