Coldfusion 使用 wkhtmltopdf 创建报告
Coldfusion creating reports with wkhtmltopdf
我正在尝试获得有关 wkhtmltopdf.
的一些帮助
我已经下载并安装并尝试让它与我的程序一起正常工作。
我有一个表单,让用户可以选择打印、预览或 excel。当用户选择打印时,我想弹出由查询创建的 html table,具体取决于所选的同事和位置。
现在,当用户选择打印时,它只会在浏览器中显示 table。
<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>--->
我正在尝试像 cfdocument
那样在 <cfif FORM.Format IS "print">
中使用它,我是否执行此 table 一些如何替换我拥有 table 的方式?我将其用作报告,不想将一百万份报告保存到服务器。我想我正在寻求一些帮助,以便顺利起步。任何帮助将不胜感激。
我尝试在 if "print" 中添加此代码:
<cfexecute name="C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe"
arguments="http://path/path/checklist/wkhtmltestpage.cfm C:\temp\wkhtmlTest.pdf"
errorVariable="errorMessage"
timeout="10"
/>
但是这并没有下载它来显示用户打印。
另外由于某种原因它不会进入 link 我正在指定它制作登录页面的 pdf...
WKHTMLTOPDF请求网页时,"user"未认证,CGI.Http_User_Agent包含"wkhtmltopdf"。请求的远程 IP 也将是在服务器上配置的本地 IP。因此,我不直接使用 WKHTMLTOPDF.
处理任何 CFM 脚本
我推荐:
- 使用 CFContent 捕获生成的静态 HTML。
- 使用随机文件名将 HTML 保存到 public 可访问的目录。
- 使用网页路径+随机文件名w/WKHTMLTOPDF命令行
- 生成PDF后,删除随机文件。
此过程将使任何问题更容易解决。我更喜欢创建具有相同随机文件名的静态 BAT 文件,这样我就可以在服务器上手动重新 运行,甚至可以在我的本地 PC 上进一步排除故障并查看程序返回的任何奇怪消息。您还需要传递许多其他命令行设置(边距、方向、页面大小、header/footer、JS 延迟等),因此创建一个包含所有命令行参数的独立 BAT 文件是最好的方法。 (我在另一个问题中注意到您可能正在使用 CFX_Exec。我建议在 CFExecute 上使用它。)
<!--- Simple WKHTMLTOPDF Generation Usage --->
<cfset FileID = CreateUUID()>
<cffile action="WRITE" file="#webroot#\#FileID#.htm" output="#TheHTML#">
<cfexecute name="C:\wkhtmltopdf.exe" arguments="http://mywebsite.com/#FileID#.htm C:\temp\#FileID#.pdf" timeout="30">
<cffile action="DELETE" file="#webroot#\#FileID#.htm">
要传送 PDF 文件,您可以执行 302 重定向到随机 PDF 文件并让您的网络服务器处理 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.
的一些帮助我已经下载并安装并尝试让它与我的程序一起正常工作。
我有一个表单,让用户可以选择打印、预览或 excel。当用户选择打印时,我想弹出由查询创建的 html table,具体取决于所选的同事和位置。
现在,当用户选择打印时,它只会在浏览器中显示 table。
<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>--->
我正在尝试像 cfdocument
那样在 <cfif FORM.Format IS "print">
中使用它,我是否执行此 table 一些如何替换我拥有 table 的方式?我将其用作报告,不想将一百万份报告保存到服务器。我想我正在寻求一些帮助,以便顺利起步。任何帮助将不胜感激。
我尝试在 if "print" 中添加此代码:
<cfexecute name="C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe"
arguments="http://path/path/checklist/wkhtmltestpage.cfm C:\temp\wkhtmlTest.pdf"
errorVariable="errorMessage"
timeout="10"
/>
但是这并没有下载它来显示用户打印。
另外由于某种原因它不会进入 link 我正在指定它制作登录页面的 pdf...
WKHTMLTOPDF请求网页时,"user"未认证,CGI.Http_User_Agent包含"wkhtmltopdf"。请求的远程 IP 也将是在服务器上配置的本地 IP。因此,我不直接使用 WKHTMLTOPDF.
处理任何 CFM 脚本我推荐:
- 使用 CFContent 捕获生成的静态 HTML。
- 使用随机文件名将 HTML 保存到 public 可访问的目录。
- 使用网页路径+随机文件名w/WKHTMLTOPDF命令行
- 生成PDF后,删除随机文件。
此过程将使任何问题更容易解决。我更喜欢创建具有相同随机文件名的静态 BAT 文件,这样我就可以在服务器上手动重新 运行,甚至可以在我的本地 PC 上进一步排除故障并查看程序返回的任何奇怪消息。您还需要传递许多其他命令行设置(边距、方向、页面大小、header/footer、JS 延迟等),因此创建一个包含所有命令行参数的独立 BAT 文件是最好的方法。 (我在另一个问题中注意到您可能正在使用 CFX_Exec。我建议在 CFExecute 上使用它。)
<!--- Simple WKHTMLTOPDF Generation Usage --->
<cfset FileID = CreateUUID()>
<cffile action="WRITE" file="#webroot#\#FileID#.htm" output="#TheHTML#">
<cfexecute name="C:\wkhtmltopdf.exe" arguments="http://mywebsite.com/#FileID#.htm C:\temp\#FileID#.pdf" timeout="30">
<cffile action="DELETE" file="#webroot#\#FileID#.htm">
要传送 PDF 文件,您可以执行 302 重定向到随机 PDF 文件并让您的网络服务器处理 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">