将 Javascript 变量传递给 CakePdf

Passing Javascript variables to CakePdf

本文关键字:CakePdf Javascript 变量      更新时间:2023-09-26

我需要将一个变量(实际上是大量的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)。

有什么想法吗?

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

    <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(); });