• 締切済み

iText セル内での自動改行について

こんにちわ。 お世話になっております。 WebアプリケーションにおいてiTextを利用したPDFの作成を行っています。 今回どうしても上手くいかない所があり質問させて頂きます。 ■簡単な処理の流れを説明します (1)PdfPTableを使い、テーブルを作成 (2)Phraseを作成 (3)それをPdfPCellに代入 (4)PdfPCellにpaddingを設定し、セル内の任意の文字数で改行するように調整する ここで問題となっているのが、(2)で作成した文字が自動改行されてしまうということです。 具体的に説明します。以下のソースを参照下さい。 ------------------------------------------------------------------- Document document = new Document(PageSize.A4, 15, 13, 0, 0); PdfPTable tbl_ef2 = new PdfPTable(9); int widthF2[] = { 5, 12, 5, 16, 14, 18, 10, 8, 12 }; tbl_ef2.setWidths(widthF); tbl_ef2.setWidthPercentage(100); PdfPCell cell2 = new PdfPCell(new Phrase("あいう1-2000");   cell2.setHorizontalAlignment(Element.ALIGN_LEFT);   cell2.setVerticalAlignment(Element.ALIGN_TOP); cell2.setFixedHeight(24f); ◎cell2.setPaddingTop(0); ◎cell2.setPaddingBottom(0f); ◎cell2.setPaddingLeft(11f); ◎cell2.setPaddingRight(10f); tbl_ef.addCell(cell2); (以下省略) document .add(tbl_ef); ------------------------------------------------------------------- ◎でpaddingを設定し、ちょうど6文字で改行するようにセル内を調整しています。 しかし、実際には ⇒(間違い):「あいう<改行>         1-2000」となります。 ⇒(なってほしい姿):「あいう1-2<改行>              000」 いま分かっている範囲では、数字が入る文字がきて、それが前の行に入らないと 自動で改行されているようです。 なにか改行の設定を行うような機能はあるのでしょうか? また、上手く文字列を6文字ずつで改行させる方法はないでしょうか? よろしくお願いします。

みんなの回答

回答No.3

いえ、ですから、折り返して欲しい箇所に改行コードを入れてみては?と申しているのですが… あいう1-2000 が あいう(折り返し) 1-2000 ってなってしまうなら、折り返しを入れたい箇所に改行コードを入れて あいう1-2(改行コード)000 にすれば、表示は あいう1-2(改行コード) 000 になりませんか? 厳密には改行と折り返しなので、違いますが、 見た目は同じになるはずだと思います。 (表示するデータ全てに改行を入れるのは面倒ですが。)

pdf_beginner
質問者

お礼

最小の文字単位chunkを使用し、その中で任意の折り返し位置を 指定できるitextで用意されてるインターフェイスisSplitCharacterを オーバーライドする形で初期で設定されている折り返しの設定を 無効化することができました。 アドバイスいただきましてありがとうございました。

回答No.2

>phaseにいれてしまうと自動改行されてしまうとおもうのですが ホント? あいう1-2<改行>000 を入れると あいう1-2<改行> <改行> 000 になるってこと? それは考えられないけど、試してみました? で、「自動改行」と仰ってますが、「折り返し」で、実際には改行が入ってるわけではありません。

pdf_beginner
質問者

補足

説明が悪かったです。 すみません。 仰る通りです。自動改行ではなく折り返しです。 実際のデータは「あいう1-2000」 で出力結果が「あいう (折り返し)          1-2000」となります。         ↓ これを「あいう1-2 (折り返し)     000」 としたいわけです。 便宜上<改行>と書いただけで改行コード等は入っていません。 よろしくお願いします。

回答No.1

単語の途中で改行できないからです。 予め文字数をカウントして、自前で改行してはどうでしょう。

pdf_beginner
質問者

補足

回答ありがとうございます。 やはり[文字+数字]=[単語]と認識してしまっているのでしょうか。 文字数をカウントして改行コードを埋め込んだとしても phaseにいれてしまうと自動改行されてしまうとおもうのですが 何か方法があるのでしょうか?

関連するQ&A