6

代替テキスト

テーブルにいくつかのテキストと画像を含むdompdfを使用していくつかのPDFを生成しています。ただし、テキストに大きなURLが含まれている場合、URLは行末まで折り返されます。すべてのテキストとURLは、固定の幅と高さのdivでラップされていますが、URLはまだオーバーフローしています。

ブラウザでレンダリングされた同じHTMLは問題ないようです。

何かご意見は?

4

2 に答える 2

3

DOMPDF は、行を分割する方法を決定するためにかなり制限された文字セットを使用していると思います。現在、ダッシュまたはスペースで行を分割するだけです。したがって、サンプルにある URL のようなものは、コンテナーの幅を超えて実行されます。DOMPDF はそれを分割する方法を知らないだけです。

dompdf v0.6.0 から、単語が任意の文字で区切られるようにテキストのスタイルを設定できます。

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

特定の文字 (たとえば a /) でブレークするほどクリーンではありません。コードのハッキングに慣れている場合は、問題をもう少しエレガントに回避できます。テキスト リフラワー クラスを開き、行を分割する正規表現を変更します。正規表現は次のようになります。

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 は dompdf/src/FrameReflower/Text.php の 106 行目と 402 行目にあります。 .

RegEx を変更することの欠点は、(URL だけでなく) すべてのテキストに影響することです。

于 2010-02-26T22:26:06.213 に答える
1

ファイル dompdf/include/text_frame_reflower.cls.php を開き、次のような行を修正します。

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

正規表現を変更して、適切な改行になると思われる余分な文字を含めます。たとえば、URL を? &、または/でさえ、テキストに非常に長い URL が含まれると予想される場合:

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

次の行も置き換えます

$words = array_flip(preg_split("/[\s-]+/u",$str, -1, PREG_SPLIT_DELIM_CAPTURE));

$words = array_flip(preg_split('/([\s-\?\&\/]+)/u', $str, -1, PREG_SPLIT_DELIM_CAPTURE));
于 2015-09-30T10:48:28.497 に答える