itext7로 PDF 만들기 ~ 자유 설정: 표 ~
표를 자유롭게 짜주세요.
이번에는 자유배치표입니다.
마지막 Paragraph 위치가 미묘한 편차가 있기 때문에 텍스트 열을 하나의 칸의 표로 설정하는 것도 방법입니다.
지금 코드
FreePosTable.javaimport 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}에서 오류가 발생했습니다.왜 그랬을까?
요컨대, 나는 어느 정도 큰 값만 지정하면 된다고 생각한다
Reference
이 문제에 관하여(itext7로 PDF 만들기 ~ 자유 설정: 표 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/naverut/items/5047a70ef47b6246727f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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}에서 오류가 발생했습니다.왜 그랬을까?
요컨대, 나는 어느 정도 큰 값만 지정하면 된다고 생각한다
Reference
이 문제에 관하여(itext7로 PDF 만들기 ~ 자유 설정: 표 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/naverut/items/5047a70ef47b6246727f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
테이블도 문자열과 마찬가지로 지정된 위치에서 위로 높이를 표시합니다.
겉으로는 편차가 없는 것 같다.
초과된 부분을 다음 페이지의 같은 위치로 출력합니다
아니면 초과된 줄이 다음 페이지에 표시됩니다.
그러나 머리글 바닥글은 각 페이지에 표시되는 것 같습니다.
열 너비 지정하기
Table table = new Table(new float[]{100,200,300});구문을 사용합니다.
지정한 너비는 400이지만 이것과는 상관없이 비례에 따라 너비를 설정합니다.
다만, newflat[]{1,2,3}에서 왠지 등폭(구 버전은 다 된 것 같은데?)또한 newflat[] {10, 20, 30}에서 오류가 발생했습니다.왜 그랬을까?
요컨대, 나는 어느 정도 큰 값만 지정하면 된다고 생각한다
Reference
이 문제에 관하여(itext7로 PDF 만들기 ~ 자유 설정: 표 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/naverut/items/5047a70ef47b6246727f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Table table = new Table(new float[]{100,200,300});구문을 사용합니다.
지정한 너비는 400이지만 이것과는 상관없이 비례에 따라 너비를 설정합니다.
다만, newflat[]{1,2,3}에서 왠지 등폭(구 버전은 다 된 것 같은데?)또한 newflat[] {10, 20, 30}에서 오류가 발생했습니다.왜 그랬을까?
요컨대, 나는 어느 정도 큰 값만 지정하면 된다고 생각한다
Reference
이 문제에 관하여(itext7로 PDF 만들기 ~ 자유 설정: 표 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/naverut/items/5047a70ef47b6246727f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)