Coldfusion使用wkhtmltopdf创建报告

时间:2017-10-23 20:11:38

标签: coldfusion wkhtmltopdf

我正在尝试使用wkhtmltopdf.

获得一些帮助

我已下载并安装并尝试使其与我的程序一起正常工作。

我所拥有的是一个允许用户选择打印,预览或优秀的表单。当用户选择打印时,我想要弹出由查询创建的html表,具体取决于所选择的关联和位置。

现在,当用户选择打印时,只需在浏览器中显示该表。

<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">中使用它{I}我是否可以在这个表中找到如何替换我的表格?我使用它作为报告,不想将一百万个报告保存到服务器。我想我正在寻找一些帮助,让你的右脚下车。任何帮助将不胜感激。

我尝试在if&#34; print&#34;:

中添加此代码
<cfexecute name="C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe" 
    arguments="http://path/path/checklist/wkhtmltestpage.cfm C:\temp\wkhtmlTest.pdf"
    errorVariable="errorMessage"
    timeout="10"
    /> 

但是这不会下载它以显示用户打印。

也是出于某种原因它没有进入链接我指定它制作登录页面的pdf ...

1 个答案:

答案 0 :(得分:5)

当WKHTMLTOPDF请求网页时,“用户”未经过身份验证,CGI.Http_User_Agent包含“wkhtmltopdf”。请求的远程IP也将是服务器上配置的本地IP。因此,我不会使用WKHTMLTOPDF直接处理任何CFM脚本。

我建议:

  • 使用CFContent捕获生成的静态HTML。
  • 将HTML保存到具有随机文件名的公共可访问目录。
  • 使用带有WKHTMLTOPDF命令行的Web路径+随机文件名。
  • 生成PDF后,删除随机文件。

此过程将使任何问题更容易进行故障排除。我更喜欢使用相同的随机文件名创建静态BAT文件,以便我可以在服务器上手动重新运行,甚至可以在我的PC上本地重新运行,以进一步排除故障并查看程序返回的任何奇怪消息。您还需要传递许多其他命令行设置(边距,方向,页面大小,页眉/页脚,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">