0

似乎当我使用<cfsavecontent>标签时,它的输出由服务器提供(没有输出变量),对我来说,这有点违背<cfsavecontent>.

如果这很重要:我的应用程序使用 ColdSpring、ModelGlue 和 Transfer ORM。

这是我在函数中的示例代码:

<cfsavecontent variable="testvar">
<cfinclude template="test.cfm" />
</cfsavecontent>
<cfreturn testvar>

和模板:

<cfdocument format="PDF" pagetype="A4" orientation="portrait" unit="cm">
<cfoutput>
<!--- PDF content here --->
</cfoutput>
</cfdocument>

我的浏览器(谷歌浏览器)正在解析 PDF 内容,而视图甚至还没有加载。我怎样才能最好地防止这种情况发生?

澄清一下:我#testvar#还没有在这段代码中输出变量,尽管它似乎无论如何都会在浏览器中加载模板。

4

3 回答 3

8

为了实现你想要做的事情,你不应该简单地使用name属性<cfdocument>将 PDF 数据放入一个变量中,而不是尝试<cfsavecontent>它吗?

披露:除了概念验证代码和测试之外,我从未使用<cfdocument>过其他任何东西,但这就是我从文档中推断出来的。

于 2013-09-11T09:57:12.067 回答
2

由于我还需要合并多个 PDF 文档,所以我最终做了以下操作。非常感谢 Adam Cameron 为我最初的问题提供了解决方案。

  • 在模板文件中,我使用<cfdocument>带有属性的标签name将 PDF 保存在变量中(感谢 Adam Cameron)
  • 然后,我将所有 PDF 文档以二进制格式存储在一个数组中
  • 在我看来,我通过使用<cfpdf>'merge操作和使用 cfloop 将 PDF 文档合并在一起,在其中循环遍历数组。
  • 最后,我通过使用<cfcontent>和使用变量属性来显示内容toBinary(myPdf)

这让我到了现在的位置。

于 2013-09-13T12:12:37.463 回答
1

cfinclude 将处理 test.cfm 页面,您配置 cfdocument 的方式将导致在您的浏览器中“打开”pdf 文档。您可以通过将文件保存在光盘上来阻止打开此文件:

<cfdocument format="PDF" pagetype="A4" orientation="portrait" unit="cm" filename ="test.pdf" overwrite ="yes">

但这不会阻止在 cfcontent 标记中执行 cfinclude,它只会阻止在浏览器中打开。

您可以观察 cfinclude 作为对服务器的请求,它将始终被执行。

解决方案是在您实际想要生成 pdf 的那一刻调用包含 cfdocument 的 test.cfm 文件的请求。

示例:在客户端使用 javascript 调用报告服务,该服务将生成并弹出带有 pdf 报告的屏幕。

希望这可以帮助。

于 2013-09-11T10:36:00.440 回答