Coldfusion使用wkhtmltopdf创建报告
我正试图在这方面得到一些帮助 我已经下载并安装了它,并试图让它与我的程序正常工作 我有一个表单,用户可以选择打印、预览或excel。当用户选择打印时,我希望弹出由查询创建的html表,该表取决于所选的关联和位置 现在,当用户选择打印时,它只是在浏览器中显示此表Coldfusion使用wkhtmltopdf创建报告,coldfusion,wkhtmltopdf,Coldfusion,Wkhtmltopdf,我正试图在这方面得到一些帮助 我已经下载并安装了它,并试图让它与我的程序正常工作 我有一个表单,用户可以选择打印、预览或excel。当用户选择打印时,我希望弹出由查询创建的html表,该表取决于所选的关联和位置 现在,当用户选择打印时,它只是在浏览器中显示此表 <cfif FORM.Format IS "print"> <!---<cfdocument format="pdf" scale="75" backgroundvisible="yes" overwrite="
<cfif FORM.Format IS "print">
<!---<cfdocument format="pdf" scale="75" backgroundvisible="yes" overwrite="no" fontembed="yes">--->
<link rel="stylesheet" href="css/form-table.css"/>
<!---<cfdocumentitem type="header" >
<cfoutput><p align= "right">Page #cfdocument.currentpagenumber# of #cfdocument.totalpagecount#</p></cfoutput>
</cfdocumentitem> --->
<div class="RTable">
<h3 class="RTable-h3">CHECKLIST STATS</h3>
<cfoutput>
<ul class="RTable-headingList">
<li>FROM <span class="RTable-headingList-date">#dateFormat(date1, 'mm/dd/yyyy')#</span> TO <span class="RTable-headingList-date">#dateFormat(date2, 'mm/dd/yyyy')#</span></li>
<li>LOCATIONS: <span class="RTable-headingList-locations">#locList#</span></li>
</ul>
</cfoutput>
<table class="table table-hover RTable-table">
<thead>
<tr>
<th>Associate Name</th>
<th>Location</th>
<th><small>Generated by</small>Associate</th>
<th><small>Generated by</small>Selected Location(s)</th>
<th><small>Associate Percentage of</small>Location Total</th>
</tr>
</thead>
<tbody>
<cfoutput query="GetEmployeeInfo">
<tr>
<td class="RTable-name"><cfif rnA EQ 1><strong>#assoc_name#</strong></cfif></td>
<td class="RTable-location"><cfif rnL EQ 1>#trans_location#</cfif></td>
<td>#checklistsByAssocLoc#</td>
<td>#assocChecklistsByLoc#</td>
<td>#DecimalFormat(totalChecklistsByAssocLocPct)# %</td>
<!---<td> rnA: #rnA# | rnL: #rnL# | rnTotAssoc: #rnTotAssoc# </td> --->
</tr>
<cfif rnTotAssoc EQ 1>
<tr class="RTable-row-associate-total">
<td>Associate Total</td>
<td></td>
<td>#totalChecklistsByAssoc#</td>
<td>#totalAssocChecklistsByAllFilteredLoc#</td>
<td>#DecimalFormat(totalChecklistsByLocPct)# %</td>
</tr>
</cfif>
</cfoutput>
</tbody>
</table>
</div>
<!---</cfdocument>--->
但下载它并不是为了向用户显示要打印的内容
此外,由于某些原因,它不去链接,我指定它制作登录页面的pdf…当WKHTMLTOPDF请求该网页时,“用户”未经验证,CGI.Http_user_代理包含“WKHTMLTOPDF”。请求的远程IP也将是服务器上配置的本地IP。因此,我不直接使用WKHTMLTOPDF处理任何CFM脚本 我建议:
- 使用CFContent捕获生成的静态HTML
- 使用随机文件名将HTML保存到公共可访问目录
- 使用web路径+随机文件名w/WKHTMLTOPDF命令行
- 生成PDF后,删除随机文件
要交付PDF文件,您可以执行302重定向到随机PDF文件,并让Web服务器处理mimetype(然后稍后删除),或者使用CFContent使用ColdFusion线程交付并自动删除它:
<!--- Return PDF to browser inline or as downloadable attachment --->
<!--- <cfheader name="content-disposition" value="attachment; filename=""NiceFilename.pdf"""> --->
<cfheader name="content-disposition" value="inline; filename=""NiceFilename.pdf""">
<cfcontent type="application/pdf" file="C:\temp\#FileID#.pdf" deletefile="Yes">
当WKHTMLTOPDF请求网页时,“用户”未经过身份验证,CGI.Http_user_代理包含“WKHTMLTOPDF”。请求的远程IP也将是服务器上配置的本地IP。因此,我不直接使用WKHTMLTOPDF处理任何CFM脚本 我建议:
- 使用CFContent捕获生成的静态HTML
- 使用随机文件名将HTML保存到公共可访问目录
- 使用web路径+随机文件名w/WKHTMLTOPDF命令行
- 生成PDF后,删除随机文件
要交付PDF文件,您可以执行302重定向到随机PDF文件,并让Web服务器处理mimetype(然后稍后删除),或者使用CFContent使用ColdFusion线程交付并自动删除它:
<!--- Return PDF to browser inline or as downloadable attachment --->
<!--- <cfheader name="content-disposition" value="attachment; filename=""NiceFilename.pdf"""> --->
<cfheader name="content-disposition" value="inline; filename=""NiceFilename.pdf""">
<cfcontent type="application/pdf" file="C:\temp\#FileID#.pdf" deletefile="Yes">
wkhtmltopdf只需调用您告诉它的页面即可。如果这是在受保护的登录之后,那么您将获得登录页面,因为没有从客户端传递到cfexecute的状态。尽管你可以在URL或其他地方传递一个令牌。此表需要位于使用wkhtmltopdf配置的页面中,然后另一个页面调用cfexecute来打印它。James Moberg为wkhtmltopdf定制的CF标签可以派上用场——这里也有一些想法——如果你对任何新工具都不熟悉,请使用简单的东西熟悉它。wkhtmltopdf只需调用你告诉它的页面。如果这是在受保护的登录之后,那么您将获得登录页面,因为没有从客户端传递到cfexecute的状态。尽管你可以在URL或其他地方传递一个令牌。此表需要位于使用wkhtmltopdf配置的页面中,然后另一个页面调用cfexecute来打印它。James Moberg为wkhtmltopdf定制的CF标签可以派上用场——这里也有一些想法——如果你对任何新工具都不熟悉,请使用简单的东西熟悉它。
<!--- Return PDF to browser inline or as downloadable attachment --->
<!--- <cfheader name="content-disposition" value="attachment; filename=""NiceFilename.pdf"""> --->
<cfheader name="content-disposition" value="inline; filename=""NiceFilename.pdf""">
<cfcontent type="application/pdf" file="C:\temp\#FileID#.pdf" deletefile="Yes">