web-dev-qa-db-ja.com

XSL-FOfop。長いテキストが隣接するセル/ブロックに流れ込み、そこにあるものを覆い隠します

誰かが私に長い単語(シリアル番号など)をラップする方法を提案できますか?いくつかの商用ソフトウェアを試しましたが、そのような問題はありません。それはfopバグですか、それとも利用可能な解決策がありますか?

ドキュメント内のすべての単語の各文字の後に長さゼロのスペースを挿入できません。この解決策は私には非常識に聞こえます。

11
Alex

次のように、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:blocksはプロパティを継承します。

12
Zkoh

Zkohの回答(ラッピング)は、テキストに空白で分割された複数の単語が含まれている場合にのみ役立ちます。 (問題で強調されているように)長い単語の場合、ハイフンは(ダニエルが示唆したように)行く方法です。

FOPのハイフネーションにはかなりの数の問題がある可能性があります。

  1. FOPはTeXのハイフネーションアルゴリズムを使用しており、ライセンスの問題があるため、これらのアルゴリズム(少なくとも一部の言語では)は標準のFOPバイナリ配布の一部ではありません(述べたように ここ )そして OFFOウェブサイト とは別にダウンロードする必要があります。ウェブサイトには2種類のハイフネーションパターンファイルがあります。 XML形式(FOPで使用するには最初にコンパイルする必要があります)とJARファイル(すでにコンパイル済み)。必ずコンパイル版をダウンロードしてください!インストールは簡単で、 十分に文書化されています -OFFOバイナリをFOPのlibフォルダにドロップするだけです...
  2. ドキュメントの言語を指定することを忘れないでください。必要に応じて、ブロックレベルでハイフンを有効にしてください(継承されているため、ルート要素に追加すれば問題ありません) FOP FAQ を参照してください。
8
Michal Levý

ハイフンはあなたの問題を解決しますか? hyphenate="true"属性を使用してハイフネーションを有効にできるはずです。この属性の配置は、ハイフネーションを有効にする場所によって異なります。

FOPのハイフネーションコンプライアンスへのリンクは次のとおりです。 Apache FOPコンプライアンスページ

XSL仕様へのリンクは次のとおりです。 XSL仕様#hyphenate

そうでない場合は、いくつかのkeepsプロパティ(keep-together.within-lineなど)を試す必要があるかもしれません。

6
Daniel Haley

問題は、辞書の単語ではなく、シリアル番号に関するものです。 hyphenate="true"の指定は、ハイフネーション辞書またはハイフネーションアルゴリズムがテキスト内の単語を正常にハイフネーションできる場合にのみ役立ちます。シリアル番号は、単語であるかのようにハイフンでつなぐことができるシーケンスを生成することはめったにありません。

もちろん、XSLTを使用して、手動で行うのではなく、テーブルセルのテキストに幅ゼロのスペースを追加することもできます。 StackOverflowは重複する質問が好きです( https://stackoverflow.blog/2010/11/16/dr-strangedupe-or-how-i-learned-to-stop-worrying-and-love-duplication/ を参照してください=)、しかし、それでも、 XSL-FO:テーブルエントリの強制ラップ の回答を参照してください。

1
Tony Graham

表のセルに長い行を保持するには、keep-together = "always"の代わりにkeep-together.within-column = "always"を使用します。

1
Vivek Dhiman

テキストオーバーフローの問題については、keep-together="auto"属性を使用してください。 enter image description here

テキストオーバーフローの問題

enter image description here

keep-together="auto"属性を使用した後のバージョンを修正しました。

0
shery089