2013-01-05 50 views
0

我試圖通過將收據從HTML代碼轉換爲PDF以便可以在應用程序完成時下載它來創建Web應用程序的收據。我試圖通過將目標div的內容分配給表單中的隱藏輸入字段來將代碼發送到PHP文件。在末按下按鈕,js的下方運行的情況下的onclick執行,以及PHP文件:使用TCPDF和特定div創建PDF作爲內容

function print() { 
    var elem = document.getElementById("receipt").innerHTML; 
    document.getElementById("hiddenhtml").value = elem; 
} 

這裏是形式的粗線條:

<form method="post" action="htmlpdf.php" target="_blank"> 
    <div id="receipt"> 
     ------- CONTENT THAT I WANT IN THE PDF ---------- 
    </div> 
    <input type="submit" onclick="print()" value="Print"/> 
    <input id="hiddenhtml" type="hidden" value=""/> 
</form> 

凡hiddenhtml是隱藏的輸入字段。按下打印按鈕後,收據格的內容將被添加到隱藏輸入字段的值中。然後我嘗試通過如下值:

$html = $_POST['hiddenhtml']; 
$pdf->writeHTML($html, true, false, true, false, ''); 

在writeHTML函數中使用它。但是,返回一個空白的PDF文件。我想知道,我可以通過writeHTML方法中的參數傳遞目標div的內容。 div沒有外部樣式,並且包含所有符合標準的文檔。

+0

你確定隱藏字段正在填充?你檢查了'var_dump($ _ POST)'看看事情是否正確? –

+0

@MarcB我檢查了,是的,它正在填充 –

回答

2

你需要添加一個頁面到文檔來呈現你的html,然後你需要實際輸出你的頁面。請參閱example pdf page。您的代碼應該是這樣的: -

$pdf = new TCPDF(); 
$pdf->AddPage('P'); 
$pdf->writeHTML($html, true, false, true, false, ''); 
$pdf->Output(); 

我做了一些進一步的測試和創建此代碼: -

if(isset($_POST['hidden'])){ 
    $pdf = new TCPDF(); 
    $pdf->AddPage('P'); 
    $html = $_POST['hidden']; 
    $pdf->writeHTML($html); 
    $pdf->Output(); 
} 
?> 
<form method="POST"> 
    <input name="hidden" type="hidden" value=" 
     <div> 
      <h1>Receipt</h1> 
      <p>Some stuff</p> 
      <p>More stuff</p> 
     </div>"/> 
    <input type="submit" value="Submit"/> 
</form> 

其中,上submition,給了我這樣的輸出: -

enter image description here

正如你所看到的,一個很好的pdf頁面和我的html渲染到它。

我建議你減少你的代碼到這樣簡單的事情,以幫助解決問題。一旦你有這個工作,那麼你可以增加複雜性。

+0

我已經這樣做了,但我得到一個空白頁,但因爲我發佈到html變量的代碼由於某種原因而無法用作輸入 –

+0

@DavisHunt可能你發佈了一個應該進入pdf的html的例子嗎? – vascowhite

+0

上面的例子只是一些格式化的div和文本。所有的樣式都是內聯完成的,並且他們不需要訪問外部樣式表 –