php - 如何使用php和mysql在fpdf中动态创建多个身份证
问题描述
我试图使用 fpdf 创建身份证,其中要放入身份证中的数据来自 mysql 数据库,我已经成功地做到了,问题是我想一次生成许多身份证,比如 10 张身份证,当我尝试生成身份证但将一张放在另一个上的打击代码,我只能看到最后一张身份证:
A)那么,我怎样才能动态地为他们提供不同的身份证位置?下面是我的代码和显示输出的图像: 输出图像
<?php
include('connect.php');
require_once('fpdf/fpdf.php');
if(ISSET($_POST['generate_id'])){
$semsec = $_POST['id'];
$result=$conn->query("SELECT * FROM `student` WHERE `semsec` = '$semsec'") or die(mysqli_error($conn));
if ($result->num_rows == 0) {
// output data of each row
echo '
<script type = "text/javascript">
alert("Student Not Found For The Provided Semister and Section");
window.location = "home.php";
</script>
';
} else {
while($row=mysqli_fetch_array($result))
{
$cls[]=$row;
}
$json=json_encode($cls);
$obj = json_decode($json,true);
class PDF extends FPDF
{
}
$pdf = new PDF();
$pdf->AddPage();
foreach($obj as $item) {
$name=$item['firstname'];
$lname=$item['lastname'];
$id=$item['student_no'];
$semsec=$item['semsec'];
$profile=$item['image'];
$qr=$item['barcode'];
$pdf->Image('images/background2.jpg', 10, 10,100, 50);
$pdf->Image($profile, 80, 15,25, 30);
$pdf->Image($qr, 15, 45,20, 15);
$pdf->AddFont('courier','','courier.php');
$pdf->SetFont('courier','b',10);
$pdf->SetXY(33, 22.8);
$pdf->SetFont('Arial','B',10);
$pdf->Cell(9.5,7,$name,0,4,'L');
$pdf->SetXY(33, 28);
$pdf->SetFont('Arial','B',10);
$pdf->Cell(9.5,7,$lname,0,4,'L');
$pdf->SetXY(33, 33.5);
$pdf->SetFont('Arial','B',10);
$pdf->Cell(9.5,7,$id,0,4,'L');
$pdf->SetXY(33, 39);
$pdf->SetFont('Arial','B',10);
$pdf->Cell(9.5,7,$semsec,0,4,'L');
}
$pdf->Output();
}
}
?>
解决方案
问题是您将 ID 设置在彼此之上,而每个 ID 都没有偏移量,也没有每个 ID 的新页面。
如果您希望每页都有一个 ID,则需要$pdf->AddPage();
在制作每个 ID 后调用。这将创建一个新页面并将 XY 设置为页面的左上角。
如果您想要每页多张身份证,例如每页 X 数量,则拆分身份证数组,以便您一次循环 X 数量,PHP 函数array_chunk
将为您拆分它,然后将 XY 坐标偏移你想要的金额,例如我这样做了
$pdf = new PDF();
$pdf->AddPage();
$input_array = array('a', 'b', 'c', 'd', 'e');
$farray = array_chunk($input_array, 2);
foreach($farray as $obj) {
$yOffset = 0;
foreach($obj as $item) {
$pdf->SetXY(33, 28 + $yOffset);
$pdf->SetFont('Arial', 'B', 10);
$pdf->Cell(9.5, 7, $item, 0, 4, 'L');
$yOffset += 40; // Y distance between letters
}
$pdf->AddPage();
}
$pdf->Output();