从 MySQL 生成表到 PDF(使用 PHP)

Posted

技术标签:

【中文标题】从 MySQL 生成表到 PDF(使用 PHP)【英文标题】:Generate table from MySQL to PDF (using PHP) 【发布时间】:2016-11-25 08:45:54 【问题描述】:

我正在尝试将表(已过滤)从 mysql 导出为 pdf。

这里的主要问题是它只打印列表中的最后一个结果,而不是打印所有结果。

我尝试了其他代码,但仍然得到相同的结果。我不知道我的代码有什么问题:

<?php
include("configsample.php");
?>
<?php

$string=$_GET['string'];
$course=$_GET['course'];
$category=$_GET['category'];
$from=$_GET['from'];
$to=$_GET['to'];

if ($_REQUEST["string"]<>'') 
$search_string = " AND restu_title LIKE '%".mysql_real_escape_string($_REQUEST["string"])."%'";

if ($_REQUEST["course"]<>'') 
$search_course = " AND restu_course='".mysql_real_escape_string($_REQUEST["course"])."'";

if ($_REQUEST["category"]<>'') 
$search_category = " AND category='".mysql_real_escape_string($_REQUEST["category"])."'";



if ($_REQUEST["from"]<>'' and $_REQUEST["to"]<>'') 
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE restu_year BETWEEN '".mysql_real_escape_string($_REQUEST["from"])."' AND '".mysql_real_escape_string($_REQUEST["to"])."'".$search_string.$search_course;
 else if ($_REQUEST["from"]<>'') 
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE restu_year = '".mysql_real_escape_string($_REQUEST["from"])."'".$search_string.$search_course;
 else if ($_REQUEST["to"]<>'') 
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE restu_year = '".mysql_real_escape_string($_REQUEST["to"])."'".$search_string.$search_course;
 else 
$sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE restu_id>0".$search_string.$search_course.$search_category;

$html='<table>
<tr style="color:#010101; font:bold 13px Times New Roman; height:40px;">
<th>Research Title</th>
<th>Year</th>
<th>Proponent(s)</th>
<th>Adviser</th>
<th>Research Panel</th>
</tr>';
$sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);
if (mysql_num_rows($sql_result)>0) 
while ($row = mysql_fetch_assoc($sql_result))
$html2='<tr>
<td style="padding:10px;">'.$row['restu_title'].'</td>
<td style="padding:10px;">'.$row['restu_year'].'</td>
<td style="padding:10px;">'.$row['restu_by'].'</td>
<td style="padding:10px;">'.$row['restu_ad'].'</td>
<td style="padding:10px;">'.$row['restu_panel'].'</td>
</tr>
</table>';



include("mpdf60/mpdf.php");
$mpdf=new mPDF('c','Letter','','',20,20,18,16,9,9,'L');
$mpdf->SetDisplayMode('fullpage');
$mpdf->AddPage('L');
$mpdf->WriteHTML($html);
$mpdf->WriteHTML($html2);
$mpdf->Output();
exit;
?>

【问题讨论】:

您在 whileloop 中覆盖了 $html2。只要有另一条记录,它就会被提取,html2 将始终包含最后一条记录的值。 【参考方案1】:

您需要concatenate 您的文本字符串以避免$html2 被下一个值覆盖。

每次循环运行时,$html2 都会被新值覆盖。在您的情况下,您需要在等号之前添加一个点:

while ($row = mysql_fetch_assoc($sql_result))
    $html .='<tr>
            <td style="padding:10px;">'.$row['restu_title'].'</td>
            <td style="padding:10px;">'.$row['restu_year'].'</td>
            <td style="padding:10px;">'.$row['restu_by'].'</td>
            <td style="padding:10px;">'.$row['restu_ad'].'</td>
            <td style="padding:10px;">'.$row['restu_panel'].'</td>
    </tr>';

注意正确放置&lt;/table&gt;。如果您的 SQL 请求没有结果,则不会关闭表,导致 HTML 无效。

你需要这样做:

$html='<table>
    <tr style="color:#010101; font:bold 13px Times New Roman; height:40px;">
    <th>Research Title</th>
    <th>Year</th>
    <th>Proponent(s)</th>
    <th>Adviser</th>
    <th>Research Panel</th>
    </tr>';
$sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);
if (mysql_num_rows($sql_result)>0) 
    while ($row = mysql_fetch_assoc($sql_result))
        $html .='<tr>
            <td style="padding:10px;">'.$row['restu_title'].'</td>
            <td style="padding:10px;">'.$row['restu_year'].'</td>
            <td style="padding:10px;">'.$row['restu_by'].'</td>
            <td style="padding:10px;">'.$row['restu_ad'].'</td>
            <td style="padding:10px;">'.$row['restu_panel'].'</td>
            </tr>';
    

$html .= '</table>';

【讨论】:

感谢您的建议。我尝试替换代码,但它给了我这个错误:“mPDF 错误:一些数据已经输出到浏览器,无法发送 PDF 文件: 当您在 $mpdf-> 之前有 var_dump 或任何错误时会出现此消息。尝试 var_dump($html) 不做 pdf 看是否有错误,关于 de sql 请求。【参考方案2】:

附加 $html2。您正在循环中分配值,因此它只显示最后一条记录。

这样使用..

 $html2=$html2.'<tr>
    <td style="padding:10px;">'.$row['restu_title'].'</td>
    <td style="padding:10px;">'.$row['restu_year'].'</td>
    <td style="padding:10px;">'.$row['restu_by'].'</td>
    <td style="padding:10px;">'.$row['restu_ad'].'</td>
    <td style="padding:10px;">'.$row['restu_panel'].'</td>
    </tr>';

【讨论】:

感谢您的建议。我尝试替换代码,但它给了我这个错误:“mPDF 错误:一些数据已经输出到浏览器,无法发送 PDF 文件:

以上是关于从 MySQL 生成表到 PDF(使用 PHP)的主要内容,如果未能解决你的问题,请参考以下文章

php - 使用 mpdf 工具从 googlemap 内容创建 pdf

PHP/Ajax PDF 生成超时

从 HTML PHP 生成 PDF

在 php 中使用 svg 原始数据生成 PDF

从php生成pdf的最佳插件[关闭]

从MySql DB检索PDF到android(使用Volley)