我正在创建一个学生身份证系统,每个学生都有自己的身份证。
为此,我正在使用干预图像,以获取学生数据并放入标准ID卡模板中。
我这样做的基本代码是:
<?php
[...]
$card = Image::make('card_id-model.png');
$card->text('CARD ID', 20, 40, function($font) {
$font->file('arial.ttf');
$font->size(24);
$font->color('#fdf6e3');
$font->align('center');
$font->valign('top');
$font->angle(45);
});
$card->text('NAME: STUDENT\'S NAME', 20, 60, function($font) {
$font->file('arial.ttf');
$font->size(24);
$font->color('#fdf6e3');
$font->align('center');
$font->valign('top');
$font->angle(45);
});
$card->text('CODE: STUDENT\'S CODE', 20, 80, function($font) {
$font->file('arial.ttf');
$font->size(24);
$font->color('#fdf6e3');
$font->align('center');
$font->valign('top');
$font->angle(45);
});
$card->save('card_id - student\'s code.png');
考虑到每次创建图像时都会调用该函数,因此这种方式比较慢。 因此,我决定首先实例化该图像,因为它将用于所有卡的ID。是的,但是由于文本被覆盖,我在循环应用它以同时生成多个文件时遇到了问题。
<?php
[...]
$card = Image::make('card_id-model.png');
$card->text('CARD ID', 20, 40, function($font) {
$font->file('arial.ttf');
$font->size(24);
$font->color('#fdf6e3');
$font->align('center');
$font->valign('top');
$font->angle(45);
});
for ($students as $student) {
$card->text('NAME: ' . $student->name, 20, 60, function($font) {
$font->file('arial.ttf');
$font->size(24);
$font->color('#fdf6e3');
$font->align('center');
$font->valign('top');
$font->angle(45);
});
$card->text('CODE: ' . $student->code, 20, 80, function($font) {
$font->file('arial.ttf');
$font->size(24);
$font->color('#fdf6e3');
$font->align('center');
$font->valign('top');
$font->angle(45);
});
$card->save('card_id - ' . $student->code . '.png');
}
那是我发现大量产生的最好,最快的方法。有人有提示吗?
答案 0 :(得分:0)
我通常首先在AI中进行设计,然后从中提取SVG,然后填充CSS + HTML。由于PHP可以帮助填充它,因此我仅用它来生成HTML。
然后将HTML转换为PDF,然后我从那里将其打印出来。
在任何情况下,PHP都不是理想的生成图像的方法,即使有一种方法也可以。利用浏览器的功能做到这一点。 Google Chrome功能强大,但是如果您希望它在服务器上可运行,则可以使用wkhtmltopdf。
答案 1 :(得分:0)
您遇到文本覆盖问题,因为您正在原始对象上调用text函数。相反,您需要对元素的副本进行修改,然后将其保存在数组中。
请参阅示例。
$generatedCards = [];
foreach ($students as $student) {
$generatedCard = clone $card;
$generatedCard->text('...');
$generatedCards[] = $generatedCard;
}