2012-11-29 76 views
5

所以我認爲Chrome和Firefox對DOM的解釋與我有關。我試圖從瀏覽器打印PDF(動態創建),因爲我不能打印頁眉和頁腳,通常打印HTML頁面。現在我只是使用fpdf從PDF頁面發送PDF並使用工具欄或右鍵單擊並打印,但現在客戶需要頁面上的按鈕來啓動打印對話框,但當然不會打印除PDF之外的其他任何內容... 。所以我包埋它:在chrome中打印嵌入PDFs

<embed 
     type="application/pdf" 
     src="print_pdf.php" 
     id="pdfDocument" 
     width="100%" 
     height="100%" /> 

和按鈕的onClick稱爲

<script type="text/javascript"> 

     function printDocument(documentId) { 

     ((function(){return document.getElementById(documentId);})()).print(); 


     //Wait until PDF is ready to print  
     if (typeof document.getElementById(documentId).print == 'undefined') { 

      setTimeout(function(){printDocument(documentId);}, 1000); 

     } else { 

      var x = document.getElementById(documentId); 
      x.print(); 
     } 
    } 
    </script> 

其中documentID = 「pdfDocument」

這在IE9的工作很好,但瀏覽器和Mozilla都表示「遺漏的類型錯誤:對象#沒有方法'打印'「

所以我試圖用思維嵌入在Chrome是造成不當的對象解釋:

<object data="print_pdf.php" type="application/pdf" width="100%" height="100%" id="pdfD2"> 

ALT:檢驗.pdf

,並呼籲同的onClick,其中documentID = 「pdfD2」 .. 「遺漏的類型錯誤:對象#有沒有方法‘打印’」

然後我試圖在iframe: ......「遺漏的類型錯誤:對象#有沒有方法‘打印’」

我非常沮喪,因爲鉻是我去...我甚至禁用鉻的內置PDF視圖和使用Adobe 10.xxx .. ARGH !!!

僅供參考,我簡單的按鈕標籤:

<input type="button" value="Print Rx" onclick="printDocument('pdfDocument')"> 
<input type="button" value="Print Rx2" onclick="printDocument('pdfD2')"> 
<input type="button" value="Print Rx3" onclick="printDocument('pdfD3')"> 

回答

0

我認爲錯誤是在該行:

((function(){return document.getElementById(documentId);})()).print(); 

這意味着你「包」(以及可能)未完成的DOM進入關閉。

它在檢查「未定義」打印的下一行之前。

除此之外,爲什麼使用超時,而不是僅使用onloadDOMReady事件?