【问题标题】:Attach FPDF result to PHP Form将 FPDF 结果附加到 PHP 表单
【发布时间】:2014-11-06 19:14:02
【问题描述】:

我一直在用这个撞墙,并搜索了这个网站和其他关于如何修复的网站:

我有两个表格,一个在弹出窗口中,用户填写报价单,然后该对话框关闭并返回主表格以与客户交流并附上报价的 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() 函数实现?)

【问题讨论】:

  • 澄清:不需要将文件保存到服务器,我只需要将它返回到父表单中以发送到客户端。我朝这个方向走是因为我认为它可能会简化结果。

标签: php jquery ajax fpdf


【解决方案1】:

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

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

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% 确定这是否是您对最终输出的期望 - 但这是一种选择... 干杯!

【讨论】:

  • 我想我的代码让我很困惑,我实际上不需要将文件保存到服务器,它只需要进入表单发送到客户端。
【解决方案2】:

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

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

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

之前可能会发送 PHP 标头,请尝试使用 ob_start 函数,以免出现会话问题。

【讨论】:

  • 所以问题在于标题使用输出缓冲区。 ob_start() 在脚本执行期间保持输出。
  • 但它输出的名称正确,所以标题工作正常,对吗?
猜你喜欢
  • 2017-03-28
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 2015-06-08
相关资源
最近更新 更多