Android WebView封装ColdFusion应用后CF生成PDF无法作为邮件附件求解
解决方案
1. 首先验证PDF生成是否正常
在你的<cfdocument>标签之后、<cfmail>标签之前添加调试代码,将生成的PDF二进制流直接写入CF服务器本地,验证生成的PDF是否合法:
<!-- 注意替换为你CF服务器上有读写权限的实际路径 --> <cffile action="write" file="D:\CF_temp\Alert_test.pdf" output="#Alert#" />
运行流程后手动打开该PDF文件,如果无法打开/文件为空,说明问题确实出在<cfdocument>生成环节。
2. 修复<cfdocument>内容合法性问题
ColdFusion 9的<cfdocument>对HTML语法规范要求极高,以下问题都会导致PDF生成失败:
- 未闭合的HTML标签、不规范的CSS语法
- 引用了相对路径的图片、CSS等外部资源
- 你的
<!--- Some Code --->部分存在执行报错的逻辑
建议先将<cfdocument>包裹的动态内容单独输出为静态HTML文件,确认浏览器可以正常渲染后再交给<cfdocument>生成PDF,所有外部资源建议直接内嵌到代码中,不要使用相对路径调用。
3. 修正<cfmailparam>参数
ColdFusion 9中通过content属性传递二进制附件时,需要明确指定MIME类型和附件属性,修改你的<cfmailparam>为以下写法:
<cfmailparam file="Alert.pdf" content="#Alert#" type="application/pdf" disposition="attachment" />
4. 检查CF服务权限与参数传递
- 确认ColdFusion运行的服务账户对CF临时目录(默认路径为
ColdFusion9安装目录\runtime\servers\coldfusion\SERVER-INF\temp)有读写权限,<cfdocument>生成PDF时需要向临时目录写入缓存文件,权限不足会静默失败 - 在CF代码开头添加参数日志,确认WebView提交的
form.prodDate、form.fromTime、form.toTime等参数没有缺失:
<cflog file="pdf_generate_debug" text="接收的表单参数:#serializeJSON(form)#" />
如果参数为空,ListFirst、dateFormat函数会抛出异常,直接中断PDF生成流程。
内容的提问来源于stack exchange,提问作者Tayyab Hussain
相关产品推荐
相关产品推荐

