Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java iText 7防止分页符时拆分单元格_Java_Itext7_Pdftables - Fatal编程技术网

Java iText 7防止分页符时拆分单元格

Java iText 7防止分页符时拆分单元格,java,itext7,pdftables,Java,Itext7,Pdftables,我正在尝试生成包含形状单元格的PDF表格。 我覆盖了CellRenderer类,在新类中,我在DrawableCellRenderer\draw中绘制形状 有时,当表格需要拆分且单元格具有行跨度时,我希望阻止它拆分并在下一页开始。 我试图设置keeptogether(true),但没有成功。嵌套表也不起作用 以下是我使用的代码: public void test2() { try { pdfDocument = new PdfDocument(new Pd

我正在尝试生成包含形状单元格的PDF表格。
我覆盖了
CellRenderer
类,在新类中,我在
DrawableCellRenderer\draw
中绘制形状
有时,当表格需要拆分且单元格具有行跨度时,我希望阻止它拆分并在下一页开始。

我试图
设置keeptogether(true)
,但没有成功。嵌套表也不起作用

以下是我使用的代码:

public void test2() {
        try {
            pdfDocument = new PdfDocument(new PdfWriter(filePath));
            document = new Document(pdfDocument);
            Table masterTable = new Table(2).setExtendBottomRowOnSplit(true);
            masterTable.addHeaderCell(new Cell().add(new Paragraph("icon")))
            .addHeaderCell(new Cell().add(new Paragraph("i")));
            int rowSpan = 15;
            for(int i = 0; i < 50; i++) {

                Cell cell = new Cell(rowSpan, 1);
                cell.setNextRenderer(new DrawableCellRenderer(cell, SOME_SHAPE));
                cell.setKeepTogether(true);
                masterTable.addCell(cell);

                for(int j = 0; j < rowSpan; j++) {
                    cell = new Cell();
                    cell.add(new Paragraph(i + ", " + j));
                    masterTable.addCell(cell);
                }
            }
            document.add(masterTable);
        } catch (FileNotFoundException e) {
            ErrorMessage.outPrintln(ErrorMessage.DEBUG,
                    e.getMessage());
        } finally {
            pdfDocument.close();
        }
    }
public void test2(){
试一试{
pdfDocument=newpdfdocument(newpdfwriter(filePath));
文件=新文件(PDF文件);
主表=新表(2)。setExtendBottomRowOnSplit(真);
masterTable.addHeaderCell(新单元格().add(新段落(“图标”))
.addHeaderCell(新单元格().add(新段落(“i”));
int rowSpan=15;
对于(int i=0;i<50;i++){
单元格=新单元格(行间距,1);
setNextRenderer(新的DrawableCellRenderer(单元格,一些U形));
cell.setKeepTogether(true);
主表addCell(cell);
对于(int j=0;j
我想要预防和实现。

提前感谢。

这段代码应该或多或少达到了您的要求。但是,您需要设置固定的列宽

Document document = new Document(pdfDocument);
Table masterTable = new Table(1).setExtendBottomRowOnSplit(true);
UnitValue[] columnWidths = UnitValue.createPointArray(new float[] {50, 100});
float borderThickness = 0.5f;
Border solidBorder = new SolidBorder(borderThickness);
Table innerHeader = new Table(columnWidths)
        .addCell(new Cell().setBorder(Border.NO_BORDER).setBorderRight(solidBorder).add(new Paragraph("icon")))
        .addCell(new Cell().setBorder(Border.NO_BORDER).setBorderLeft(solidBorder).add(new Paragraph("i")));
masterTable.addHeaderCell(new Cell().setBorder(Border.NO_BORDER)
        .setBorderTop(solidBorder).setBorderLeft(solidBorder).setBorderRight(solidBorder)
        .setPadding(0).add(innerHeader));
int rowSpan = 15;
for(int i = 0; i < 50; i++) {
    Table innerTable = new Table(columnWidths).setKeepTogether(true);
    Cell cell = new Cell(rowSpan, 1).setBorder(Border.NO_BORDER).setBorderRight(solidBorder)
            .setBorderBottom(solidBorder);
    innerTable.addCell(cell);

    for(int j = 0; j < rowSpan; j++) {
        cell = new Cell().setBorder(Border.NO_BORDER).setBorderLeft(solidBorder);
        cell.add(new Paragraph(i + ", " + j));
        if (j == rowSpan - 1) {
            cell.setBorderBottom(solidBorder);
        }
        innerTable.addCell(cell);
    }

    masterTable.addCell(new Cell().setPadding(0).add(innerTable));
}
document.add(masterTable);
文件文件=新文件(PDF文件);
主表=新表(1)。setExtendBottomRowOnSplit(真);
UnitValue[]columnWidths=UnitValue.createPointArray(新浮点[]{50100});
浮动边界厚度=0.5f;
Border solidBorder=新的solidBorder(borderThickness);
Table innerHeader=新表格(列宽)
.addCell(新单元格().setboorder(Border.NO_Border).setboordright(solidBorder.add)(新段落(“图标”))
.addCell(new Cell().setboorder(Border.NO_Border).setboordleft(solidBorder).add(新段落(“i”));
masterTable.addHeaderCell(新单元格().setBorder(边框.无边框)
.setboordtop(solidBorder).setboordleft(solidBorder).setboordright(solidBorder)
.setPadding(0).add(innerHeader));
int rowSpan=15;
对于(int i=0;i<50;i++){
Table innerTable=新表(列宽)。setKeepTogether(true);
Cell Cell=新单元格(行跨度,1)。setboorder(边框。无边框)。setboorderright(solidBorder)
.底部(solidBorder);
innerTable.addCell(cell);
对于(int j=0;j
结果如下所示:

有两个连续边界未折叠的工件:


谢谢您的回答。如果我给表提供列宽,它是可以工作的,但是在我的例子中,由于数据的多样性和col span的情况,我不能提供这些信息。