Я генерирую некоторый PDFs с dompdf, который содержит некоторый текст и изображения в таблице. Но если текст имеет большой URL в нем, URL переносится полностью в конец строки. Весь текст и URL перенесены в отделение с фиксированной шириной и высотой, все же URL все еще переполняется.
Тот же HTML, представленный в браузере, кажется, в порядке.
Какие-либо мысли?
Я считаю, что 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-адреса).