Adicionar tabelas ao PDF em Java
Aspose.PDF for Java fornece uma API Table completa para criação de tabelas com personalização de layout e conteúdo.
Criar uma tabela básica
Use este exemplo quando precisar adicionar uma tabela simples com bordas uniformes e células de texto.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um Table e configure suas bordas.
- Adicione linhas e células, anexe a tabela à página e salve o documento.
public static void createTable(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Table table = new Table();
table.setBorder(new BorderInfo(BorderSide.All, 5, Color.getLightGray()));
table.setDefaultCellBorder(new BorderInfo(BorderSide.All, 5, Color.getLightGray()));
for (int rowCount = 0; rowCount < 10; rowCount++) {
Row row = table.getRows().add();
row.getCells().add("Column (" + rowCount + ", 1)");
row.getCells().add("Column (" + rowCount + ", 2)");
row.getCells().add("Column (" + rowCount + ", 3)");
}
page.getParagraphs().add(table);
document.save(outputFile.toString());
}
}
Adicionar células com mesclagem de linhas e colunas
Use este exemplo quando a tabela precisar de células mescladas em linhas ou colunas.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um Table e adicione linhas.
- Configure
ColSpaneRowSpannas células de destino, então salve o PDF.
public static void addRowspanOrColspan(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Table table = new Table();
table.setBorder(new BorderInfo(BorderSide.All, 0.5f, Color.getBlack()));
table.setDefaultCellBorder(new BorderInfo(BorderSide.All, 0.5f, Color.getBlack()));
Row row1 = table.getRows().add();
for (int cellCount = 1; cellCount < 5; cellCount++) {
row1.getCells().add("Test 1" + cellCount);
}
Row row2 = table.getRows().add();
row2.getCells().add("Test 2 1");
Cell cell = row2.getCells().add("Test 2 2");
cell.setColSpan(2);
row2.getCells().add("Test 2 4");
Row row3 = table.getRows().add();
row3.getCells().add("Test 3 1");
row3.getCells().add("Test 3 2");
row3.getCells().add("Test 3 3");
row3.getCells().add("Test 3 4");
Row row4 = table.getRows().add();
row4.getCells().add("Test 4 1");
cell = row4.getCells().add("Test 4 2");
cell.setRowSpan(2);
row4.getCells().add("Test 4 3");
row4.getCells().add("Test 4 4");
Row row5 = table.getRows().add();
row5.getCells().add("Test 5 1");
row5.getCells().add("Test 5 3");
row5.getCells().add("Test 5 4");
page.getParagraphs().add(table);
document.save(outputFile.toString());
}
}
Adicionar bordas de tabela e preenchimento de célula
Use este exemplo quando precisar configurar bordas, preenchimento e o comportamento de quebra de linha das células.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um Table e configure larguras, bordas e preenchimento.
- Adicione linhas e salve o documento resultante.
public static void addBorders(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Table table = new Table();
page.getParagraphs().add(table);
table.setColumnWidths("50 50 50");
table.setDefaultCellBorder(new BorderInfo(BorderSide.All, 0.1f));
table.setBorder(new BorderInfo(BorderSide.All, 1));
table.setDefaultCellPadding(new MarginInfo(5, 5, 5, 5));
Row row1 = table.getRows().add();
row1.getCells().add("col1");
row1.getCells().add("col2");
row1.getCells().add();
row1.getCells().get_Item(2).getParagraphs().add(new TextFragment("col3 with large text string"));
row1.getCells().get_Item(2).setWordWrapped(false);
Row row2 = table.getRows().add();
row2.getCells().add("item1");
row2.getCells().add("item2");
row2.getCells().add("item3");
document.save(outputFile.toString());
}
}
Ativar ajuste automático de layout de tabela
Use este exemplo quando a tabela deve ajustar-se automaticamente à largura de página disponível.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um Table e defina
ColumnAdjustment.AutoFitToWindow. - Adicione linhas de exemplo e salve o PDF.
public static void autoFit(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Table table = new Table();
page.getParagraphs().add(table);
table.setColumnWidths("50 50 50");
table.setColumnAdjustment(ColumnAdjustment.AutoFitToWindow);
table.setDefaultCellBorder(new BorderInfo(BorderSide.All, 0.1f));
table.setBorder(new BorderInfo(BorderSide.All, 1));
table.setDefaultCellPadding(new MarginInfo(5, 5, 5, 5));
Row row1 = table.getRows().add();
row1.getCells().add("col1");
row1.getCells().add("col2");
row1.getCells().add("col3");
Row row2 = table.getRows().add();
row2.getCells().add("item1");
row2.getCells().add("item2");
row2.getCells().add("item3");
document.save(outputFile.toString());
}
}
Adicionar uma imagem dentro de uma célula de tabela
Use este exemplo quando a tabela precisar exibir conteúdo de imagem raster em uma de suas células.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um Table e adicione uma linha com células de texto e imagem.
- Configure o Image dimensione e salve o documento.
public static void addImage(Path imageFile, Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Table table = new Table();
table.setColumnWidths("200 100");
Row row = table.getRows().add();
row.getCells().add().getParagraphs().add(new TextFragment(imageFile.toString()));
Image image = new Image();
image.setFile(imageFile.toString());
image.setFixWidth(50);
image.setFixHeight(50);
row.getCells().add().getParagraphs().add(image);
page.getParagraphs().add(table);
document.save(outputFile.toString());
}
}
Adicionar imagens SVG dentro das células da tabela
Use este exemplo quando a tabela deve renderizar arquivos SVG linha por linha.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um Table e itere pelos arquivos SVG.
- Adicione uma linha por imagem, configure o SVG Image, e salve o PDF.
public static void addSvgImage(List<Path> imageFiles, Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Table table = new Table();
table.setColumnWidths("200 100");
for (Path imageFile : imageFiles) {
Row row = table.getRows().add();
row.getCells().add().getParagraphs().add(new TextFragment(imageFile.toString()));
Image image = new Image();
image.setFileType(ImageFileType.Svg);
image.setFile(imageFile.toString());
image.setFixWidth(50);
image.setFixHeight(50);
row.getCells().add().getParagraphs().add(image);
}
page.getParagraphs().add(table);
document.save(outputFile.toString());
}
}
Adicionar fragmentos HTML às células da tabela
Use este exemplo quando o conteúdo da tabela deve incluir formatação HTML inline.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um Table e configure as bordas.
- Adicione objetos HtmlFragment para as células e salvar o documento.
public static void addHtmlFragments(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Table table = new Table();
table.setBorder(new BorderInfo(BorderSide.All, 0.5f, Color.getLightGray()));
table.setDefaultCellBorder(new BorderInfo(BorderSide.All, 0.5f, Color.getLightGray()));
for (int rowCount = 1; rowCount < 10; rowCount++) {
Row row = table.getRows().add();
row.getCells().add().getParagraphs().add(new HtmlFragment("Column <strong>(" + rowCount + ", 1)</strong>"));
row.getCells().add().getParagraphs().add(new HtmlFragment("Column <span style='color:red'>(" + rowCount + ", 2)</span>"));
row.getCells().add().getParagraphs().add(new HtmlFragment("Column <span style='text-decoration: underline'>(" + rowCount + ", 3)</span>"));
}
page.getParagraphs().add(table);
document.save(outputFile.toString());
}
}
Adicionar fragmentos LaTeX às células da tabela
Use este exemplo quando o conteúdo da tabela deve renderizar expressões TeX ou LaTeX.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um Table com bordas.
- Adicione objetos TeXFragment para as células e salvar o arquivo de saída.
public static void addLatexFragments(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Table table = new Table();
table.setBorder(new BorderInfo(BorderSide.All, 0.5f, Color.getLightGray()));
table.setDefaultCellBorder(new BorderInfo(BorderSide.All, 0.5f, Color.getLightGray()));
for (int rowCount = 1; rowCount < 10; rowCount++) {
Row row = table.getRows().add();
row.getCells().add().getParagraphs().add(new TeXFragment("Column $\\mathbf{(" + rowCount + ", 1)}$"));
row.getCells().add().getParagraphs().add(new TeXFragment("Column $\\textcolor{red}{(" + rowCount + ", 2)}$"));
row.getCells().add().getParagraphs().add(new TeXFragment("Column $\\underline{(" + rowCount + ", 3)}$"));
}
page.getParagraphs().add(table);
document.save(outputFile.toString());
}
}
Forçar uma tabela para uma nova página
Use este exemplo quando uma segunda tabela deve iniciar em uma página separada após uma tabela grande.
- Crie um novo documento PDF Document e configure as configurações de página.
- Construa o primeiro grande Table e adicione-o à página.
- Crie uma segunda tabela, defina
InNewPage, e salve o documento.
public static void addTableOnNewPage(Path outputFile) {
try (Document document = new Document()) {
document.getPageInfo().getMargin().setLeft(37);
document.getPageInfo().getMargin().setRight(37);
document.getPageInfo().getMargin().setTop(37);
document.getPageInfo().getMargin().setBottom(37);
document.getPageInfo().setLandscape(true);
Page page = document.getPages().add();
Table table = new Table();
table.setColumnWidths("50 100");
for (int i = 1; i < 121; i++) {
Row row = table.getRows().add();
row.setFixedRowHeight(15);
row.getCells().add().getParagraphs().add(new TextFragment("Content 1"));
row.getCells().add().getParagraphs().add(new TextFragment("Content 2"));
}
page.getParagraphs().add(table);
Table table1 = new Table();
table1.setColumnWidths("100 100");
for (int i = 1; i < 11; i++) {
Row row = table1.getRows().add();
row.getCells().add().getParagraphs().add(new TextFragment("Content 3"));
row.getCells().add().getParagraphs().add(new TextFragment("Content 4"));
}
table1.setInNewPage(true);
page.getParagraphs().add(table1);
document.save(outputFile.toString());
}
}
Crie uma tabela quebrada verticalmente com colunas repetidas
Use este exemplo quando uma tabela larga deve continuar verticalmente e repetir colunas chave.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um Table e configure a quebra vertical com colunas repetidas.
- Adicione o cabeçalho e as linhas de dados, então salve o documento.
public static void addTableHideBorders(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Table table = new Table();
table.setBroken(TableBroken.Vertical);
table.setDefaultCellBorder(new BorderInfo(BorderSide.All));
table.setRepeatingColumnsCount(2);
page.getParagraphs().add(table);
Row row = table.getRows().add();
Cell cell = row.getCells().add("header 1");
cell.setColSpan(2);
cell.setBackgroundColor(Color.getLightGray());
row.getCells().add("header 3");
Cell cell2 = row.getCells().add("header 4");
cell2.setColSpan(2);
cell2.setBackgroundColor(Color.getLightBlue());
row.getCells().add("header 6");
Cell cell3 = row.getCells().add("header 7");
cell3.setColSpan(2);
cell3.setBackgroundColor(Color.getLightGreen());
Cell cell4 = row.getCells().add("header 9");
cell4.setColSpan(3);
cell4.setBackgroundColor(Color.getLightCoral());
for (int i = 12; i < 18; i++) {
row.getCells().add("header " + i);
}
for (int rowCounter = 0; rowCounter < 3; rowCounter++) {
Row row1 = table.getRows().add();
for (int i = 1; i < 18; i++) {
row1.getCells().add("col " + rowCounter + ", " + i);
}
}
document.save(outputFile.toString());
}
}
Reutilizar o exemplo de bordas e preenchimento
Use este auxiliar quando o cenário de margens e preenchimento deve delegar para o exemplo de borda compartilhada.
- Chame o método existente de borda e preenchimento da tabela.
- Reutilize a mesma lógica de layout de tabela sem duplicar o código.
public static void addMarginsOrPadding(Path outputFile) {
addBorders(outputFile);
}
Criar uma tabela com cantos arredondados
Use este exemplo quando a tabela deve usar estilo de cantos arredondados em vez de bordas retangulares padrão.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um Table e configure as configurações de borda arredondada.
- Adicione linhas à tabela e salve o PDF.
public static void createTableWithRoundCorner(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Table table = new Table();
BorderInfo borderInfo = new BorderInfo(BorderSide.All);
borderInfo.setRoundedBorderRadius(15);
table.setCornerStyle(BorderCornerStyle.Round);
table.setBorder(borderInfo);
for (int rowCount = 0; rowCount < 10; rowCount++) {
Row row = table.getRows().add();
row.getCells().add("Column (" + rowCount + ", 1)");
row.getCells().add("Column (" + rowCount + ", 2)");
row.getCells().add("Column (" + rowCount + ", 3)");
}
page.getParagraphs().add(table);
document.save(outputFile.toString());
}
}
Adicionar linhas de cabeçalho repetidas
Use este exemplo quando tabelas de várias páginas devem repetir suas linhas de cabeçalho em cada página de continuação.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um verticalmente quebrado Table e configure a contagem de linhas repetidas e o estilo.
- Adicione linhas de cabeçalho e linhas de dados, depois salve o documento.
public static void addRepeatingRows(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Table table = new Table();
table.setBroken(TableBroken.Vertical);
table.setRepeatingRowsCount(2);
TextState textState = new TextState();
textState.setFontSize(12);
textState.setFont(FontRepository.findFont("TimesNewRoman"));
textState.setForegroundColor(Color.getRed());
table.setRepeatingRowsStyle(textState);
table.setColumnWidths("100 100 100");
table.setDefaultCellBorder(new BorderInfo(BorderSide.All, 0.5f, Color.getBlack()));
table.setBorder(new BorderInfo(BorderSide.All, 1, Color.getBlack()));
Row headerRow1 = table.getRows().add();
headerRow1.getCells().add("Header 1-1");
headerRow1.getCells().add("Header 1-2");
headerRow1.getCells().add("Header 1-3");
for (Cell cell : headerRow1.getCells()) {
cell.setBackgroundColor(Color.getLightGray());
}
Row headerRow2 = table.getRows().add();
headerRow2.getCells().add("Header 2-1");
headerRow2.getCells().add("Header 2-2");
headerRow2.getCells().add("Header 2-3");
for (Cell cell : headerRow2.getCells()) {
cell.setBackgroundColor(Color.getLightBlue());
}
for (int i = 1; i < 101; i++) {
Row row = table.getRows().add();
row.getCells().add("Data " + i + "-1");
row.getCells().add("Data " + i + "-2");
row.getCells().add("Data " + i + "-3");
}
page.getParagraphs().add(table);
document.save(outputFile.toString());
}
}
Adicionar colunas repetidas em uma tabela larga
Use este exemplo quando as primeiras colunas devem repetir enquanto a tabela se quebra verticalmente na mesma página.
- Crie um novo documento PDF Document e configure o tamanho da página.
- Crie um Table e defina colunas repetidas mais comportamento de ajuste automático.
- Adicione o cabeçalho e as linhas de dados, então salve o PDF.
public static void addRepeatingColumns(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
page.setPageSize(PageSize.getA5().getHeight(), PageSize.getA5().getWidth());
BorderInfo border = new BorderInfo(BorderSide.All, 0.5f, Color.getLightGray());
Table table = new Table();
table.setBroken(TableBroken.VerticalInSamePage);
table.setColumnAdjustment(ColumnAdjustment.AutoFitToContent);
table.setRepeatingColumnsCount(5);
table.setBorder(border);
table.setDefaultCellBorder(border);
page.getParagraphs().add(table);
Row row = table.getRows().add();
for (int i = 1; i < 6; i++) {
Cell cell = row.getCells().add("header " + i);
cell.setBackgroundColor(Color.getLightGray());
}
for (int i = 6; i < 18; i++) {
row.getCells().add("header " + i);
}
for (int rowCounter = 1; rowCounter < 6; rowCounter++) {
row = table.getRows().add();
for (int i = 1; i < 6; i++) {
Cell cell = row.getCells().add("cell " + rowCounter + "," + i);
cell.setBackgroundColor(Color.getLightGray());
}
for (int i = 6; i < 18; i++) {
row.getCells().add("cell " + rowCounter + "," + i);
}
}
document.save(outputFile.toString());
}
}
Inserir quebras de página entre as linhas da tabela
Use este exemplo quando linhas específicas da tabela devem começar em uma nova página.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um Table e preencha muitas linhas.
- Marcar linhas selecionadas com
InNewPagee salve o documento.
public static void insertPageBreak(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Table table = new Table();
table.setBorder(new BorderInfo(BorderSide.All, Color.getRed()));
table.setDefaultCellBorder(new BorderInfo(BorderSide.All, Color.getRed()));
table.setColumnWidths("100 100");
for (int counter = 0; counter < 201; counter++) {
Row row = new Row();
table.getRows().add(row);
row.getCells().add().getParagraphs().add(new TextFragment("Cell " + counter + ", 0"));
row.getCells().add().getParagraphs().add(new TextFragment("Cell " + counter + ", 1"));
if (counter % 10 == 0 && counter != 0) {
row.setInNewPage(true);
}
}
page.getParagraphs().add(table);
document.save(outputFile.toString());
}
}
Rotacionar texto dentro das células da tabela
Use este exemplo quando o texto da célula deve ser exibido em diferentes ângulos de rotação.
- Crie um novo documento PDF Document e adicione uma página.
- Crie um Table e adicione uma linha com várias células.
- Crie girado objetos TextFragment, adicione-os às células e salve o PDF.
public static void rotatedTextTable(Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
Table table = new Table();
table.setBorder(new BorderInfo(BorderSide.All, 0.5f, Color.getBlack()));
table.setDefaultCellBorder(new BorderInfo(BorderSide.All, 0.5f, Color.getBlack()));
Row row = table.getRows().add();
row.setMinRowHeight(200);
for (int cellCount = 0; cellCount < 4; cellCount++) {
Cell cell = row.getCells().add();
TextFragment textFragment = new TextFragment("Cell 1 " + (cellCount - 1));
textFragment.getTextState().setRotation(90 * cellCount);
textFragment.setHorizontalAlignment(HorizontalAlignment.Center);
cell.getParagraphs().add(textFragment);
}
page.getParagraphs().add(table);
document.save(outputFile.toString());
}
}