Текстовые таблицы переполнения при генерации PDF с dompdf

alt text

Я генерирую некоторый PDFs с dompdf, который содержит некоторый текст и изображения в таблице. Но если текст имеет большой URL в нем, URL переносится полностью в конец строки. Весь текст и URL перенесены в отделение с фиксированной шириной и высотой, все же URL все еще переполняется.

Тот же HTML, представленный в браузере, кажется, в порядке.

Какие-либо мысли?

5
задан Glorfindel 13 June 2019 в 04:06
поделиться

1 ответ

Я считаю, что DOMPDF использует довольно ограниченный набор символов для определения того, как разделить строку. Прямо сейчас он разделяет строку только на тире или пробел. Таким образом, что-то вроде URL-адреса, который у вас есть в вашем примере, будет выходить за пределы ширины контейнера. DOMPDF просто не знает, как его разбить.

Начиная с dompdf v0.6.0, вы можете стилизовать свой текст так, чтобы слова разбивались по любому символу, например :

<span style="word-wrap: break-word;">http://example.com/really/long/.../url</span>

. Это не так чисто, как разбиение по определенному символу (например, / ).Если вам удобно взламывать код, вы можете более элегантно обойти проблему. Откройте класс перекомпоновки текста и измените регулярное выражение, разделяющее строку. Регулярное выражение выглядит следующим образом:

preg_split('/([\s-]+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE)

Измените этот код, чтобы включить в него любые дополнительные символы, которые, по вашему мнению, будут способствовать хорошему разрыву строки. Вы можете, например, разбить URL-адреса на?, & Или даже /, если вы ожидаете, что в вашем тексте будут очень длинные URL-адреса:

$words = preg_split('/([\s-\?\&\/]+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE);

В dompdf 0.6.1 RegEx можно найти в dompdf / include / text_frame_reflower.cls .php строки 86 и 371. В следующей версии 0.7.0 RegEx можно найти в строках 106 и 402 dompdf / src / FrameReflower / Text.php.

Недостатком изменения RegEx является то, что это повлияет на весь текст ( не только URL-адреса).

3
ответ дан 15 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: