使用TCPDF和特定div作为内容创建PDF

时间:2013-01-05 18:28:54

标签: php javascript html tcpdf

我正在尝试通过将HTML代码中的收据转换为PDF来创建Web应用程序的收据,以便在完成应用程序后下载。我试图通过将目标div的内容分配给表单中的隐藏输入字段来将代码发送到PHP文件。按下结尾处的按钮,执行下面的js功能,以及PHP文件:

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是隐藏的输入字段。在按下打印按钮时,收据div的内容被添加到隐藏输入字段的值。然后我尝试按如下方式传递此值:

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

在writeHTML函数中使用它。但是,将返回空白PDF文件。我想知道我是否可以将目标div的内容作为writeHTML方法中的参数传递。 div没有外部样式,并且每个文档都包含所有兼容标记。

1 个答案:

答案 0 :(得分: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被渲染到其中。

我建议你将代码缩减到像这样简单的东西,以帮助解决问题。一旦你有了工作,那么你可以增加复杂性。