itext7로 PDF 만들기 ~ 자유 설정: 표 ~

15435 단어 itext7Java

표를 자유롭게 짜주세요.


이번에는 자유배치표입니다.
마지막 Paragraph 위치가 미묘한 편차가 있기 때문에 텍스트 열을 하나의 칸의 표로 설정하는 것도 방법입니다.

지금 코드


FreePosTable.java
import com.itextpdf.kernel.colors.ColorConstants;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.ColumnDocumentRenderer;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.borders.Border;
import com.itextpdf.layout.borders.SolidBorder;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.HorizontalAlignment;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.UnitValue;

public class FreePosTable {
    public static void main(String[] args) throws Exception {
        PdfDocument pdf = new PdfDocument(new PdfWriter("FreePosTable.pdf"));
        PageSize ps = PageSize.A4.rotate();
        PdfPage page = pdf.addNewPage(ps);
        PdfCanvas canvas = new PdfCanvas(page);


        // 平成角ゴシック
        PdfFont font = PdfFontFactory.createFont("HeiseiKakuGo-W5", "UniJIS-UCS2-H");


        // Initialize document
        Document document = new Document(pdf);

        // (100, 200)にwidth:50, height:100を指定
        Rectangle[] columns = {
                new Rectangle(100, 200, 400, 100), // x,y,width,height
        };
        document.setRenderer(new ColumnDocumentRenderer(document, columns));

        // テーブル定義:3列を幅の割合を100:200:300に指定
        Table table = new Table(new float[]{100,200,300});
        table.setWidth(UnitValue.createPercentValue(100))
                .setTextAlignment(TextAlignment.CENTER)
                .setHorizontalAlignment(HorizontalAlignment.CENTER);

        // テーブルのヘッダ指定
        Cell cell = new Cell();
        cell.add(new Paragraph("ヘッダ1"));
        table.addCell(cell);
        Cell cell2 = new Cell();
        cell2.add(new Paragraph("ヘッダ2"));
        table.addCell(cell2);
        Cell cell3 = new Cell();
        cell3.add(new Paragraph("ヘッダ3"));
        table.addCell(cell3);

        // テーブルのボディ部を3行指定
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 3; y++) {
                table.addCell("セル" + x + "-" + y);
            }
        }

        // テーブルのフッタ指定
        table.addFooterCell("フッタ1");
        table.addFooterCell("フッタ2");
        table.addFooterCell("フッタ3");

        // テーブルの枠等を指定
        Border border = new SolidBorder(ColorConstants.RED, 1.5f);
        table.setFont(font);
        table.setBorder(border);
        document.add(table);

        // (100, 200)へ線。width:400, height:100の範囲をチェック
        // また上部は100ごとに線を入れておく
        canvas.moveTo(0, 0).lineTo(100, 200).lineTo(500, 200)
        .lineTo(500, 310).moveTo(500, 300)
        .lineTo(400, 300).lineTo(400, 310).moveTo(400, 300)
        .lineTo(300, 300).lineTo(300, 310).moveTo(300, 300)
        .lineTo(200, 300).lineTo(200, 310).moveTo(200, 300)
        .lineTo(100, 300).lineTo(100, 310).moveTo(100, 300)
        .stroke();

        //Close document
        document.close();
    }
}

설명


위치의 지정은 지난번과 같다.
너비를 알기 쉽게 100개씩 스트라이프를 달아봤어요.
출력 이미지

시작은 지정 위치 + 지정 높이입니다.


테이블도 문자열과 마찬가지로 지정된 위치에서 위로 높이를 표시합니다.
겉으로는 편차가 없는 것 같다.

초과된 부분을 다음 페이지의 같은 위치로 출력합니다


아니면 초과된 줄이 다음 페이지에 표시됩니다.
그러나 머리글 바닥글은 각 페이지에 표시되는 것 같습니다.

열 너비 지정하기


Table table = new Table(new float[]{100,200,300});구문을 사용합니다.
지정한 너비는 400이지만 이것과는 상관없이 비례에 따라 너비를 설정합니다.
다만, newflat[]{1,2,3}에서 왠지 등폭(구 버전은 다 된 것 같은데?)또한 newflat[] {10, 20, 30}에서 오류가 발생했습니다.왜 그랬을까?
요컨대, 나는 어느 정도 큰 값만 지정하면 된다고 생각한다

좋은 웹페이지 즐겨찾기