Выравнивание в текстовом потоке - PullRequest
1 голос
/ 19 февраля 2020

Я помещаю текстовый поток с текстом UTF-16 в PHP (PDF_create_textflow, PDF_fit_textflow), который отлично работает.

Как получить выровненный текст "", не видя знака спецификации (стрелка вверх) в документе?

Любой другой способ, которым я мог бы оформить текст, оправданный, а не встроенный параметр выравнивание ?

$compo_txt = html_entity_decode($compo_txt, ENT_QUOTES, 'UTF-8');
$compo_txt = "<alignment=justify>".$compo_txt;
$compo_txt = iconv("UTF-8", "UTF-16", $compo_txt);
$len = strlen($compo_txt);
$compo_flow = PDF_create_textflow($p, $compo_txt, "fontname=arial fontsize=".$compo_size." encoding=unicode textlen=" . $len . " embedding=true");


$flow_warning = PDF_fit_textflow(
    $p, $compo_flow, $compo_x + $compo_w, 
    $compo_y, $compo_x, $compo_y - $compo_h,
    'orientate=' . $compo_o
);

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Использование выравнивания в optlist не так, как встроенное отключение сделало работу:

PDF_create_textflow($p, $compo_txt, "fontname=arial fontsize=".$compo_size." encoding=unicode textlen=" . $len . " embedding=true alignment=justify");
0 голосов
/ 20 февраля 2020

alignment работает, конечно, как встроенный параметр, но из-за используемого параметра textlen это не будет работать в вашем случае.

Textlen объясняется в справочнике по API PDFlib 9.2.0 с помощью следующие слова:

(целое число или ключевое слово; требуется для фрагментов текста с fixedtextformat = false и textformat = utf16xx в языках, не поддерживающих Юникод) Количество байтов или (в языках, поддерживающих Юникод) символов перед следующим встроенным списком параметров (см. «Списки встроенных параметров для потоков текста», стр. 103).

(я добавил выделение жирным шрифтом)

Как вы указываете как textlen длина текстовой строки complete , встроенный параметр обрабатываться не будет.

Основной вопрос: почему вы используете textformat=utf16? Почему бы просто не использовать textformat=utf8 (или stringformat=utf8), если у вас уже есть строки utf8? Также вы можете использовать опцию charref, чтобы ссылки на символы обрабатывались.

Когда вы устанавливаете stringformat=utf8 и charref=true (см. Руководство по PDFlib 9.2, глава «5.2.2 Привязки к языку с поддержкой UTF-8»), вы можете использовать упрощенный код:

PDF_set_option($p, "stringformat=utf8 charref=true");

$compo_txt = "<alignment=justify>".$compo_txt;
$compo_flow = PDF_create_textflow($p, $compo_txt, "fontname=arial fontsize=".$compo_size." encoding=unicode embedding=true");


$flow_warning = PDF_fit_textflow(
    $p, $compo_flow, $compo_x + $compo_w, 
    $compo_y, $compo_x, $compo_y - $compo_h,
    'orientate=' . $compo_o
);
...