TCPDF png图像无法循环渲染
TCPDF png image cannot be rendered in loop
各位。我想生成一个可以从 mysql 数据库中获取 png 图像并进行打印的 pdf。
我的问题是 png 图像只打印一次。
这是我的代码:
<?php
include_once('TCPDF/tcpdf.php');
include_once('DBConnect.php');
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator('PDF_CREATOR');
$pdf->SetAuthor('PDF_AUTHOR');
$pdf->SetTitle('Demonstrating pdf with php');
$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING, array(0, 6, 255), array(0, 64, 128));
$pdf->setFooterData(array(0,64,0), array(0,64,128));
$pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// ---------------------------------------------------------
// set default font subsetting mode
$pdf->setFont('dejavusans', '', 14, '', true);
$pdf->AddPage();
$result = mysqli_query($con, "SELECT * FROM employee") or die("database error:". mysqli_error($con));
$counter = 0;
$total = mysqli_num_rows($result);
// while($counter<8){
$html = "
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 80%;
}
td, th {
border: 1px solid #black;
text-align: left;
padding: 10px;
}
img.resize {
max-height:170px;
max-width:150px;
}
.center {
display: block;
margin-left: auto;
margin-right: auto;
width: 50%;
}
</style>
<h4>
Total no. of employee '$total'
</h4>
<table align='center'>
<tr>
<th>ID</th>
<th>Employee Name</th>
<th>Employee Salary</th>
<th>Employee Age</th>
<th>Employee Image</th>
</tr>
";
while($row = mysqli_fetch_array($result))
{
$image = $row['employee_image'];
// $image_src = 'images/user.png';
// imagepng(imagecreatefrompng($image_src),$image);
$html .= '
<tr nobr="true">
<td>'.$row["id"].'</td>
<td>'.$row["employee_name"].'</td>
<td>'.$row["employee_salary"].'</td>
<td>'.$row["employee_image"].'</td>
<td>'.'<img src="'.$image.'">'.'</td>
</tr>
';
}
$html .= '</table>';
// $counter++;
// }
$pdf->writeHTML($html);
$pdf->Output('test.pdf', 'I');
所以这是我的数据库
i use same image for every entry
这是我使用png图片时的输出
The image only printed once
如果我使用的是 JPG 格式,就没有问题。只需使用 PNG 文件。为什么我使用 PNG 格式,因为我想在我的项目中使用它,用户可以将图像以 PNG 格式上传到数据库,然后以 PDF 格式打印出来。
我想这对你有帮助
尝试使用不同的 .png 图像,在每个循环中不一样,如果打印正常,如您在 link 中所读,TCPDF 中存在使用相同图像的错误
各位。我想生成一个可以从 mysql 数据库中获取 png 图像并进行打印的 pdf。 我的问题是 png 图像只打印一次。
这是我的代码:
<?php
include_once('TCPDF/tcpdf.php');
include_once('DBConnect.php');
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator('PDF_CREATOR');
$pdf->SetAuthor('PDF_AUTHOR');
$pdf->SetTitle('Demonstrating pdf with php');
$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING, array(0, 6, 255), array(0, 64, 128));
$pdf->setFooterData(array(0,64,0), array(0,64,128));
$pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// ---------------------------------------------------------
// set default font subsetting mode
$pdf->setFont('dejavusans', '', 14, '', true);
$pdf->AddPage();
$result = mysqli_query($con, "SELECT * FROM employee") or die("database error:". mysqli_error($con));
$counter = 0;
$total = mysqli_num_rows($result);
// while($counter<8){
$html = "
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 80%;
}
td, th {
border: 1px solid #black;
text-align: left;
padding: 10px;
}
img.resize {
max-height:170px;
max-width:150px;
}
.center {
display: block;
margin-left: auto;
margin-right: auto;
width: 50%;
}
</style>
<h4>
Total no. of employee '$total'
</h4>
<table align='center'>
<tr>
<th>ID</th>
<th>Employee Name</th>
<th>Employee Salary</th>
<th>Employee Age</th>
<th>Employee Image</th>
</tr>
";
while($row = mysqli_fetch_array($result))
{
$image = $row['employee_image'];
// $image_src = 'images/user.png';
// imagepng(imagecreatefrompng($image_src),$image);
$html .= '
<tr nobr="true">
<td>'.$row["id"].'</td>
<td>'.$row["employee_name"].'</td>
<td>'.$row["employee_salary"].'</td>
<td>'.$row["employee_image"].'</td>
<td>'.'<img src="'.$image.'">'.'</td>
</tr>
';
}
$html .= '</table>';
// $counter++;
// }
$pdf->writeHTML($html);
$pdf->Output('test.pdf', 'I');
所以这是我的数据库 i use same image for every entry
这是我使用png图片时的输出 The image only printed once
如果我使用的是 JPG 格式,就没有问题。只需使用 PNG 文件。为什么我使用 PNG 格式,因为我想在我的项目中使用它,用户可以将图像以 PNG 格式上传到数据库,然后以 PDF 格式打印出来。
我想这对你有帮助
尝试使用不同的 .png 图像,在每个循环中不一样,如果打印正常,如您在 link 中所读,TCPDF 中存在使用相同图像的错误