2014-11-06 60 views
0

我一直在敲我的头靠在这个墙上和搜查本网站和其他关于如何解决:附加FPDF结果PHP形式

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

JS提交报价,以makepdf.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格,但在保存文件:

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服务器。我没有看到一种合理的方式将服务器端文件附加到现有的<input type="file" class="multifile">字段中。

编辑:这两种形式都在同一页上,所以将它们之间的变量不会是一个问题。它是获得FPDF输出回到页面,并将其附加到其他窗体(这应该可以通过.val()函数执行?)

+0

澄清:没有要求将文件保存到服务器,我只需要将其重新发回父窗体发送到客户端。我去了这个方向,因为我认为这可能会简化结果。 – 2014-11-06 19:41:28

回答

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%肯定,如果这是你期待什么最后的输出 - 但这是一个选项... 干杯!

+0

我想我的代码让人感到困惑,我实际上并不需要将文件保存到服务器,它只需要进入表单发送到客户端。 – 2014-11-06 19:40:14

0

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

现在问题出现与发送输出文件名,这样的JavaScript可以使用AJAX请求打印出来。

请检查如果你只是通过键入浏览器的URL和参数直接执行,并FPDF库中返回文件你正在寻找的名字。如果不是,那么php头文件可能会出现问题,这是在文件输出之前发送的。

PHP头可以被发送之前,尝试使用ob_start功能,这样就可能不会出现与会议的问题。

+0

文件名已正确返回。 – 2014-11-06 19:51:53

+0

所以问题与标题使用输出缓冲区。 ob_start()在执行脚本期间保持输出。 – 2014-11-06 19:55:22

+0

但它输出正确的名称,所以标题正在工作,正确? – 2014-11-06 20:19:13