IText:如何将被文本包围的内部 table 添加到 table
IText: How to add an inner table surrounded by text to a table
我试图在 iText 5.5.4 中向外部 table 添加一个被文本包围的 table,但是内部 table 消失了,我似乎无法修复问题。
这是我所期待的:
*********************
* Hello World *
* +++++++++++++++++ * <--
* + Goodbye World + * <-- these 3 lines never show up in the PDF
* +++++++++++++++++ * <--
* Hello World *
*********************
这是我的代码示例:
public class TableTest {
public static void main(String[] args) throws FileNotFoundException, DocumentException {
final Document document = new Document(PageSize.LETTER, 21, 21, 30, 35);
PdfWriter.getInstance(document, new FileOutputStream("testTable.pdf"));
document.open();
// table 2
final PdfPTable table2 = new PdfPTable(1);
table2.setSpacingBefore(0);
table2.setHorizontalAlignment(Element.ALIGN_LEFT);
table2.getDefaultCell().setBorderColor(BaseColor.RED);
table2.getDefaultCell().setBorderWidth(1);
table2.addCell("Goodbye World");
// table 1
final PdfPTable table1 = new PdfPTable(1);
table1.setSpacingBefore(0);
table1.setHorizontalAlignment(Element.ALIGN_LEFT);
table1.setWidthPercentage(100);
table1.getDefaultCell().setBorderColor(BaseColor.BLACK);
table1.getDefaultCell().setBorderWidth(1);
// contents
Phrase phrase = new Phrase();
phrase.add(new Chunk("Hello World"));
phrase.add(table2); // <--- added but doesn't show up!
phrase.add(new Chunk("Hello World"));
table1.addCell(phrase);
document.add(table1);
document.close();
}
}
这是一个更大的报告的一部分,我在这种情况下使用 tables 作为边框和填充。
您正在使用文本模式(当您只有文本时使用),而您应该使用复合模式(因为您要将 table 添加到单元格)。
请看一下NestedTableProblem
例子:
// table 2
final PdfPTable table2 = new PdfPTable(1);
table2.setHorizontalAlignment(Element.ALIGN_LEFT);
table2.getDefaultCell().setBorderColor(BaseColor.RED);
table2.getDefaultCell().setBorderWidth(1);
table2.addCell("Goodbye World");
// table 1
final PdfPTable table1 = new PdfPTable(1);
table1.setHorizontalAlignment(Element.ALIGN_LEFT);
table1.setWidthPercentage(100);
// contents
PdfPCell cell = new PdfPCell();
cell.setBorderColor(BaseColor.BLACK);
cell.setBorderWidth(1);
cell.addElement(new Chunk("Hello World"));
cell.addElement(table2);
cell.addElement(new Chunk("Hello World"));
table1.addCell(cell);
document.add(table1);
在此代码片段中,cell
对象由不同的元素组成(这就是 复合模式 的意义所在):
在您的代码片段中,您将几个元素添加到 Phrase
并将此 Phrase
添加到 文本模式 中的 PdfPCell
.由于一个元素不是普通文本而是table,因此无法呈现。
我试图在 iText 5.5.4 中向外部 table 添加一个被文本包围的 table,但是内部 table 消失了,我似乎无法修复问题。
这是我所期待的:
*********************
* Hello World *
* +++++++++++++++++ * <--
* + Goodbye World + * <-- these 3 lines never show up in the PDF
* +++++++++++++++++ * <--
* Hello World *
*********************
这是我的代码示例:
public class TableTest {
public static void main(String[] args) throws FileNotFoundException, DocumentException {
final Document document = new Document(PageSize.LETTER, 21, 21, 30, 35);
PdfWriter.getInstance(document, new FileOutputStream("testTable.pdf"));
document.open();
// table 2
final PdfPTable table2 = new PdfPTable(1);
table2.setSpacingBefore(0);
table2.setHorizontalAlignment(Element.ALIGN_LEFT);
table2.getDefaultCell().setBorderColor(BaseColor.RED);
table2.getDefaultCell().setBorderWidth(1);
table2.addCell("Goodbye World");
// table 1
final PdfPTable table1 = new PdfPTable(1);
table1.setSpacingBefore(0);
table1.setHorizontalAlignment(Element.ALIGN_LEFT);
table1.setWidthPercentage(100);
table1.getDefaultCell().setBorderColor(BaseColor.BLACK);
table1.getDefaultCell().setBorderWidth(1);
// contents
Phrase phrase = new Phrase();
phrase.add(new Chunk("Hello World"));
phrase.add(table2); // <--- added but doesn't show up!
phrase.add(new Chunk("Hello World"));
table1.addCell(phrase);
document.add(table1);
document.close();
}
}
这是一个更大的报告的一部分,我在这种情况下使用 tables 作为边框和填充。
您正在使用文本模式(当您只有文本时使用),而您应该使用复合模式(因为您要将 table 添加到单元格)。
请看一下NestedTableProblem
例子:
// table 2
final PdfPTable table2 = new PdfPTable(1);
table2.setHorizontalAlignment(Element.ALIGN_LEFT);
table2.getDefaultCell().setBorderColor(BaseColor.RED);
table2.getDefaultCell().setBorderWidth(1);
table2.addCell("Goodbye World");
// table 1
final PdfPTable table1 = new PdfPTable(1);
table1.setHorizontalAlignment(Element.ALIGN_LEFT);
table1.setWidthPercentage(100);
// contents
PdfPCell cell = new PdfPCell();
cell.setBorderColor(BaseColor.BLACK);
cell.setBorderWidth(1);
cell.addElement(new Chunk("Hello World"));
cell.addElement(table2);
cell.addElement(new Chunk("Hello World"));
table1.addCell(cell);
document.add(table1);
在此代码片段中,cell
对象由不同的元素组成(这就是 复合模式 的意义所在):
在您的代码片段中,您将几个元素添加到 Phrase
并将此 Phrase
添加到 文本模式 中的 PdfPCell
.由于一个元素不是普通文本而是table,因此无法呈现。