将FPDF结果附加到PHP表单

时间:2014-11-06 19:14:02

标签: php jquery ajax fpdf

我一直用这个撞墙撞墙,并搜索了这个网站和其他人如何解决:

我有两个表单,一个是用户填写报价的弹出窗口,然后该对话框关闭,然后返回主表单以便与客户进行通信并附上报价的PDF。一切正常,直到我尝试不在新窗口中打开或附加到现有表单。我已成功通过ajax调用它,但我没有收到结果,尽管它在服务器上生成的临时文件是正确的。

JS向makepdf.php提交引用:

    function generatepdf(forminfo) {
                    $.ajax({
                        url: $(form).attr("action"),
                        type: 'POST',
                        data: forminfo,
                        beforeSend: function() {
                            $("#qmessage").html("Preparing quote..");
                        },
                        success: function(data) {
                            $("#qmessage").html(data);
                            //$('.multifile:last').val(data);
                        }
                    });
                };

makepdf.php的PHP:

$pdf_filename = tempnam(sys_get_temp_dir(), "pdf");
if(!file_exists($pdf_filename) || is_writable($pdf_filename)){
        $pdf->Output($pdf_filename, "F");
    } else { 
        exit("Path Not Writable");
    }
$pdf->Output($pdf_filename, F);
echo $pdf_filename;

它不是将结果写入qmessage div,而是将文件保存在服务器上。我没有看到将服务器端文件附加回现有<input type="file" class="multifile">字段的方法。

编辑:两个表单都在同一页面上,因此在它们之间传递变量不是问题。它将FPDF输出返回到页面并将其附加到另一个表单(应该可以通过.val()函数执行吗?)

2 个答案:

答案 0 :(得分:0)

将其附加到表单中的问题是文件已经是服务器端(它创建的临时文件......)

您可以做的是将输出(该文件的文件路径)附加到隐藏的输入以在您的第二个表单上处理...例如:

AJAX:

$.ajax({
  url: $(form).attr("action"),
  type: 'POST',
  data: forminfo,
  beforeSend: function() {
      $("#qmessage").html("Preparing quote..");
  },
  success: function(data) {
      $("#hidden_input").val(data);
  }
});

makepdf.php的PHP:

$pdf_filename = tempnam(sys_get_temp_dir(), "pdf");
if(!file_exists($pdf_filename) || is_writable($pdf_filename)){
    $pdf->Output($pdf_filename, "F");
} else { 
    exit("Path Not Writable");
}
$pdf->Output($pdf_filename, F);
echo $_SERVER['DOCUMENT_ROOT'] . "/path/to/" . $pdf_filename;

然后是次要形式:

...
-- HTML the jQuery will set the value --
<input type="hidden" name="generatedpdf" id="hidden_input" value="">

最后处理器PHP:

...
$file_location = $_POST['generatedpdf'];
// Code here to deal with pdf
// after finished - remove temperary pdf:
unlink($file_location);
...

不是100%确定这是否是您对最终输出的预期 - 但它是一个选项...... 干杯!

答案 1 :(得分:0)

你说它是在服务器上创建文件,这意味着FPDF库已正确安装并正常工作。

现在问题是将输出作为文件名发送,以便javascript可以使用AJAX请求打印它。

请检查您是否通过在浏览器中键入url和参数直接执行,FPDF库是否返回您要查找的文件名。如果不是,则可能存在php头的问题,这些问题在文件输出之前发送。

之前可能会发送PHP标头,尝试使用ob_start函数,这样就不会出现会话问题。