将Javascript变量传递给CakePdf

时间:2014-11-14 17:41:50

标签: javascript php jquery cakephp pdf

我需要将一个变量(实际上是大量的HTML,通过JavaScript动态生成)传递给将要输出PDF的“视图”控制器(使用CakePdf插件/ wkHtmlToPdf)。

我通过Ajax尝试过:

    $.ajax({
       type: "POST",
       url: "<?php echo $this->webroot . $this->params["controller"]; ?>/view/"+$id+".pdf",
       data: {id: $id, matrix: $matrix.html()},
       success: function(data){
        console.log(data);      
       }
     });

它似乎确实返回包含PDF流的data,但我无法将其发送到浏览器。 (这是由插件完成的,所以我无法回应它 - 插件可能已经尝试这样做了,但是因为请求是在后台完成的,所以它不起作用。)

我也尝试使用postLink方法生成按钮。

<li><?php  echo $this->Form->postLink(__('Button'), array('action' => 'view', $project['Project']['id'].'.pdf'), null); ?> </li>    

在生成PDF方面,它确实有效。但在这种情况下我不知道如何传递JavaScript变量($ matrix)。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我不确定这是否是最优雅的答案(很可能不是),但我能够通过使用隐藏的表单来提交我的数据来解决这个问题。

    <form action="projects/view/" name="frmPrint" id="frmPrint" style="display:none;" method="post">
                <input id="printData" type="hidden" name="_method" value="POST">
    </form>
    <a id="printMatrix">Print</a></li>

使用JavaScript(jQuery)然后我在提交表单之前随时更改printData。

function printMatrix() {
    var $matrix = $('#matrix'); // the element to be sent via post
    $('#printData').val( $matrix[0].innerHTML ); // updating the hidden input       
    $('#frmPrint').submit(); // submitting the form
}

<a>标记的点击触发器有一个绑定事件:

$(document).on('click', '#printMatrix', function(event){ printMatrix(); });