Дай угадаю. Если он длиннее, страница разрывается, и она поворачивает только то содержимое, которое уместилось на странице, а также, возможно, отбрасывает значения, которые вы ожидали для GetX
и GetY
?
Отключите автоматический разрыв страницы, и он должен работать так, как вы ожидаете.
$pdf->SetAutoPageBreak(FALSE, 0);
Таким образом, он будет рисовать вне страницы там, где это необходимо, без вмешательства разрыва страницы.
Редактировать: Однако я был неправ, как отмечалось в комментарии, что GetY
вернет координату за пределами страницы. Это не так.
Итак, нам нужно выполнить нашу проверку высоты на большой странице, а затем перерисовать новую (правильного размера) страницу, как только мы узнаем, что нам нужно для макета, и уничтожить оригинал.
Вы можете сделать это с транзакциями или с AddPage
и DeletePage.
Я тестировал с AddPage
и DeletePage
.
//.....
$pdf = new TCPDF_HELPER('L', 'pt',
array(8*72,5*72), true, 'UTF-8', false);
// set auto page breaks
$pdf->SetAutoPageBreak(FALSE, 0);
// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->setFontSubsetting(true);
$fontname = TCPDF_FONTS::addTTFfont(dirname(__FILE__).'/playtime.ttf', 'TrueTypeUnicode', '', 96);
$pdf->setFont($fontname, '', 16);
//I'm using a points and a ridiculous 19 inch by 19 inch custom size.
//We'll use this one to get the proper offset with `GetY`
$pdf->AddPage('L', array(19*72, 19*72));
$pdf->SetXY(1, 45);
$pdf->setFillColor(255,255,230);
$column = <<<EOT
<p>WHITE APPLE COUNTRY HORSE STABLE BATTERY PIG SHEEP KANE CICI LOLIPOP</p>
<p>WHITE APPLE COUNTRY HORSE STABLE BATTERY PIG SHEEP KANE CICI LOLIPOP</p>
<p>WHITE APPLE COUNTRY HORSE STABLE BATTERY PIG SHEEP KANE CICI LOLIPOP ioj</p>
<p>WHITE APPLE COUNTRY HORSE STABLE BATTERY PIG SHEEP KANE CICI LOLIPOP ioj</p>
EOT;
//Get our multicell's final offset.
$pdf->WriteHTMLCell(80, '', '', 40, $column, 1, 2, 1, false, 'J', true);
$stopposition = $pdf->GetY();
//Now that we have our needed coordinates,
//Add a new page in our desired format.
$pdf->AddPage('L', array(8*72,5*72));
$pdf->StartTransform();
$pdf->Rotate(90, 40, 70);
$pdf->WriteHTMLCell(80, '', '', 40, $column, 1, 0, 1, true, 'J', true);
$pdf->StopTransform();
$pdf->SetX(20);
$pdf->SetY(-20);
$pdf->Write('', "End of column, pre-rotation: $stopposition pt");
//Delete our larger calculation page.
$pdf->DeletePage(1);
//.....
![Example with coordinate calculation.](https://i.stack.imgur.com/EoKtY.png)