将 CFM 页面下载为 Word 文档

Download CFM page as Word Doc

我正在尝试使用 cfinclude 将 .cfm 的输出呈现为 Word 文档,如下所示:

<cfheader name="content-disposition" value="attachment; filename=""MyDocument.doc""" />
<cfcontent type="application/msword" reset="true">
<cfinclude template="PageToDownload.cfm">

由于 cfinclude 将 .cfm 输出为 html,这在理论上应该可行。但是,这样做会下载一个文档,该文档在 Word 中出现错误“A text/xml 声明可能仅在输入的最开始出现。”我用 Notepad++ 检查了下载的文档,并在顶部看到了这个:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
...

如果我删除空行、?xml 和 !DOCTYPE(基本上删除了 <html 之前的所有内容),此文档将在 Word 中打开。是否可以剥离 xml 和 DOCTYPE 标签并使用 cfinclude<html 开始?或者,我应该采取另一种方法吗?

使用您的技术,您可以使用 <cfsavecontent>PageToDownload.cfm 的内容放入变量中。一旦内容在所述变量中,您可以在开始 <html> 标记之前去掉所有内容,然后在 <cfheader><cfcontent> 语句之后 <cfoutput> 该变量。

您的代码可能如下所示。

<!--- Save contents of file to download into fileContents variable --->
<cfsavecontent variable="fileContent">
    <cfinclude template="PageToDownload.cfm">
</cfsavecontent>

<!--- Strip out contents prior to the opening <html> tag --->
<cfset pos = findNoCase("<html", fileContent)>
<cfset fileContent = mid(fileContent, pos, 1000000)>

<!--- Output fileContent after the header statements --->
<cfheader name="content-disposition" value="attachment; filename=""MyDocument.doc""" />
<cfcontent type="application/msword" reset="true">
<cfoutput>#fileContent#</cfoutput>