PDFlib PHP 将图像并排放置
PDFlib PHP place images next to each other
我有多个图像来自一个数组(可能是 3 个,可能是 10 个),我想将它们并排放置,如果它们不再适合,请将它们放在新的一行中。
我已经写了一个 foreach 语句并且我让它工作了,所以如果它们不适合当前的行,它们会放在一个新行中,并且它们也会彼此相邻放置。
但我的问题是图像之间的间距,因为截至目前,每张图像都不同。有些之间的 space 很宽,而有些则重叠。
这是我写的函数:
function createAwardsTable(pdflib $p, int $textStartLeft, array $arrInput) {
$awardImages = $arrInput['awards'];
$boxHeight = 50;
$x = $textStartLeft;
$y = 275;
foreach($awardImages as $awardImage) {
$image = $p->load_image("auto", $awardImage, "");
if ($image == 0) {
echo("Couldn't load $image: " . $p->get_errmsg());
exit(1);
}
$imagewidth = $p->info_image($image, "imagewidth", "");
if ($x > (565 - 20)) {
$y = 215;
$x = $textStartLeft;
}
$buf = "boxsize={" . $imagewidth . " " . $boxHeight . "} fitmethod=auto matchbox={name=awardimage}";
// $buf = "scale=1 matchbox={name=awardimage}";
$p->fit_image($image, $x, $y, $buf);
$awardWidth = $p->info_matchbox("awardimage", 1, "x2");
$x = ($x - 20) + $awardWidth;
}
}
这是我在 pdf 中得到的结果的图片:
我认为到目前为止你的逻辑没问题。
$awardWidth = $p->info_matchbox("awardimage", 1, "x2");
$x = ($x - 20) + $awardWidth;
我认为 $x 的新计算不太正确。如果我对你的描述理解正确,那么你只是想输出下一张奖励图片,距离之前放置的图片 20 像素。如果是这种情况,那么使用火柴盒获取放置图像的位置,然后在其顶部添加 20 px 就足够了。
$awardX2 = $p->info_matchbox("awardimage", 1, "x2");
$x = $awardX2 + 20;
可能问题也出在$awardWidth的名字错误。 Info_matchbox() Returns 你的 X 位置而不是宽度。如果你想要宽度,那么你也应该得到x1位置,然后计算差异。 $width = $x2-$x1
)
我有多个图像来自一个数组(可能是 3 个,可能是 10 个),我想将它们并排放置,如果它们不再适合,请将它们放在新的一行中。
我已经写了一个 foreach 语句并且我让它工作了,所以如果它们不适合当前的行,它们会放在一个新行中,并且它们也会彼此相邻放置。
但我的问题是图像之间的间距,因为截至目前,每张图像都不同。有些之间的 space 很宽,而有些则重叠。
这是我写的函数:
function createAwardsTable(pdflib $p, int $textStartLeft, array $arrInput) {
$awardImages = $arrInput['awards'];
$boxHeight = 50;
$x = $textStartLeft;
$y = 275;
foreach($awardImages as $awardImage) {
$image = $p->load_image("auto", $awardImage, "");
if ($image == 0) {
echo("Couldn't load $image: " . $p->get_errmsg());
exit(1);
}
$imagewidth = $p->info_image($image, "imagewidth", "");
if ($x > (565 - 20)) {
$y = 215;
$x = $textStartLeft;
}
$buf = "boxsize={" . $imagewidth . " " . $boxHeight . "} fitmethod=auto matchbox={name=awardimage}";
// $buf = "scale=1 matchbox={name=awardimage}";
$p->fit_image($image, $x, $y, $buf);
$awardWidth = $p->info_matchbox("awardimage", 1, "x2");
$x = ($x - 20) + $awardWidth;
}
}
这是我在 pdf 中得到的结果的图片:
我认为到目前为止你的逻辑没问题。
$awardWidth = $p->info_matchbox("awardimage", 1, "x2");
$x = ($x - 20) + $awardWidth;
我认为 $x 的新计算不太正确。如果我对你的描述理解正确,那么你只是想输出下一张奖励图片,距离之前放置的图片 20 像素。如果是这种情况,那么使用火柴盒获取放置图像的位置,然后在其顶部添加 20 px 就足够了。
$awardX2 = $p->info_matchbox("awardimage", 1, "x2");
$x = $awardX2 + 20;
可能问题也出在$awardWidth的名字错误。 Info_matchbox() Returns 你的 X 位置而不是宽度。如果你想要宽度,那么你也应该得到x1位置,然后计算差异。 $width = $x2-$x1
)