如何在 Java 中使用 PDFPTable 将 2 table 从上到下添加到单个 table

How to add 2 tables top to bottom to a single table using PDFPTable in Java

请检查这里的代码。面临从上到下合并 2 个 PDFPtable 的问题。

PdfPTable table = new PdfPTable(new float[] { 1.0f, 2.0f, 5.0f, 1.0f, 2.0f });
table.setWidthPercentage(100.0f);

ArrayList<String> lHeaders = new ArrayList<>();
lHeaders.add("S. No.");
lHeaders.add("Course Code");
lHeaders.add("Course Name");
lHeaders.add("Credit");
lHeaders.add("Letter Grade");

ArrayList<String> lData = new ArrayList<>();
lData.add("1");
lData.add("D 210");
lData.add("COMPUTER & INFORMATION TECHNOLOGY FUNDAMENTAL LAB-II");
lData.add("1.0");
lData.add("BB");

// Create and add a title across both columns.

Font headerfont = new Font(Font.TIMES_ROMAN, 15, Font.BOLD);

// PdfPCell cell = new PdfPCell (new Paragraph ("New Mustang
// Features"));

PdfPCell cell;

for (String i : lHeaders) {
    cell = new PdfPCell(new Paragraph(i, headerfont));
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    cell.setBackgroundColor(new Color(255, 0, 0));
    // cell.setPadding (10.0f);
    table.addCell(cell);
}

// Add header cells for these columns.

// cell = new PdfPCell (new Paragraph ("Feature"));

// PdfPCell cell1;
Font datafont = new Font(Font.HELVETICA, 10, Font.NORMAL);
for (String j : lData) {
    cell = new PdfPCell(new Paragraph(j, datafont));
    cell.setHorizontalAlignment(Element.ALIGN_LEFT);
    // cell.setPadding (10.0f);
    table.addCell(cell);
}

Font headerfont2 = new Font(Font.TIMES_ROMAN, 10, Font.BOLD);

PdfPTable table2 = new PdfPTable(8);
table2.setWidthPercentage(100.0f);
PdfPCell cell2;
cell2 = new PdfPCell(new Paragraph("CURRENT SEMESTER RECORD", headerfont2));
cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
cell2.setColspan(4);
table2.addCell(cell2);
cell2 = new PdfPCell(new Paragraph("CUMULATIVE SEMESTER RECORD", headerfont2));
cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
cell2.setColspan(4);
table2.addCell(cell2);

cell2 = new PdfPCell(new Paragraph("TOTAL CREDIT POINTS", headerfont2));
cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
table2.addCell(cell2);
cell2 = new PdfPCell(new Paragraph("TOTAL CREDIT", headerfont2));
cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
table2.addCell(cell2);
cell2 = new PdfPCell(new Paragraph("CREDITS EARNED", headerfont2));
cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
table2.addCell(cell2);
cell2 = new PdfPCell(new Paragraph("SGPA", headerfont2));
cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
table2.addCell(cell2);

cell2 = new PdfPCell(new Paragraph("TOTAL CREDIT POINTS", headerfont2));
cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
table2.addCell(cell2);
cell2 = new PdfPCell(new Paragraph("TOTAL CREDIT", headerfont2));
cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
table2.addCell(cell2);
cell2 = new PdfPCell(new Paragraph("CREDITS EARNED", headerfont2));
cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
table2.addCell(cell2);
cell2 = new PdfPCell(new Paragraph("CGPA", headerfont2));
cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
table2.addCell(cell2);
cell2 = new PdfPCell(new Paragraph("Result declared on :", headerfont2));
cell2.setHorizontalAlignment(Element.ALIGN_LEFT);
cell2.setPaddingTop(40);
cell2.setBorderWidthLeft(0.5f);
cell2.setBorderWidthBottom(0.5f);
cell2.setColspan(4);
table2.addCell(cell2);
cell2 = new PdfPCell(new Paragraph("Controller of Examinations", headerfont2));
cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
cell2.setPaddingTop(40);
cell2.setBorderWidthRight(0.5f);
cell2.setBorderWidthBottom(0.5f);
cell2.setColspan(4);
table2.addCell(cell2);

我创建了两个 PDFPtable 实例,一个是 table,另一个是 table2,我只想合并这两个实例和我代码中的 return .可能吗?我不想将它从我的代码和 return 文档实例添加到文档中。 pdf 看起来像附加的图像。

总而言之,您基本上想将这两个 table 合并为一个,因为您的方法被设计为 return 只有一个 table。

如果可能,最好的解决方案是更改方法的设计并允许它 return 多个 tables,作为 Iterable(例如 List) 或作为数组。

如果这不可能(在您的情况下 return 单个 table 似乎是项目要求),解决方案是创建另一个单列 table 并将您的第一个 table 放入其第一行,将您的第二个放入第二行。为了获得适当的外观,您可能还需要相应地调整边距和边框的 table 属性。

不过请注意,iText 5 table 并非为密集 table 堆叠而设计; tables inside tables inside tables 可能会在例如期间引起有趣的影响。分页符,可能非常耗费资源。