PDFlib — размещайте обтекающий текст с помощью текстового потока в верхнем левом углу, а не в нижнем левом

Дано: а) длинный абзац текста шириной не более 10 см. Высота не ограничена, текст абзаца должен переноситься, когда он достигает правого поля; б) страница с topdown=true.

Я пытаюсь использовать комбинацию add_textflow() и fit_textflow(), чтобы сделать это. но PDFlib помещает абзац в нижний левый угол, тогда как известные координаты этого абзаца относятся к верхнему левому углу.

Мой код:

$p->begin_page_ext($width, $height);
$p->set_option("usercoordinates=true");
$p->set_option("topdown=true");

...

$tf = 0;
$tf = $p->add_textflow($tf, 'My loooong wrapping paragraph, 'fontname=Helvetica fontsize=10 encoding=unicode charref');
$result = $p->fit_textflow($tf, $lowerLeftX, $lowerLeftY, $upperRightX, $upperRightY, 'fitmethod=nofit');
$p->delete_textflow($tf);

Вопрос: что я могу сделать, чтобы предоставить координаты как: $p->fit_textflow($tf, $topLeftX, $topLeftY, $lowerRightX, $lowerRightY)?

Я попытался добавить параметры position={left top} в fit_textflow(), но PDFlib выдает ошибку.


person temuri    schedule 14.08.2019    source источник


Ответы (1)


во-первых, ваш код пропустил необязательный параметр $option в вызове begin_page_ext(). В вашем случае вы можете использовать

$p->begin_page_ext($width, $height, "topdown=true");

поэтому вы избавляетесь от дополнительного вызова set_option().

Вывод текстового потока всегда начинается в верхней части фитбокса (области, где будет размещен текст), за правой границей не будет написана строка. Таким образом, ваше требование является значением по умолчанию.

Вы можете начать использовать с примером starter_textflow.php, чтобы получить первое впечатление о том, как вы можете его использовать (особенно для длинного текста, который не помещается в заданный фитбокс). Кроме того, во многих дополнительных примерах в поваренной книге PDFlib показаны дополнительные (более сложные) аспекты: https://www.pdflib.com/pdflib-cookbook/textflow/

В вашем случае вы можете просто работать с:

$lowerLeftX = 0;
$lowerLeftY = $height;          // this is the page height
$upperRightX = 10 * 72 / 2.54;  // this is 10 cm in the default coordinate system
$upperRightY = 0;               // this is the top border of the page

$result = $p->fit_textflow($tf, $lowerLeftX, $lowerLeftY, $upperRightX, $upperRightY, 'fitmethod=nofit');

Подробности о системе координат см. в учебнике по PDFlib 9.2, глава 3.2.1 «Системы координат».

person Rainer    schedule 14.08.2019