Java iText 7-设置单元格宽度

Java iText 7-设置单元格宽度,java,itext7,Java,Itext7,我正在使用iText7生成一个PDF,里面有一个表 我想定义我的单元格的大小 例如,我有一个: 我想减少带有数字(07、08…)的列,并增加其他列。 以下是我创建表格的方式: int nbColumns = 7 + planning.size() *4; Table table = new Table(nbColumns); table.setWidthPercent(100); table.addCell(createCell("")); table.addCell(createCell("

我正在使用iText7生成一个PDF,里面有一个表

我想定义我的单元格的大小

例如,我有一个:

我想减少带有数字(07、08…)的列,并增加其他列。

以下是我创建表格的方式:

int nbColumns = 7 + planning.size() *4;
Table table = new Table(nbColumns);
table.setWidthPercent(100);
table.addCell(createCell(""));
table.addCell(createCell("Col1"));
table.addCell(createCell("Col2"));
DateFormat hourFormat = new SimpleDateFormat("HH", Locale.FRENCH);
for(Date hourDate : planning){
    table.addCell(new Cell(1,4).setTextAlignment(TextAlignment.CENTER).add(hourFormat.format(hourDate)).setFont(regular).setFontSize(10));
}

table.addCell(createCell("Long"));
table.addCell(createCell("A"));
table.addCell(createCell("B"));
table.addCell(createCell(""));
我尝试使用Cell的方法
setWidth
,但它没有任何作用

我尝试在创建表时定义列的宽度:

float[] colWidths = {1,1,1,1,1,1,1,1,2,1,1,1,1,1,5,1,1,2,2,2};
Table table = new Table(colWidths);
但它会造成标题单元格一行多行的混乱


你能帮我吗?

如果
float[]coldwiths={1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,5,1,1,2,2}
是一个数组,包含每个列所需的相对宽度,将其转换为
UnitValue
percent数组,然后使用该数组共同构建表格:

Table table = new Table(UnitValue.createPercentArray(colWidths));
如果希望表的绝对宽度高于为列传递的宽度,请使用
table\setFixedLayout()

在以下代码段上运行和/或进行实验,以查看每种不同类型声明的效果可能会有所帮助:

public void createPdf(String dest) throws IOException, FileNotFoundException{
    PdfWriter writer = new PdfWriter(dest);
    PdfDocument pdfDoc = new PdfDocument(writer);
    Document doc = new Document(pdfDoc);
    float tableWidth = 100f;
    //Using defaults
    doc.add(new Paragraph("default/auto-layout"));
    doc.add(new Paragraph("Using a float[]"));
    float[] colWidths = {1,2,3,4};
    Table table = new Table(colWidths);
    table.setWidthPercent(tableWidth);
    fillTable(table);
    doc.add(table);

    doc.add(new Paragraph("Using a UnitValue[] point array"));
    colWidths=new float[]{20f,40f,80f,160f};
    table = new Table(UnitValue.createPointArray(colWidths));
    table.setWidth(tableWidth);
    fillTable(table);
    doc.add(table);

    doc.add(new Paragraph("Using a UnitValue[] percent array"));
    colWidths=new float[]{1,2,3,4};
    table = new Table(UnitValue.createPercentArray(colWidths));
    table.setWidthPercent(tableWidth);
    fillTable(table);
    doc.add(table);

    doc.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
    //Using fixedLayout
    doc.add(new Paragraph("Using fixedLayout"));
    doc.add(new Paragraph("Using a float[]"));
    colWidths =new float[]{1,2,3,4};
    table = new Table(colWidths);
    table.setFixedLayout();
    table.setWidthPercent(tableWidth);
    fillTable(table);
    doc.add(table);

    doc.add(new Paragraph("Using a UnitValue[] point array"));
    colWidths=new float[]{20f,40f,80f,160f};
    table = new Table(UnitValue.createPointArray(colWidths));
    table.setWidthPercent(tableWidth);
    table.setFixedLayout();
    fillTable(table);
    doc.add(table);

    doc.add(new Paragraph("Using a UnitValue[] percent array"));
    colWidths=new float[]{1,2,3,4};
    table = new Table(UnitValue.createPercentArray(colWidths));
    table.setWidthPercent(tableWidth);
    table.setFixedLayout();
    fillTable(table);
    doc.add(table);

    doc.close();
}

public void fillTable(Table table){
    table.addCell("Water");
    table.addCell("Fire");
    table.addCell("Heaven");
    table.addCell("As I'm grounded here on");
    table.addCell("It's waving oceans are calling");
    table.addCell("is burning me deep inside");
    table.addCell("can wait for me");
    table.addCell("Earth");
}

如果
float[]colWidths={1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,5,1,1,2,2}
是一个数组,包含每个列所需的相对宽度,将其转换为
UnitValue
percent数组,然后使用该数组共同构建表格:

Table table = new Table(UnitValue.createPercentArray(colWidths));
如果希望表的绝对宽度高于为列传递的宽度,请使用
table\setFixedLayout()

在以下代码段上运行和/或进行实验,以查看每种不同类型声明的效果可能会有所帮助:

public void createPdf(String dest) throws IOException, FileNotFoundException{
    PdfWriter writer = new PdfWriter(dest);
    PdfDocument pdfDoc = new PdfDocument(writer);
    Document doc = new Document(pdfDoc);
    float tableWidth = 100f;
    //Using defaults
    doc.add(new Paragraph("default/auto-layout"));
    doc.add(new Paragraph("Using a float[]"));
    float[] colWidths = {1,2,3,4};
    Table table = new Table(colWidths);
    table.setWidthPercent(tableWidth);
    fillTable(table);
    doc.add(table);

    doc.add(new Paragraph("Using a UnitValue[] point array"));
    colWidths=new float[]{20f,40f,80f,160f};
    table = new Table(UnitValue.createPointArray(colWidths));
    table.setWidth(tableWidth);
    fillTable(table);
    doc.add(table);

    doc.add(new Paragraph("Using a UnitValue[] percent array"));
    colWidths=new float[]{1,2,3,4};
    table = new Table(UnitValue.createPercentArray(colWidths));
    table.setWidthPercent(tableWidth);
    fillTable(table);
    doc.add(table);

    doc.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
    //Using fixedLayout
    doc.add(new Paragraph("Using fixedLayout"));
    doc.add(new Paragraph("Using a float[]"));
    colWidths =new float[]{1,2,3,4};
    table = new Table(colWidths);
    table.setFixedLayout();
    table.setWidthPercent(tableWidth);
    fillTable(table);
    doc.add(table);

    doc.add(new Paragraph("Using a UnitValue[] point array"));
    colWidths=new float[]{20f,40f,80f,160f};
    table = new Table(UnitValue.createPointArray(colWidths));
    table.setWidthPercent(tableWidth);
    table.setFixedLayout();
    fillTable(table);
    doc.add(table);

    doc.add(new Paragraph("Using a UnitValue[] percent array"));
    colWidths=new float[]{1,2,3,4};
    table = new Table(UnitValue.createPercentArray(colWidths));
    table.setWidthPercent(tableWidth);
    table.setFixedLayout();
    fillTable(table);
    doc.add(table);

    doc.close();
}

public void fillTable(Table table){
    table.addCell("Water");
    table.addCell("Fire");
    table.addCell("Heaven");
    table.addCell("As I'm grounded here on");
    table.addCell("It's waving oceans are calling");
    table.addCell("is burning me deep inside");
    table.addCell("can wait for me");
    table.addCell("Earth");
}

嗯,iText7表有点复杂,因为它们的操作类似于HTML表,并允许单元格根据其内容增长。我会看看是否能拿出一些例子来正确地展示它们的行为和各种选项。嗯,iText7表格有点复杂,因为它们的操作类似于HTML表格,并且允许单元格根据其内容增长。我会看看是否能拿出一些例子来正确地展示它们的行为和各种选项。因为我在理解上有同样的问题,但我必须用C#而不是java来做,有人能帮我发布这段代码的输出吗?因为我在理解上有同样的问题,但我必须用C#而不是java来做,有人可以发布这个代码的输出吗?