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

时间:2008-09-16 16:03:04

标签: pdf coldfusion

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

4 个答案:

答案 0 :(得分:17)

您应该使用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作为文件名,但您可能希望使用一些随机或会话生成的字符串作为文件名,以避免因竞争条件导致的问题。

答案 1 :(得分:4)

如果您想完全避免存储PDF,使用不带文件名的cfdocument会直接将pdf(flashpaper)发送到浏览器而不使用cfheader和cfcontent。

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

要获取内容,我可能会使用cfsavecontent包含相同的调用/ includes / etc.生成页面,有两个主要的例外。 cfdocument似乎与外部样式表有问题,因此使用include将样式直接放入文档可能是一个好主意。您可以尝试使用@import - 它适用于某些人。此外,我会注意图像的相对链接,因为它们有时会破坏。

答案 2 :(得分:3)

<cfdocument>方法是完成这项工作的制裁方法,但它并未提供操作现有PDF文档的所有可能方法。我有一个项目,我需要使用预先设计的打印分辨率PDF模板生成优惠券。 <cfdocument>会让我近似输出,但只能嵌入HTML中的位图图像。没错,我可以通过制作一个大图像并在HTML中缩放它来伪造打印分辨率,但原始版本是一个漂亮,干净的矢量图像文件,我想用它代替。

我最终使用了<cfx_pdf>的副本来完成工作。 (Developer's SiteCF Tag Store)这是一个围绕Java PDF库的CF包装器,可以让您操作现有的PDF文档,包括填写PDF表单,设置权限,合并文件,绘制矢量图形,表格和文本,使用自定义字体等,如果你愿意使用它,你可以获得一些非常壮观的结果。

一个缺点是,开发商似乎已将该产品长时间放置在牧场上。开发者网站仍然是版权所有2003,并没有提及任何过去的ColdFusion MX 6.1。我最终不得不打破一些加密的模板,以修复一些错误,并使其工作,因为我需要它。尽管如此,它还是一个强大的工具。

答案 3 :(得分:1)

我不熟悉ColdFusion,但您需要做的是在用户请求它为application / octet-stream时设置页面的Content-Type。这将提示他们每次下载。

希望这有帮助!