【问题标题】:Generating PDFs in ColdFusion在 ColdFusion 中生成 PDF
【发布时间】:2015-06-23 09:12:34
【问题描述】:

我有一个包含许多屏幕/页面的客户和产品管理应用程序。我希望某些页面可以打印并导出为 PDF。

要打印一个文档,它是一个简单的例子,即为@Print 媒体提供一个 CSS 样式表,它剥离了很多常规样式。但是,在生成 PDF 时,我注意到 <cfdocument><cfhtmltopdf> 标签都希望呈现整个 HTML 页面(包括 <head> 标签)。

这意味着它不会将 PDF 的用途识别为用于打印,也不会采用 @Print 样式。目前,我必须制作一个单独的 makepdf.cfm 页面并重复我要导出的页面的 HTML,以及仅包含打印 CSS 样式表。

这似乎有点疯狂,因为每次我更改可打印/导出为 pdf 的主应用程序屏幕时,我都必须更新 makepdf.cfm 页面。

有没有更好的方法来实现我想要做的事情?

【问题讨论】:

    标签: pdf coldfusion coldfusion-11


    【解决方案1】:

    我不确定你的 CSS 是如何组织的,但我遇到了类似的情况,我需要在屏幕上打印各种内容。我的解决方案是在 Javascript 中对 CFC 使用 AJAX 调用 (CFAJAXPROXY),以便使用 DIV 内容设置 CF 会话变量,然后调用我的打印页面,该页面将使用 cfhtmltopdf 标签输出内容。我的经验是 CSS 必须包含在您使用的任何 PDF 生成标签中。

    例如:

     <div id="myContent">content on my page to print</div> 
    

    还有一个打印按钮

     <button onclick="printContent('myContent')">Print</button> 
    

    onclick 在 Javascript 中调用如下:

    var printContent = function(_contentDiv){
       var _content = $('#' + _contentDiv).html();  
       var _setContent = _cfc.setContent(_content);  
       window.location.href = 'printPage.cfm';  
     } 
    

    “_cfc”在 cfajaxproxy 调用中定义。

    将被调用的 CF 函数如下所示:

    <cfcomponent>  
        <cffunction access="remote" name="setContent" returntype="string">  
           <cfargument name="_content" required="yes" type="string">  
           <cfset session.content = _content>  
           <cfreturn "whateveryouwant">  
         </cffunction>  
     </cfcomponent>  
    

    而 printPage.cfm 可能看起来像这样(我使用 Bootstrap 作为我的 CSS):

     <cfhtmltopdf>  
         <link href="css/bootstrap.css" rel="Stylesheet" type="text/css"></link>  
         <cfoutput>#session.content#</cfoutput>  
     </cfhtmltopdf>  
    

    这显然是一个简单的解决方案,但它确实有效。我想如果您需要不同的 CSS 页面,您也可以将链接标签中的 HREF 值设置为会话参数

    【讨论】:

    • 谢谢snackboy,它很有趣。我的问题是我必须为 PDF 生成和 HTML 页面分别维护代码,即使两者都显示相同的内容。可能会导致错误...我希望有一种超级聪明的方法,但我想不会。
    • 你能创建一个 CFC 函数来呈现 CFSAVECONTENT 中的内容吗?然后,您可以从模板或 pdf 呈现页面调用该内容。
    【解决方案2】:

    假设您在头部使用链接标签,您可以尝试在样式标签中使用 cfinclude 来包含 css 文件。 cfdocument 似乎使用内联样式做得更好。

    我最终传递了一个 url 标志 pdf=0/1,然后在模板中简单地在您想要切换的任何内容周围添加一个 cfif。

    此时我正试图让它识别 FontAwesome 和 Google Charts。到目前为止似乎有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      • 2010-09-26
      • 2018-02-06
      相关资源
      最近更新 更多