2011-01-06 28 views
0

所以,我通過jQuery將一些值傳遞給服務器,這會生成PDF格式的垃圾文件。它是這樣的:是否可以通過JavaScript呈現PDF(fPDF)?

$.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 ... 

我失去了一些東西重要,我只知道它......想法?

謝謝,夥計們。

+0

Hello LaRosee,你有沒有解決上述問題的方法? – user98454 2011-03-16 11:59:10

回答

3

從外觀看,PDF格式合理。因此,我懷疑你只需要簡單設置,當你通過PHP使用header功能輸出PDF相應的內容標題:

header('Content-type: application/pdf'); 

注:此必須是從PHP輸出的第一個 - 它如果有前面的HTML,空白空間等

在一個理想的世界將無法正常工作,你想也設置內容長度等通過...

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

...或者。 ..

header('Content-Length: '.strlen($pdfData)); 

...如果您以編程方式生成PDF。

UPDATE

爲了澄清,我懷疑你需要改變你的window.open直接讀取從PHP服務的URL爲上述工作上面。 (不太清楚爲什麼你不只是這樣做,但我想這是一個很好的理由。)

+0

如果他將它存儲在一個字符串中,這真的會起作用嗎?我想所有的元數據都會丟失...... – Blindy 2011-01-06 21:52:21

+0

@Bindy - 老實說,我認爲他需要改變window.open直接指向一個PHP,它可以完成上述操作,正如我不相信這些東西不能通過JavaScript設置。嗯...應該真的更新我的回答說這個。 :-) – 2011-01-06 21:57:34

0

我測試了這個我的應用程序,我的結論是,你必須使用iframe(其中show_pdf返回 「$ PDF - >輸出( '', '我');」):

$.ajax({ 
url: "http://www.somesite.com/documents/generatePDF", 
success: function(){ 
    $('#theDocument').html('<iframe id="some_id" class="some_pdf" style="display:none" src="http://www.somesite.com/documents/show_pdf" width="100%" height="450" scrollbar="yes" marginwidth="0" marginheight="0" hspace="0" align="middle" frameborder="0" scrolling="yes" style="width:100%; border:0; height:450px; overflow:auto;"></iframe>'); 
} 
}); 
$('#dialog-document').dialog('open'); 
0

我寧願設置URL的彈出窗口,指着PHP腳本,輸出PDF。

如果你絕對必須這樣做,這樣一來,數據URI可能幫助:

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

,但我沒有測試它,即使它在正常的瀏覽器,在IE中是肯定要失敗。

0

這爲我工作: 變化

$pdf->Output('', 'I'); 

$return = $pdf->Output('name.pdf', 'S'); 
$return = base64_encode(); 
$return = 'data:application/pdf;base64,'.$return; 
echo json_encode($return); 

現在,你應該在你的JavaScript文件,獲得的回報,並打開一個新的窗口

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

它會在你的瀏覽器上用pdf打開一個新選項卡。

相關問題