2013-01-18 53 views
1

我有,一旦提交表單時,PHP生成一個PDF文件,並將其發送給客戶端。到目前爲止一切正常。我遇到的麻煩是我需要在包含收到的pdf的窗口上觸發window.print()。有沒有辦法讓接收的pdf文件出現打印嚮導?如何打印通過ajax請求獲取的PDF?

這裏是我的代碼有

//The #options is a form that once submitted is sends the requested PDF to the browser 
$('#options').on('submit', function(e){ 

    if($(this).find('[name="action"]').val() == 'print') 
    { 
     var url = $(this).attr('action') || document.URL; 
     e.preventDefault(); 
     $.post(url, $(this).serializeArray(),function(pdf){ 
      // Open the printing wizard for the requested document 
     }); 
    } 
    else 
    { 
     // The PDF is displayed normally 
     return true; 
    } 

}); 

我甚至不知道我想要做的是可能的。是例如有可能在新標籤中打開PDF,然後調用window.print()呢?此

回答

3

一個簡單的方法是將PDF文件中的一個新的iFrame。 然後你可以打印使用window.print();功能的iframe中的完整內容。

<html> 
<head> 
<title>Print Test Page</title> 
<script> 
function printPDF() { 
    window.frames["print_frame"].window.focus(); 
    window.frames["print_frame"].window.print(); 
} 
</script> 
</head> 
<body> 
Some content here 
<iframe name=print_frame width=0 height=0 frameborder=0 src=about:blank> 
    Your PDF is loaded here 
</iframe> 
Some more content here 
</body> 
</html> 

現在打電話window.print();函數,當你想打印你的pdf。

0

要在新窗口中打開PDF,您需要基本上產生GET請求(使窗口可以通過打開URL) - 簡單的辦法就是編寫服務器端代碼,以接受通過查詢字符串輸入參數。更好的辦法是使用POST請求(如你正在做的),以產生在服務器端的PDF和臨時位置緩存它,然後返回一些令牌/票(例如,它可以作爲臨時文件名一樣簡單)到瀏覽器。這個令牌將用於獲取PDF文件的GET請求 - GET請求將發送到服務器,該服務器將簡單地從臨時位置讀取文件並將其作爲內聯返回((即標頭content-disposition: inline;)),然後您可以嘗試window.print()來打印它。類似的方式可以使用iframe(與contentWindow.print()

然而,你可能會發現這些解決方案可能無法正常工作 - 例如,沒有PDF插件來顯示PDF內聯(或用戶選擇總是打開文件或者它可能無法通過瀏覽器工作,所以另一種(和IMO更好的方法)是在PDF內嵌入java腳本,它自行指示在文件打開後立即打印。
例如,請參閱this PHP code example會在用於自動打印的PDF生成中嵌入java腳本 - 該示例正在使用用於PDF生成的FPDF。