所以,我有兩個并排的元素。這些元素中的每一個都包含一個串列,并且在它們自己的高度上可以是動態的。但是我有兩個問題。
1.) 如何將最高元素的高度賦予這兩個元素下的下一個元素?我知道我可以回傳高度值,但到目前為止,這并不像我想要的那樣作業。如果我回傳左元素的高度值,右元素將沒有正確的高度起點,如果我只回傳一個高度值,下一個元素只會從該元素獲得它的起點。意味著如果我,例如,回傳正確元素的高度值,下一個元素將從那里獲得它的起點。但是如果左邊的元素比右邊的長,它就不能正確顯示。我怎樣才能在這里實作我想要做的事情?
2.) 另一個問題是目前的輸出不正確。串列的專案來自一個陣列。為了顯示它們,我創建了一個 foreach 回圈,它為每個串列項創建自己的文本流。然后將在該回圈內調整下一個專案的高度。前兩個專案目前顯示正確,但第三個專案和之后的每個專案都沒有獲得正確的高度值,將顯示在第二個專案下方。有誰知道我在這里做錯了什么?
我創建了兩個函式,一個用于左側元素,一個用于右側元素。我的代碼現在看起來像這樣......左元素的函式:
private function createProductProfile(\PDFlib $p, int $y, int $fontLightRegular, int $elementStartLeft, int $elementStartHalf, int $elementEndRight, array $arrInput)
{
// Variable Declaration
$productProfileContent = $arrInput['productProfile']['profileContent'];
$right_x = $elementStartHalf - 20;
$left_x = $elementStartLeft 10;
$right_y = $y;
$left_y = $right_y - 20;
// output every element of productProfileContent array as textflow
foreach ($productProfileContent as $profile) {
$this->placeHyphen($p, $elementStartLeft, $y);
$optlistProfile = 'font=' . $fontLightRegular . ' fontsize=10 fillcolor=black wordspacing=0';
$tfProfile = $p->add_textflow(0, $profile, $optlistProfile);
if ($tfProfile == 0) {
throw new Exception('Error: ' . $p->get_errmsg());
}
// Gebe Textflow aus
$resultProfile = $p->fit_textflow($tfProfile, $left_x, $left_y, $right_x, $right_y, '');
$right_y = $right_y - 20;
$y = $y - 20;
}
}
這是正確元素的函式:
private function createProductAdvantages(\PDFlib $p, int &$y, int $fontLightRegular, int $elementStartLeft, int $elementStartHalf, int $elementEndRight, array $arrInput)
{
// Variable Declaration
$productAdvantagesContent = $arrInput['productAdvantages']['advantagesContent'];
$right_x = $elementEndRight;
$left_x = $elementStartHalf 30;
$right_y = $y;
$left_y = $right_y - 20;
// output every element of $productAdvantagesContent array as textflow
foreach ($productAdvantagesContent as $advantages) {
$this->placeHyphen($p, $elementStartHalf 20, $y);
$optlistAdvantages = 'font=' . $fontLightRegular . ' fontsize=10 fillcolor=black wordspacing=0';
$tfAdvantages = $p->add_textflow(0, $advantages, $optlistAdvantages);
if ($tfAdvantages == 0) {
throw new Exception('Error: ' . $p->get_errmsg());
}
// Gebe Textflow aus
$resultAdvantages = $p->fit_textflow($tfAdvantages, $left_x, $left_y, $right_x, $right_y, '');
$right_y = $right_y - 20;
$y = $y - 20;
}
}
另外這里是當前輸出的影像。如您所見,連字符將正確顯示,但陣列項不顯示:

uj5u.com熱心網友回復:
當前,您的代碼假定您始終需要完整的指定 fitbox(因此 fit_textflow 中的框高度)。
// Gebe Textflow aus
$resultProfile = $p->fit_textflow($tfProfile, $left_x, $left_y, $right_x, $right_y, '');
$right_y = $right_y - 20;
$y = $y - 20;
我懷疑大多數時候情況并非如此。因此,在 fit_textflow()您應該拿起文本的最終位置并繼續計算之后。您可以使用info_textflow().
// Gebe Textflow aus
$resultProfile = $p->fit_textflow($tfProfile, $left_x, $left_y, $right_x, $right_y, '');
$lly = $p->info_textflow($tfProfile, "y1");
// now you can work with the lower left y position for further calculation
其次,如果要保持左右列的輸出同步,則需要檢索左右列的值,然后使用較低值的新 Y 起點。
另一方面,在我看來,您也可以將您的布局視為具有兩列的表格布局。在這種情況下,您只需創建 Textflow 單元格,然后在放置內容時 PDFlib 將相應地生成布局。也許你可以考慮一下?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/327214.html
