【问题标题】:Convert HTML with inline PHP to PDF使用内联 PHP 将 HTML 转换为 PDF
【发布时间】:2018-12-11 14:33:17
【问题描述】:

创建了一个小型应用程序,您可以在其中下订单咖啡,并将订单及其订购日期保存到数据库中。

我有一个页面 report.php,它根据来自管理页面 adminPage.html 的用户输入的日期限制生成报告。

adminPage.html 使用 GET 函数将日期约束传递给 report.php,report.php 使用带有这些约束的 PHP 生成报告。

我在将报告页面转换为 PDF 时遇到问题。我尝试使用 dompdf,但是它不会在 PDF 中加载 PHP 报告,只会加载 HTML 代码。

用户单击按钮以在 adminPage.html 上运行报告的功能:

function runReport()
{
var jStartDate;
var jEndDate;
jStartDate = document.getElementById("reportStartDate").value;
jEndDate = document.getElementById("reportEndDate").value;

window.open("report.php?startDate="+jStartDate+"&endDate="+jEndDate+"");

}

window.open 打开带有加载到 URL 中的约束的报告页面。我知道它不漂亮,对不起:(

这是我试图生成为 PDF 的报告页面。我希望在屏幕底部有一个小按钮,上面写着“生成 PDF”或其他内容,因此当用户按下它时,它就会生成 PDF。

<!DOCTYPE HTML>
<script 
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"> 
</script>

<!-- allow login page to link to this when user is an admin -->
<title>Report</title>

<link rel="stylesheet" type="text/css" href="styles.css">
<link rel="manifest" href="/manifest.json">

<center><img src="icons/sbuxLogo.png" width="100" height="100px"></center>
</br></br>
<center><h1>Welcome Administrator!</h1></center>
</br></br>
<center>

<div id="report">

<h2>Report:</h2>
</br>
</center>

<?php
require "phpScripts/connect.php";

$startDate = $_GET['startDate'];
$endDate = $_GET['endDate'];

$sql = "SELECT * FROM orderlist WHERE NOT (dateOrdered < '$startDate' OR dateOrdered > '$endDate');";

$result = $conn->query($sql);

echo "<center>";
echo "<ul>";
if($result->num_rows >0)
{
  $i = 0;
  while($row = $result->fetch_assoc()) // this loads selected drinks via date 
into ul
  {
    echo  "<li style=
    'margin-left: 0;
    list-style-type: none;
    color: #727272;
    height: 40px;
    font-size: 15px;
    font-family: Open Sans;
    border-style: none;
    width: 50%;
    list-style-type: none;
    margin:0;
    padding-bottom:0px;
    padding:0;
    overflow: hidden;'>

    Drink: ".$row["drinkName"]. ", Date Ordered: " .$row["dateOrdered"] . ", 
Cost: " .$row["drinkCost"] . "</li>";
  $i = $i+1;
  }
}else {
  echo "<p> No orders found. </p>";
}
echo "</ul>";
echo "</center>";
?>

</div>

【问题讨论】:

  • 您可以使用 tcpdf 将 html 代码渲染成 pdf 文件。对代码的更改是您不会在屏幕上回显内容,而是将其存储在变量中并将其传递给将生成 pdf 文件的 tcpdf。 tcpdf.org
  • @IgorIlic 我正在查看 TCPDF 的文档,但是它没有显示关于使用内联 PHP 实现的日期约束变量的任何内容。你会偶然知道如何做到这一点吗?我最终得到一个几乎空白的 PDF,只有徽标、“欢迎管理员”和“报告:”出现。它没有将实际报告加载到 PDF 中

标签: php html pdf


【解决方案1】:

这是一个基本示例,说明如果您使用 TCPDF 会是什么样子

<?php
$pdf = new TCPDF(PDF_PAGE_ORIENTATION_L, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
//TCPDF_INIT_CODE_GOES_HERE 
// ...

$html = '<!DOCTYPE HTML>
<script 
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"> 
</script>

<!-- allow login page to link to this when user is an admin -->
<title>Report</title>

<link rel="stylesheet" type="text/css" href="styles.css">
<link rel="manifest" href="/manifest.json">

<center><img src="icons/sbuxLogo.png" width="100" height="100px"></center>
</br></br>
<center><h1>Welcome Administrator!</h1></center>
</br></br>
<center>

<div id="report">

<h2>Report:</h2>
</br>
</center>';


require "phpScripts/connect.php";

$startDate = $_GET['startDate'];
$endDate = $_GET['endDate'];

$sql = "SELECT * FROM orderlist WHERE NOT (dateOrdered < '$startDate' OR dateOrdered > '$endDate');";

$result = $conn->query($sql);

$html .= "<center>";
$html .= "<ul>";
if($result->num_rows >0)
{
    $i = 0;
    while($row = $result->fetch_assoc()) // this loads selected drinks via date 
    into ul
    {
        $html .=  "<li style=
        'margin-left: 0;
        list-style-type: none;
        color: #727272;
        height: 40px;
        font-size: 15px;
        font-family: Open Sans;
        border-style: none;
        width: 50%;
        list-style-type: none;
        margin:0;
        padding-bottom:0px;
        padding:0;
        overflow: hidden;'>

        Drink: ".$row["drinkName"]. ", Date Ordered: " .$row["dateOrdered"] . ", 
        Cost: " .$row["drinkCost"] . "</li>";
        $i = $i+1;
    }
}else {
    $html .= "<p> No orders found. </p>";
}
$html .= "</ul>";
$html .= "</center>";
$html .= '</div>';

$pdf->writeHTML($html);
$pdf->Output('TITLE_OF_PDF_FILE.pdf', 'I'); // I flag means it will display the PDF in a browser 

【讨论】:

  • 非常感谢!我稍微修改了代码,但这是一个巨大的帮助。
猜你喜欢
  • 2010-09-19
  • 1970-01-01
  • 2011-07-08
  • 2010-10-18
  • 2010-12-29
  • 2012-05-05
  • 2014-05-05
  • 1970-01-01
相关资源
最近更新 更多