2

オーバーフローしたときにテキストのブロックを次の行に折り返す必要があります。テキストにはスペースやダッシュはありません。ブロックに overflow="hidden" および wrap-option="wrap" 属性が含まれていても、Apache FOP はこのテキストをラップしたりクリップしたりしません。FO ファイルには keep-together 設定が含まれていないため、この問題は発生しません。


バージョン: Apache FOP 0.95、1.0、および 1.1 で問題が発生します。残念ながら、古いバージョンは私の DocBook Maven セットアップでは動作しないため、テストしていません。


これは私のFOファイルのブロックです:

<fo:block
 overflow="hidden"
 wrap-option="wrap"
 white-space-collapse="false"
 white-space-treatment="preserve"
 linefeed-treatment="preserve"
 text-align="start"
 margin-top="0.5em"
 margin-right="0.5pt"
 margin-bottom="1em"
 margin-left="0.5pt"
 border-width="0.5pt"
 border-left-style="solid"
 border-left-color="#D3CEC6"
 padding="2mm"
 font-family="Courier New"
 font-size="8pt"
 background-color="#EBE5D7">veryverylongtextwithoutspacesordashes
</fo:block>
4

2 に答える 2

3

文字列を折り返すには、改行可能な文字を行内に含める必要があります。特定の場所にゼロ幅のスペース文字(または) を
挿入して、入力を前処理することを検討してください。フォーマッタはそれを見て、必要な場合にのみこれらの文字で改行します。この文字の他の出現は見られません。&#x200b;&#8203;

<fo:block>very&#x200b;very&#x200b;long&#x200b;text&#x200b;without&#x200b;spaces&#x200b;or&#x200b;dashes</fo:block>

テキストが数字の文字列の場合、n 番目のシンボルごとにゼロ幅の空白文字を挿入するのが論理的かもしれません。

または、特定の言語のハイフネーション規則に従って文字列をハイフネーションするようにフォーマッタをセットアップすることもできます。実際、ハイフネーションは基本的に、元のテキストにハイフネーション マーカーを追加することに基づいています。繰り返しになりますが、特定の言語に属する意味のあるテキストを文字列に含める必要があります。

于 2013-07-08T19:53:25.190 に答える