📅  最后修改于: 2023-12-03 14:49:48.437000             🧑  作者: Mango
在生成PDF文件时,表格是一个非常常见的元素。为表格添加背景色可以使表格更具有可读性和可视性。这篇文章将介绍如何在Java中为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库,您可以轻松地为表格添加不同的颜色,以帮助读者更清晰地了解表格中的内容。