誰かが私に長い単語(シリアル番号など)をラップする方法を提案できますか?いくつかの商用ソフトウェアを試しましたが、そのような問題はありません。それはfopバグですか、それとも利用可能な解決策がありますか?
ドキュメント内のすべての単語の各文字の後に長さゼロのスペースを挿入できません。この解決策は私には非常識に聞こえます。
次のように、fo:block
でwrap-option属性を指定できます。
<fo:block wrap-option="wrap"> ... stuff </fo:block>
この属性のXSL-FO仕様は次のとおりです。
XSL定義:
値:ラップなし|ラップ|継承
初期:ラップ
適用対象:fo:block、fo:inline、fo:page-number、fo:page-number-citation
継承:はい
パーセンテージ:N/A
メディア:ビジュアル
値の意味は次のとおりです:
no-wrap
行の折り返しは実行されません。
行がcontent-rectangleの使用可能な幅よりも長い場合、オーバーフローは、参照領域で指定された「overflow」プロパティに従って処理されます。
wrap
線が使用可能なブロック幅を超えた場合、改行が発生します。特別なマーカーやその他の処理は行われません。
書式設定オブジェクトのコンテンツの折り返し(改行)の処理方法を指定します。
「linefeed-treatment」の値が「preserve」の場合、実装は、この推奨事項で定義されている「no-wrap」値をサポートする必要があります。
wrap-option
属性をfo:table-cell
で定義することもできます。
<fo:table-cell wrap-option="wrap"> ... </fo:table-cell>
内のfo:block
sはプロパティを継承します。
Zkohの回答(ラッピング)は、テキストに空白で分割された複数の単語が含まれている場合にのみ役立ちます。 (問題で強調されているように)長い単語の場合、ハイフンは(ダニエルが示唆したように)行く方法です。
FOPのハイフネーションにはかなりの数の問題がある可能性があります。
ハイフンはあなたの問題を解決しますか? hyphenate="true"
属性を使用してハイフネーションを有効にできるはずです。この属性の配置は、ハイフネーションを有効にする場所によって異なります。
FOPのハイフネーションコンプライアンスへのリンクは次のとおりです。 Apache FOPコンプライアンスページ
XSL仕様へのリンクは次のとおりです。 XSL仕様#hyphenate
そうでない場合は、いくつかのkeepsプロパティ(keep-together.within-line
など)を試す必要があるかもしれません。
問題は、辞書の単語ではなく、シリアル番号に関するものです。 hyphenate="true"
の指定は、ハイフネーション辞書またはハイフネーションアルゴリズムがテキスト内の単語を正常にハイフネーションできる場合にのみ役立ちます。シリアル番号は、単語であるかのようにハイフンでつなぐことができるシーケンスを生成することはめったにありません。
もちろん、XSLTを使用して、手動で行うのではなく、テーブルセルのテキストに幅ゼロのスペースを追加することもできます。 StackOverflowは重複する質問が好きです( https://stackoverflow.blog/2010/11/16/dr-strangedupe-or-how-i-learned-to-stop-worrying-and-love-duplication/ を参照してください=)、しかし、それでも、 XSL-FO:テーブルエントリの強制ラップ の回答を参照してください。
表のセルに長い行を保持するには、keep-together = "always"の代わりにkeep-together.within-column = "always"を使用します。