将变量发送到 tcpdf jQuery
Send variable to tcpdf jQuery
我想通过 jQuery 将一些 html 内容发送到 tcpdf 并创建一个 pdf。
我的 index.php:
里有这个
$('#test').click(function() {
var result='hello';
$.ajax({
type: 'POST',
url: 'pdf.php',
data: {result: result},
});
})
和 pdf.php:
<?php
$result = '';
if(isset($_POST['result'])) {
$result = $_POST['result'];
}
require_once('tcpdf/tcpdf.php');
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetTitle('Production sheet');
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH);
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->SetFont('helvetica', '', 9);
$pdf->AddPage();
$html = '
<h1>TEST</h1>
<table>
<tr><td>'.$result.'</td></tr>
</table>
';
$pdf->writeHTML($html, true, 0, true, 0);
$pdf->lastPage();
$pdf->Output('test.pdf', 'I');
?>
如果我定义变量结果 ($result = "Hello";
) 并且我 运行 直接 pdf.php 它工作完美。似乎出于某种原因,我的 post 没有被 pdf.php 使用...一些想法?
谢谢!
您正在使用
$pdf->Output('test.pdf', 'I');
I
表示目的地:内联。参见 manual
您要么必须使用选项 F
并在服务器上指定一个文件名,然后将用户重定向到该文件名,要么使用选项 D
强制下载。
类似于:
$('#test').click(function() {
var result='hello';
window.open('/pdf.php?result='+result, '_blank');
});
和
<?php
$result = '';
if(isset($_GET['result'])) {
$result = $_GET['result'];
}
.....
$pdf->Output('test.pdf', 'D');
编辑
对于大量数据,您最好使用您正在试验的 ajax 方法,但是在 ajax 响应中处理返回的 pdf 文档会很棘手,这可能是可行的用 javascript file reader
更简单的选项看起来像这样:
$('#test').click(function() {
var result='hello';
$.ajax({
type: 'POST',
url: 'pdf.php',
data: {result: result},
}).done(function(filename){
$('#testDiv').html('<a target="_blank" href="/'+filename+'">download your pdf</a>');
});
})
和
<?php
$result = '';
if(isset($_POST['result'])) {
$result = $_POST['result'];
}
....
$filename = time().'.pdf';
$pdf->Output($filename, 'F');
echo $filename;
所以发生的事情是您在服务器上创建 pdf 文件并使用 ajax 将 link 附加到页面,这不是最佳解决方案,因为它将所有 pdf 文件留在服务器上并且用户只能看到 link 一次。
希望能给你一些想法。
我确实说过我太累了。正如@andrew 所指出的那样,您使用的是内联输出而不是下载,并且在 Ajax 调用中实际上不起作用。如果您想下载 PDF 和 POST 值,请阅读评论,这是我的建议:
1) 在您的 HTML
中创建一个表单
<form action='pdf.php' method=post target=_blank id=myform>
</form>
2) 如果您需要使用 Javascript 添加数据,请按如下方式更改您的 jQuery 代码:
$('#test').click(function() {
var result='hello';
$("#my_form").append("<input type=hidden name=result value='"+result+'>");
$("#my_form").submit();
});
3) 调整 pdf.php 以使用 $_POST
而不是 $_GET
您应该考虑是否真的需要 jQuery。如果 javascript 中的 result
变量是根据用户输入的表单值填充的,您可能只需重新设计页面并将所有内容包含在 form
中,而无需任何额外的 [=31] =] 完全没有。
我想通过 jQuery 将一些 html 内容发送到 tcpdf 并创建一个 pdf。 我的 index.php:
里有这个$('#test').click(function() {
var result='hello';
$.ajax({
type: 'POST',
url: 'pdf.php',
data: {result: result},
});
})
和 pdf.php:
<?php
$result = '';
if(isset($_POST['result'])) {
$result = $_POST['result'];
}
require_once('tcpdf/tcpdf.php');
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetTitle('Production sheet');
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH);
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->SetFont('helvetica', '', 9);
$pdf->AddPage();
$html = '
<h1>TEST</h1>
<table>
<tr><td>'.$result.'</td></tr>
</table>
';
$pdf->writeHTML($html, true, 0, true, 0);
$pdf->lastPage();
$pdf->Output('test.pdf', 'I');
?>
如果我定义变量结果 ($result = "Hello";
) 并且我 运行 直接 pdf.php 它工作完美。似乎出于某种原因,我的 post 没有被 pdf.php 使用...一些想法?
谢谢!
您正在使用
$pdf->Output('test.pdf', 'I');
I
表示目的地:内联。参见 manual
您要么必须使用选项 F
并在服务器上指定一个文件名,然后将用户重定向到该文件名,要么使用选项 D
强制下载。
类似于:
$('#test').click(function() {
var result='hello';
window.open('/pdf.php?result='+result, '_blank');
});
和
<?php
$result = '';
if(isset($_GET['result'])) {
$result = $_GET['result'];
}
.....
$pdf->Output('test.pdf', 'D');
编辑
对于大量数据,您最好使用您正在试验的 ajax 方法,但是在 ajax 响应中处理返回的 pdf 文档会很棘手,这可能是可行的用 javascript file reader
更简单的选项看起来像这样:
$('#test').click(function() {
var result='hello';
$.ajax({
type: 'POST',
url: 'pdf.php',
data: {result: result},
}).done(function(filename){
$('#testDiv').html('<a target="_blank" href="/'+filename+'">download your pdf</a>');
});
})
和
<?php
$result = '';
if(isset($_POST['result'])) {
$result = $_POST['result'];
}
....
$filename = time().'.pdf';
$pdf->Output($filename, 'F');
echo $filename;
所以发生的事情是您在服务器上创建 pdf 文件并使用 ajax 将 link 附加到页面,这不是最佳解决方案,因为它将所有 pdf 文件留在服务器上并且用户只能看到 link 一次。
希望能给你一些想法。
我确实说过我太累了。正如@andrew 所指出的那样,您使用的是内联输出而不是下载,并且在 Ajax 调用中实际上不起作用。如果您想下载 PDF 和 POST 值,请阅读评论,这是我的建议:
1) 在您的 HTML
中创建一个表单<form action='pdf.php' method=post target=_blank id=myform>
</form>
2) 如果您需要使用 Javascript 添加数据,请按如下方式更改您的 jQuery 代码:
$('#test').click(function() {
var result='hello';
$("#my_form").append("<input type=hidden name=result value='"+result+'>");
$("#my_form").submit();
});
3) 调整 pdf.php 以使用 $_POST
而不是 $_GET
您应该考虑是否真的需要 jQuery。如果 javascript 中的 result
变量是根据用户输入的表单值填充的,您可能只需重新设计页面并将所有内容包含在 form
中,而无需任何额外的 [=31] =] 完全没有。