iTextのセル内で折り返しする場所を変える

  • 投稿日:
  • by
  • カテゴリ:
  • 背景
半角スペースや全角スペースで文字列が折り返されてしまうため
  • 実装方法
isSplitCharacter()をオーバーライドして、初期設定を変えてあげればいいことがわかった
  • サンプル
package com.why2know.sample.sampleiText.main;

import java.io.FileOutputStream;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.SplitCharacter;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfChunk;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

public class Samle1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Samle1 s = new Samle1();
		s.exec();
	}

	private void exec() {
	        Document document = new Document(PageSize.A4);
	        try {
	            Font font = new Font(BaseFont.createFont("HeiseiMin-W3", "UniJIS-UCS2-HW-H",BaseFont.NOT_EMBEDDED),10);
	            PdfWriter.getInstance(document,
	                            new FileOutputStream("c:/Sample1.pdf"));
	            document.open();
	            PdfPTable table = new PdfPTable(4);
	            table.setTotalWidth(10);
	            PdfPCell cell;
				
				String str = "テスト文字列文字列 ←半角スペース→ 全角スペース→ ああああああいいいいい";
	            Chunk c = new Chunk(str, font);

	            SplitCharacter s = setSplitCharacter();
	            c.setSplitCharacter(s);
	            
	            cell = new PdfPCell(new Paragraph(c)); 
	            cell.setFixedHeight(100f);
	            cell.setPaddingTop(5);
	            cell.setPaddingLeft(5);
	            cell.setPaddingRight(10);	            
	            
	            table.addCell(cell);
	            table.addCell(cell);
	            table.addCell(cell);
	            table.addCell(cell);

	            document.add(table);
	            document.close();
	        } catch (Exception de) {
	            de.printStackTrace();
	        }
	        document.close();
	    }

	private SplitCharacter setSplitCharacter() {
        return new SplitCharacter() {
        	public boolean isSplitCharacter(int start, int current, int end, char[] cc, PdfChunk[] ck) {
//初期設定
//        		   char c;
//        		   if (ck == null)
//        		       c = cc[current];
//        		   else
//        		       c = (char) ck[Math.min(current, ck.length - 1)].getUnicodeEquivalent(cc[current]);
//        		   if (c <= ' ' || c == '-') {
//        		       return true;
//        		   }
//        		   if (c < 0x2e80)
//        		       return false;
//        		   return ((c >= 0x2e80 && c < 0xd7a0)
//        		   || (c >= 0xf900 && c < 0xfb00)
//        		   || (c >= 0xfe30 && c < 0xfe50)
//        		   || (c >= 0xff61 && c < 0xffa0));
        		return false; //折り返しさせないように、falseを返す
        		}	
		};
	}
}