📜  使用Java为 PDF 中的表格设置背景(1)

📅  最后修改于: 2023-12-03 14:49:48.437000             🧑  作者: Mango

使用Java为PDF中的表格设置背景

在生成PDF文件时,表格是一个非常常见的元素。为表格添加背景色可以使表格更具有可读性和可视性。这篇文章将介绍如何在Java中为PDF中的表格设置背景色。

前置条件

在开始之前,需要以下工具和库:

  • JDK 8或更高版本
  • iText 7库:用于生成PDF文件
  • Apache Commons Lang库:用于生成随机颜色
添加表格到PDF文件中

首先,我们需要创建一个PDF文件和一个表格。我们可以使用iText库来创建它们。

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;

import org.apache.commons.lang3.RandomUtils;

import com.itextpdf.io.font.FontConstants;
import com.itextpdf.kernel.colors.Color;
import com.itextpdf.kernel.colors.DeviceRgb;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.HorizontalAlignment;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.layout.property.VerticalAlignment;

public class TableWithBackgroundColor {
    
    public static void main(String[] args) throws FileNotFoundException {
        String filename = "table-with-background-color.pdf";
        PdfDocument pdfDoc = new PdfDocument(new PdfWriter(new FileOutputStream(filename)));
        Document doc = new Document(pdfDoc, PageSize.A4);
        
        Table table = new Table(new float[]{2, 2, 2});
        table.setWidthPercent(80).setTextAlignment(TextAlignment.CENTER);
        
        addTableHeader(table);
        addRows(table);
        
        doc.add(table);
        
        doc.close();
    }
    
    private static void addTableHeader(Table table) {
        Cell[] header = new Cell[]{
            new Cell().setBackgroundColor(new DeviceRgb(140, 221, 8)).add("Header 1").setTextAlignment(TextAlignment.CENTER).setBold().setVerticalAlignment(VerticalAlignment.MIDDLE).setHorizontalAlignment(HorizontalAlignment.CENTER),
            new Cell().setBackgroundColor(new DeviceRgb(140, 221, 8)).add("Header 2").setTextAlignment(TextAlignment.CENTER).setBold().setVerticalAlignment(VerticalAlignment.MIDDLE).setHorizontalAlignment(HorizontalAlignment.CENTER),
            new Cell().setBackgroundColor(new DeviceRgb(140, 221, 8)).add("Header 3").setTextAlignment(TextAlignment.CENTER).setBold().setVerticalAlignment(VerticalAlignment.MIDDLE).setHorizontalAlignment(HorizontalAlignment.CENTER)
        };
        
        for (Cell cell : header) {
            table.addHeaderCell(cell);
        }
    }
    
    private static void addRows(Table table) {
        Random random = new Random();
        for (int i = 1; i <= 10; i++) {
            Cell[] row = new Cell[]{
                new Cell().add(Integer.toString(i)).setTextAlignment(TextAlignment.CENTER),
                new Cell().add(Integer.toString(RandomUtils.nextInt(1, 100))).setTextAlignment(TextAlignment.CENTER),
                new Cell().add(Integer.toString(RandomUtils.nextInt(1, 100))).setTextAlignment(TextAlignment.CENTER)
            };
            
            Color randomColor = new DeviceRgb(random.nextInt(256), random.nextInt(256), random.nextInt(256));
            for (Cell cell : row) {
                cell.setBackgroundColor(randomColor);
                table.addCell(cell);
            }
        }
    }

}

以上代码生成一个3列的简单表格,其中包含标题和10行数据。

为表格添加背景色

我们可以选择在表格的标题和数据行中为单元格设置不同的颜色,以使表格中的每个元素在不同的背景下更突出。

private static void addTableHeader(Table table) {
    Cell[] header = new Cell[]{
        new Cell().setBackgroundColor(new DeviceRgb(140, 221, 8)).add("Header 1").setTextAlignment(TextAlignment.CENTER).setBold().setVerticalAlignment(VerticalAlignment.MIDDLE).setHorizontalAlignment(HorizontalAlignment.CENTER),
        new Cell().setBackgroundColor(new DeviceRgb(140, 221, 8)).add("Header 2").setTextAlignment(TextAlignment.CENTER).setBold().setVerticalAlignment(VerticalAlignment.MIDDLE).setHorizontalAlignment(HorizontalAlignment.CENTER),
        new Cell().setBackgroundColor(new DeviceRgb(140, 221, 8)).add("Header 3").setTextAlignment(TextAlignment.CENTER).setBold().setVerticalAlignment(VerticalAlignment.MIDDLE).setHorizontalAlignment(HorizontalAlignment.CENTER)
    };

    for (Cell cell : header) {
        table.addHeaderCell(cell);
    }
}

private static void addRows(Table table) {
    Random random = new Random();
    for (int i = 1; i <= 10; i++) {
        Cell[] row = new Cell[]{
            new Cell().add(Integer.toString(i)).setTextAlignment(TextAlignment.CENTER),
            new Cell().add(Integer.toString(RandomUtils.nextInt(1, 100))).setTextAlignment(TextAlignment.CENTER),
            new Cell().add(Integer.toString(RandomUtils.nextInt(1, 100))).setTextAlignment(TextAlignment.CENTER)
        };

        // 生成随机颜色
        Color randomColor = new DeviceRgb(random.nextInt(256), random.nextInt(256), random.nextInt(256));

        // 为每个单元格设置背景色
        for (Cell cell : row) {
            cell.setBackgroundColor(randomColor);
            table.addCell(cell);
        }
    }
}

以上代码将为标题行和数据行中的每个单元格设置不同的背景色。运行该程序,即可在生成的PDF文件中看到这些背景色。

结论

使用Java为PDF表格设置背景色非常简单。通过使用iText库,您可以轻松地为表格添加不同的颜色,以帮助读者更清晰地了解表格中的内容。