moment.js无法使用wkhtmltopdf

时间:2014-06-30 09:37:56

标签: wkhtmltopdf momentjs

我使用wkhtml2pdf根据提供的HTML生成pdf。在我的HTML页面中,我包括moment.js并使用它的函数来转换日期。

日期在html页面上正确转换,但在wkhtml2pdf处理后,未显示日期。

对wkhtml2pdf的调用如下:

$html_in_string = $this->load->view('phr_print', $phr_print_response, true);
//         Create PDF object.
        $pdf = new WKPDF();

        // Set PDF's HTML
        $pdf->set_html($html_in_string);
        // Convert HTML to PDF
        $pdf->render();
        // Output PDF. The file name is suggested to the browser.
        $pdf->output(WKPDF::$PDF_EMBEDDED, 'phr_print.pdf');

下面的脚本是phr_print.php文件和其他代码。

<script type="text/javascript">
    $(document).ready(function(){

        $(".format-date").each(function(el){
        var timestamp = $(this).data('timestamp');
        if( jQuery.trim(timestamp) != "" ){
            timestamp = timestamp * 1000;
            var format    = $(this).data('format') ;
            format = jQuery.trim(format)==""?"MM/DD/YYYY":format;
            var datetime  = moment( timestamp ).format( format );
            $(this).html( datetime ) ;
        }
    });

    });

</script>

moment.js版本是2.0.0,而wkhtmltopdf版本是0.9.9。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

当您通过浏览器查看时刻正在使用浏览器的时区但是当您从wkhtmltopdf调用时它正在使用默认服务器的时区来解决此问题,请按照以下步骤操作: -

  1. 将您的moment.js更新为最新版本
  2. 将浏览器的时区偏移量传递给用于生成pdf的网址,即new Date().getTimezoneOffset()
  3. 将该时区传递到您的视图并更新您的上述javascript

    $(document).ready(function(){
    
        $(".format-date").each(function(el){
        var timestamp = $(this).data('timestamp');
    
        //Add your zone as a data attribute in dom that you had passed 
        //or store it as a global veriable
    
        var zone = $(this).data('zone') ? $(this).data('zone') : 0;
        if( jQuery.trim(timestamp) != "" ){
            timestamp = timestamp * 1000;
            var format    = $(this).data('format') ;
            format = jQuery.trim(format)==""?"MM/DD/YYYY":format;
            var m = moment(timestamp);
            m = m.zone(zone);
            var datetime  = m.format( format );
            $(this).html( datetime ) ;
        }
    });
    
    });
    
  4. 我希望这能解决您的问题