首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WKHTMLTOPDF与冷融

WKHTMLTOPDF与冷融
EN

Stack Overflow用户
提问于 2016-02-27 00:10:30
回答 3查看 1.5K关注 0票数 2

有可能在WKHTMLTOPDF插件中使用coldfusion变量吗?我正在尝试如下,但只收到一个空白PDF。我假设它失败是因为URL变量。

代码语言:javascript
复制
 <cfexecute name="C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe" 
    arguments="c:\inetpub\wwwroot\serviceticket\reports\dropoff_receipt.cfm?ticket_id=#url.ticketID#&signature_id=#check_signature.id# C:\google.pdf"
    timeout="10" /> 

更新1:

将源更改为URL,但也有相同的错误。

代码语言:javascript
复制
    <cfexecute name="C:\Program Files (x86)\wkhtmltopdf\bin\wkhtmltopdf.exe" 
    arguments="'../../serviceticket/reports/dropoff_receipt.cfm?ticket_id=#url.ticketID#&signature_id=#check_signature.id# C:\google.pdf"
    timeout="10" /> 

更新2:

添加完完整的URL后,下面是PDF的截图。它显然不是空的,但是错误消息中URL的路径与我指定的URL有很大的不同。?

-Brian

EN

回答 3

Stack Overflow用户

发布于 2016-03-02 15:29:50

我为WKHTMLTOPDF编写了一个CF9+包装器。它生成命令行参数并将它们按正确的顺序排列。您还可以提供单独的页眉、正文和页脚URL。

http://gamesover2600.tumblr.com/post/125851537339/generating-pdfs-using-coldfusion-wkhtmltopdf

我建议将ColdFusion生成的HTML作为临时静态文件保存到实际的HTML服务器上。这使得WKHTMLTOPDF不必处理w/任何与CF相关的会话/安全障碍,并且可以正确地确定所有相关的MIME类型(如果使用file://参数,则不能这样做)。您可以在PDF生成后删除临时文件,也可以将其保存以供以后查看/重新生成。

对于分页符,请使用CSS page-break-insidepage-break-afterpage-break-before

代码语言:javascript
复制
<CF_WKHTMLTOPDF
  AddDefaultHeader = "0"
  PageURL = "http://#CGI.Server_Name#/test_page.htm"
  filename = "c:\test_page.pdf"
  orientation = "portrait"
  DisableSmartShrinking="yes"
  dpi="96"
  PageSize="letter"
  margintop = "0"
  marginleft = "0"
  marginright = "0"
  marginbottom = "0">

<CFDUMP VAR="#WKHMLTOPDF_Result#">
票数 3
EN

Stack Overflow用户

发布于 2016-02-27 20:23:08

为了扩展评论中的一些项目:

  1. 在插入CFExecute之前,一定要先测试命令行中的任何命令行程序。这允许您识别所需的任何特殊语法(例如引用包含空格的路径等),并识别任何潜在的权限问题。后者不是这里的问题,但它是CFExecute的一个常见问题,因为CF服务在默认情况下倾向于在较低的权限帐户下运行。
  2. 始终使用可用错误变量之一。否则,您可能不会注意到发生的任何错误。(不知道为什么一些最近版本的CF文档没有提到这些变量.)
代码语言:javascript
复制
- `errorVariable` - Variable name. Populate this variable name with any error messages
- `errorFile`     - Absolute File path. Output any text the program writes to `StdErr` to this file. Typically, this translates to mean error messages.

注意:只是知道一些程序,也写状态消息到StdErr流,而不仅仅是错误。因此,一个非空的错误变量或文件并不总是表示问题。WKHTMLToPDF恰好是其中之一,所以请记住这一点。

  1. 关于URL变量,这些变量将在到达程序之前被计算并转换为字符串。类似于数据库查询,程序只会在计算了任何CF变量之后才会看到生成的字符串。只要该参数字符串对被调用的程序有效,您的代码就会正常工作。
  2. 最后,为了让CF服务器对包含在该.cfm文件中的CFML代码进行评估,您必须将其称为URL,即http://servername/scriptname.cfm,而不是本地文件。显然,首先在浏览器中验证目标URL是可访问的。

综合起来,这个简单的测试用例在CF11下工作得很好。

CFExecute

代码语言:javascript
复制
 <cfset url.ticketID = 123>
 <cfset check_signature.id = 456>

 <!--- Note: Arguments containing spaces may need to be enclosed in quotes --->
 <cfexecute name="C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe" 
    arguments="http://localhost:8500/wkhtmlTestPage.cfm?ticket_id=#url.ticketID#&signature_id=#check_signature.id# C:\temp\wkhtmlTest.pdf"
    errorVariable="errorMessage"
    timeout="10"
    /> 

    <cfdump var="#errorMessage#" label="errorVariable">

wkhtmlTestPage.cfm

代码语言:javascript
复制
<cfparam name="URL.ticket_id" default="default ticket_id">
<cfparam name="URL.signature_id" default="default signature_id">

<cfdump var="#URL#">
票数 2
EN

Stack Overflow用户

发布于 2021-07-28 07:51:11

对于冷融合中的WKHTMLTOPDF,我使用的是.cfc包装器(发现它是这里)。在.cfc中唯一要更改的是WKHTMLTOPDF安装的路径。

然后,您可以在coldfusion文件中这样使用它(在这个示例中,使用CF变量发送到WKHTMLTOPDF选项):

代码语言:javascript
复制
<cfscript>
   wkhtmltopdf = new Wkhtmltopdf();
   pdf = wkhtmltopdf.fromURL("[path to]/file.html", {'headerRight': '#Application.headertext#'});
</cfscript>
<cfcontent type="application/pdf" variable="#pdf#"></cfcontent>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35663999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档