• 締切済み

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

  • Excel 2016 で一つのセル内で改行したい

    Excel で一つのセル内で改行する方法をお願いいたします 列と行を広くして一つのセル内に複数行記入したいのです 書式設定では 折り返して全体を表示する         縮小して全体を表示する        セルを結合するが有りますが        セル内での改行が有りません 前の文字をスペースで送ると改行らしき事は出来るのですが文字の並びがズレて来るのでよろしくお願いいたします

  • エクセルで、「セル内改行」を自動化したいのですが・・・。

    今回もお世話になります。 今回の目的ですが、作業の自動化、 もしくは、簡略化にあります。 例えば、以下の様な文字列の書かれた テキストファイルがあるとします。 あああああああああああ。 ああああ、ああああああ、ああああああああああ。 あああああ、ああああああ。 あああああああああああ。 これをこのまま読み込むと、 一行目:A1 二行目:A2 という感じで読み込まれます。 これ自体は、全然問題ないのですが、 その後に、セル内改行(Alt+Enter)を手作業で入れ、 文章を整えているのですが、非常に時間が掛かります。 これをマクロなどで簡略化できるか 調べているのですが、良い方法が見つかりません。 そこで、テキストエディターで、 セル内改行と解釈してくれる記号を埋め込み、 エクセル側で、セル内改行に変換できないだろうかと、 思いつきました。 次のようなイメージです。 ("\n"を、セル内改行文字と仮定します。) あああああああああああ。 ああああ、\nああああああ、\nああああああああああ。 あああああ、\nああああああ。 あああああああああああ。 これを読み込んだら、"\n"の位置で セル内改行が入ったら便利かと・・・。 このやり方以外でも構いませんので、 何か良い方法は無いのでしょうか!? ちなみに、作成したい数は、 大体50ファイル位です。 テキストファイルを 特定のルールに沿ったエクセルに変える作業です。 PC環境は、 OS:Windows XP Home Edition ソフト:Excel 2000,WZ_EDITOR です。 よろしくお願いします。

  • Excel2003 セル内改行

    Excel2003を使用中です。セル内Altキーを押して改行し、5行書きました。 他のセルに移動した途端、五行書いたセル内の文字が全部 #######---、と 1行になってしまいます。F2キーを押したらちゃんと文字が5行に表示されますが、セルを移動したら、その行はまた#######---に戻ります。 他のセルは同じやり方で1個のセルに何行も書いているのに、#######---にならずに、全部文字が表示されています。 #######---となっているセルをF2キーを押さずに全部文字にするにはどうしたらよいのでしょうか。お教えください。

  • HTML テーブルセル内の自動改行について

    テーブルのセルの文字というのは、何も指定しなければ自動的に改行されるかと思います。 しかしスタイルシートなどでwidthを100pxなどに設定すれば、それに従うかと思うのですが、適用されません。 自動改行禁止は入れていません。 どんなに広くwidthを設定しても全角2行分ほどで改行されてしまうのです。 セルの大きさも変化しません。 (文字が多ければ多いほどセルの高さがつのっていき、縦長のセルになっていく) 原因お分かりになる方いらっしゃらないでしょうか…?

  • エクセル、セル内で文字を改行するには?

    エクセルで書類を作っています。セルの書式設定が分からず困っています。少し長い文章を書くとセルを飛び越えてどんどん横に文字が伸びていき、セルの下幅を取っているにもかかわらず,改行してくれません。セルの中で文字が端っこまで行くと勝手に改行してくれる方法を教えていただけませんか? よろしくお願いします。

  • XMLでの改行について

    XMLでの改行について ASPにてXMLを作成し、XSL(FO)にて帳票形式を作成し、TomcatにてPDFを作成しています。 ASP側にて、  Set objXmlNode = objXmlDoc.CreateElement("CV0")  Set objXmlText = objXmlDoc.createTextNode("文字" & vbCrLf & "文字" & vbCrLf& "文字")   objXmlNode.appendChild(objXmlText)  objTrNode.appendChild objXmlNode のようにXMLを作成し、XSL(FO)には、 <xsl:template match="CV0"> <fo:table-cell border-width="0.5mm" border-style="solid" padding="1mm" height="30mm"> <fo:block font-size="12pt" font-family="MSMincho" text-align="center"> <xsl:value-of select='.'/> </fo:block> </fo:table-cell> </xsl:template> のように表記しておりますが、帳票を見ると、 「文字 文字 文字」 になるはずが、 「文字 文字文字」 となってしまいます。 原因として何が考えられるのでしょうか? 回答のほど、よろしくお願いします。

    • 締切済み
    • XML
  • XPで、セル内での改行を行いたいが・・・

    OfficeXP初心者です(^_^.) ひとつのセル内で改行を行いたいのですが、どうしたらできますか? 普通にセル内で[Alt+Enter]キーで改行をして文字列を入力しても、別のセルに移ったタイミングでそのセル幅で表示されてしまいます。(入力したセルより右のセルには何も空白のセルが並んでいる状態にもかかわらず…です) セルの書式設定で確認してみると「折り返して全体を表示する」にチェックがつけられています。 そのチェックをはずしてセルを確認してみると今度は改行がされずにひたすら横に文字列が並んでいる状態になります。 ちなみにそのセルにカーソルをあてて、エクセル画面上部のセルの編集ウィンドウ(?)で見てみると、きちんと改行がされている状態で表示されているのですが。。 どなたか教えてください、お願いします。 (尚、説明不足でわかりにくいようだったら補足をします。よろしくお願いします。)

  • エクセル セル内の改行

    エクセル2003を使用しています。 セル内で文字を入力し、任意の場所で改行を行うには、通常「Alt」+「Enter」を使うと思いますが、どうしても次の行(下のセル)に移動してしまいます。 オプション等で設定できるのでしょうか?

  • JSPでのiTextの動かし方について

    JSPでiTextを動かそうとしていますが、下記JSPソースプログラムでは コンパイルエラーが発生してうまいいきません 原因をお教え頂ければたすかります たぶん設定が不足していると思います 動作環境:jdk.1.6.0_26 Eclipse3.7 Apache-tomcat-7.0.29 ファイル:Program Files\Java\jre6\lib\ext\iText-5.0.6.jar と iTextAsian.jarをインストール JSPソースプログラム <%@ page import="java.io.*, com.lowagie.text.*, com.lowagie.text.pdf.*"%> <% response.setContentType( "application/pdf" ); // step 1: ドキュメントオブジェクトの作成 Document document = new Document(); // step 2: 出力のためのストリームを作成 ByteArrayOutputStream buffer = new ByteArrayOutputStream(); PdfWriter.getInstance( document, buffer ); // step 3: ドキュメントを開く document.open(); // step 4: ドキュメントにパラグラフ(文字列)を追加 document.add(new Paragraph("Hello World")); // step 5: ドキュメントを閉じる document.close(); // step 6: JSPのストリームにPDFを出力する DataOutput output = new DataOutputStream( response.getOutputStream() ); byte[] bytes = buffer.toByteArray(); response.setContentLength(bytes.length); for( int i = 0; i < bytes.length; i++ ) { output.writeByte( bytes[i] ); } %>

    • ベストアンサー
    • Java
  • Excelの自動改行

    セルの横幅は広げずに、入力した文字数の分だけ縦に調節していく 表示形式について質問です。 通常、下記のユーザー設定をして改行しますが、出来上がっている 表に対して1行だけにその設定をする場合、ただ設定するだけでは ちゃんと適用されないのですが、ほかの書式設定を見直す必要があ るのでしょうか? ------------------------------------------------------------ <セル内の自動改行設定方法> 1.自動改行を設定したいセルの上で右クリックして、「セルの書式 設定」を選択 2.「配置」タブで「折り返して全体を表示する」にチェックを入れ る 3.「表示形式」タブで「分類」から「ユーザー定義」を選択し、「 種類」の枠に「d」と入力 4.「Ctrl」を押しながら「J」を押す。 (先程入力した「d」が見えなくなりますが、枠の中で改行されて  いるだけで、カーソルを上に動かすと出てきます) 5.「aaa」と入力してください。 6.「OK」をクリックして完了です。 ------------------------------------------------------------ 宜しくお願いします!!