Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以通过javascript呈现PDF(fPDF)?_Php_Jquery_Pdf_Fpdf - Fatal编程技术网

Php 是否可以通过javascript呈现PDF(fPDF)?

Php 是否可以通过javascript呈现PDF(fPDF)?,php,jquery,pdf,fpdf,Php,Jquery,Pdf,Fpdf,因此,我通过jQuery将一些值传递给服务器,服务器生成PDF garble。事情是这样的: $.post('/admin/printBatch', data, // Some vars and such function(data){ if(data) { var batch = window.open('','Batch Print','width=600,height=600,location=_newtab'); var html = data

因此,我通过jQuery将一些值传递给服务器,服务器生成PDF garble。事情是这样的:

$.post('/admin/printBatch',
data, // Some vars and such
function(data){
    if(data) {

        var batch =  window.open('','Batch Print','width=600,height=600,location=_newtab');
        var html = data; // Perhaps some header info here?!
        batch.document.open();
        batch.document.write(html);
        batch.document.close();

        $( this ).dialog( "close" ); // jQuery UI
    } else {
        alert("Something went wrong, dawg.");
    }
    return false;
});
输出文件大致如下所示:

$pdf->AddPage(null, null, 'A PDF Page');
//....
$pdf->Output('', 'I'); // 'I' sends the file inline to the browser (http://fpdf.org/en/doc/output.htm)
渲染到浏览器窗口的内容:

%PDF-1.3 3 0 obj <> endobj 4 0 obj <> stream ...
%PDF-1.3 3 0 obj endobj 4 0 obj流。。。
我错过了一些重要的事情,我只是知道。。。想法


谢谢,伙计们。

从外观上看,PDF格式合理。因此,我怀疑在通过PHP使用以下函数输出PDF时,您只需设置适当的内容标题:

header('Content-type: application/pdf');
注意:这必须是PHP的第一个输出-如果前面有HTML、空格等,它将不起作用

在理想情况下,您还可以通过设置内容长度等

header('Content-Length: '.filesize($pathToYourPDF));
……或者

header('Content-Length: '.strlen($pdfData));
…如果以编程方式生成PDF

更新


为了澄清,我怀疑您需要更改window.open,以便直接从PHP服务的URL阅读上述内容。(我不太清楚为什么一开始你不这么做,但我想这是一个很好的理由。)

从外观上看,PDF格式合理。因此,我怀疑在通过PHP使用以下函数输出PDF时,您只需设置适当的内容标题:

header('Content-type: application/pdf');
注意:这必须是PHP的第一个输出-如果前面有HTML、空格等,它将不起作用

在理想情况下,您还可以通过设置内容长度等

header('Content-Length: '.filesize($pathToYourPDF));
……或者

header('Content-Length: '.strlen($pdfData));
…如果以编程方式生成PDF

更新


为了澄清,我怀疑您需要更改window.open,以便直接从PHP服务的URL阅读上述内容。(我不太清楚为什么一开始你不这么做,但我想这是一个很好的理由。)

我已经对我的应用程序进行了测试,我的结论是你必须使用iframe(其中show_pdf返回“$pdf->Output(“'I');”):

$.ajax({
url:“http://www.somesite.com/documents/generatePDF",
成功:函数(){
$(“#文档”).html(“”);
}
});
$('dialog document')。dialog('open');

我已经对我的应用程序进行了测试,我的结论是必须使用iframe(其中show_pdf返回“$pdf->Output(“'I');”):

$.ajax({
url:“http://www.somesite.com/documents/generatePDF",
成功:函数(){
$(“#文档”).html(“”);
}
});
$('dialog document')。dialog('open');

我宁愿为弹出窗口设置
URL
,指向输出PDF的php脚本

如果必须这样做,数据uri可能会有所帮助:

var batch =  window.open(
                    'data:application/pdf,'+encodeURIComponent(data),
                    'Batch Print',
                    'width=600,height=600,location=_newtab'
             );

但我还没有测试过它,即使它在普通浏览器中工作,在IE中也肯定会失败。

我宁愿为弹出窗口设置
URL
,指向输出PDF的php脚本

如果必须这样做,数据uri可能会有所帮助:

var batch =  window.open(
                    'data:application/pdf,'+encodeURIComponent(data),
                    'Batch Print',
                    'width=600,height=600,location=_newtab'
             );
但我还没有测试过它,即使它在普通浏览器中工作,在IE中也肯定会失败。

这对我来说很有效: 改变

为了

现在,您应该在javascript文件中获取返回值并打开一个新窗口

success: function( data ) {
    var pdf = JSON.parse(data);
    window.open(pdf);
}
它将使用pdf在您的浏览器上打开一个新选项卡。

这对我很有用: 改变

为了

现在,您应该在javascript文件中获取返回值并打开一个新窗口

success: function( data ) {
    var pdf = JSON.parse(data);
    window.open(pdf);
}

它会在你的浏览器上用pdf打开一个新标签。

如果他把它存储在一个字符串中,这真的有效吗?我想象所有的元数据都丢失了…@Blindy-老实说,我假设他需要更改window.open,直接指向一个执行上述操作的PHP,因为我不相信这些事情不能通过JavaScript设置。隐马尔可夫模型。。。我真的应该更新我的答案来这么说。:-)嗨,伙计们。因此,FPDF类在转储缓冲区之前设置标题:if(php_sapi_name()!='cli'){//We send to a browser header('Content-Type:application/pdf');if(headers_sent())$this->Error('Some data已经输出,无法发送pdf文件');header('Content-Length:'.strleng('this->buffer));header('Content-Disposition:inline;filename=“”.$name.”);标头('Cache-Control:private,max-age=0,必须重新验证');标头('Pragma:public');ini_set('zlib.output_compression','0');}echo$this->buffer;@Middaparka-我没有将window.open指向URL的原因是,我正在生成PDF并通过jQuery ajax回调将其传回…这可能是我必须放弃的。我在各种输入上使用jQuery to.foreach(),然后使用这些值生成PDF和(理论上)将生成的缓冲区传递回浏览器,然后通过JS打开一个新窗口。我将给予Middaparka信任,因为我最终放弃了从ajax调用传递回PDF缓冲区的概念,并对“PHP服务URL”进行了更直接的调用。“如果他将其存储在字符串中,这真的有效吗?我会想象所有元数据都丢失了…@Blindy-老实说,我假设他需要更改窗口。打开直接指向一个执行上述操作的PHP,因为我不相信这些事情不能通过JavaScript设置。嗯…应该更新我的答案::-)嗨,伙计们。因此,FPDF类在转储缓冲区之前设置标题:if(php_sapi_name()!='cli'){//We send to a browser header('Content-Type:application/pdf');if(headers_sent())$this->Error('Some data已经输出,无法发送pdf文件');header('Content-Length:'.strleng('this->buffer));header('Content-Disposition:inline;filename=“”.$name.”);标头('Cache-Control:private,max-age=0,必须重新验证');标头('Pragma:public');ini_set('zlib.output_compression','0');}echo$this->buffer;@Middaparka-我没有将window.open指向URL的原因是,我正在生成PDF并通过jQuery ajax回调将其传回…这可能是我将要使用的