Php 是否可以通过javascript呈现PDF(fPDF)?
因此,我通过jQuery将一些值传递给服务器,服务器生成PDF garble。事情是这样的: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
$.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回调将其传回…这可能是我将要使用的