如何使用ajax和TCPDF下载pdf

问题描述 投票:0回答:2

当我运行不带ajax的php脚本作为GET请求时,我的代码工作正常。系统提示我下载渲染的pdf,一切都很好。但是,我需要使用ajax,因为我需要从html页面向php脚本发送比GET请求中可以处理的更多信息。

我需要在我的ajax中放入什么才能使它起作用?

谢谢

js

function makePDF()
{
var x;
if(window.event) // IE8 and earlier
    {
    x=event.keyCode;
    }
else if(event.which) // IE9/Firefox/Chrome/Opera/Safari
    {
    x=event.which;
    }
keychar=String.fromCharCode(x);

alert(keychar);

if (keychar == 'p' || keychar == 'P')
{
    var charSheetHTML = characterSheet.innerHTML;

    $.ajax({ 
     url: 'pdf.php',
     data: {'charactersheet': charSheetHTML,},
     type: 'post',
     success: function (data) {**WHAT_DO_I_PUT_HERE??**},
     error: function (data) { alert("error\n" + data.toString()); }
    });
}
}

pdf.php

<?php
include_once( "bxcharacter/PDFChar.php.inc" );
PDFChar();  
?>

PDFChar.hph.inc

<?php

require_once('./tcpdf/tcpdf.php');

function PDFChar(){


 $pdf = new TCPDF();


 $pdf->AddPage('P');
 $pdf->writeHTML($_POST['charactersheet']);


 $pdf->Output("character.pdf", 'D');


}

?>
php ajax download tcpdf
2个回答
2
投票

这不是ajax解决方案,但是您可以通过这种方式发送数据,如果没有错误发生,则您的页面不会更改。

使用隐藏的输入创建包含要发送的数据的表单元素:

示例格式:

<form id="myForm" method="GET" action="pdf.php">
   <input type="hidden" name="data1" type="hidden" value="your JSON.stringify() data">
</form>

js代码(在您的ajax请求所在的位置调用这些代码:]]

var myForm =  '<form id="myForm" method="GET" action="pdf.php">';
    myForm += '<input type="hidden" name="data1" type="hidden" value="JSON.stringify() data">';
    myForm += '</form>';

$("body").append(myForm);   // temporarily appending 
$("#myData-form").submit(); // submitting form with data
$("#myData-form").remove(); // remove form after submit

并且正如您所说,强制下载将强制文件下载,页面将保持不变。但是,如果发生错误,您的页面将会改变。

我不知道这是否是一种有效的方法,但就我而言,这是可行的。


0
投票

[旧问题,但是我试图用Laravel PDF扩展名做类似的事情,却偶然发现了这个问题。我确实在一个不错的博客文章的帮助下成功地异步完成了此操作]

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.