Aspose words 21.5.0.jar生成的表格后边没有到最后

aspose words 21.5.0.jar生成的表格后边没有到最后,后面流了一块空白


示例:AsposeTable文件“https://t.wss.pet/f/fegoqzqgda0 复制链接到浏览器打开”

@SalesDhorde 该表格有默认的单元格边距。您可以用以下代码移除它们:

table.setLeftPadding(0);
table.setRightPadding(0);

按照你说的方法设置上后,字体和边线紧挨着,不是想要的显示效果,应该和手动插入的表格效果相同。

word里手动插入的表格也带单元格边距呢,显示的就很正常。

请问:在我提供的代码的基础上:列宽固定,表格显示效果如上图,怎么实现上面的显示效果?

@SalesDhorde 感谢您提供有关预期输出的更多细节。但在您使用 MS Word 显示的这种情况下,您应该使用 table.autoFit(AutoFitBehavior.AUTO_FIT_TO_WINDOW); 而不是固定宽度。下面的所有代码都不应被执行:

table.autoFit(AutoFitBehavior.AUTO_FIT_TO_WINDOW);//表格固定宽度,设置列宽时用固定表格参数
//        Section section = (Section) table.getAncestor(NodeType.SECTION);
//        double tableWidth = 0;//表格总宽度
////        if(model.getColumnWidthType().equals("percentage")){
//        for (Row row : table.getRows()) {
//            //不允许跨页断行显示
//            row.getRowFormat().setAllowBreakAcrossPages(false);
//            double rowWidth = 0;
//            for (Cell cell : row.getCells()) {
//                rowWidth += cell.getCellFormat().getWidth();
//            }
//            if (rowWidth > tableWidth) {
//                tableWidth = rowWidth;
//            }
//        }
//        //文档总宽度减去左右间隔
//        double pageWidth = section.getPageSetup().getPageWidth() - (section.getPageSetup().getLeftMargin() + section.getPageSetup().getRightMargin());
//        for(Row row : table.getRows()) {
//            for(Cell cell : row.getCells()) {
//                //HUATAI项目 报表设计器列宽为5 处理线之间空白显示宽度问题
//                if(cell.getCellFormat().getWidth() == 5.0){
//                    //设置左右0.05厘米内边距
//                    cell.getCellFormat().setLeftPadding(1.5);
//                    cell.getCellFormat().setRightPadding(1.5);
//                }
//                double cellRatio = cell.getCellFormat().getWidth() / tableWidth;
//                cell.getCellFormat().setWidth(cellRatio * pageWidth);
//            }
//        }

使用aspose word 生成word和html时,设置的单元格宽度相同,生成出来表格效果单元格宽度不一致

有生成word和html的代码示例

示例https://t.wss.pet/f/feqznbcy3aw 复制链接到浏览器打开

@SalesDhorde 这是预料之中的行为。 这是因为在最后一行,您有不同长度的单词,而 MS Word 试图在页面上适应表格和内容。

可以实现强制宽度吗

不让他适应表格内容

@SalesDhorde 您可以尝试禁用自动拟合功能table.setAllowAutoFit(false);

我试过不好使,还是原来的效果

@SalesDhorde 以下是我在 MS Word 中使用此设置的输出结果:

table.docx (10.0 KB)

遗憾的是,我还没有找到其他可靠的解决方案。

word可以,验证html不可以,以下是我用此设置的输出结果,可通过提供的代码示例验证
table1.zip (1.2 KB)

@SalesDhorde 好的,感谢您提供的信息。我没有考虑到 HTML 文件。您可以设置 cell.getCellFormat().setPreferredWidth(PreferredWidth.fromPoints(50));,而不是 cell.getCellFormat().setWidth,这样 html 表格也会有类似的单元格,但要注意的是,当您减小浏览器宽度时,html 表格会自动调整内容。

Here is my output files:
table.zip (10.3 KB)

1、PreferredWidth.fromPoints(50)为什么必须设置的50?
2、什么场景使用cell.getCellFormat().setWidth,什么场景使用 cell.getCellFormat().setPreferredWidth?
3、如果表格需要对各个单元格列宽设置不同数值时,应该如何设置列宽?

@SalesDhorde

  1. 这是一个示例,但在使用的情况下,您可以尝试定义表单元格的最大宽度并尝试设置它。
  2. 单元格宽度实际上是DOCX格式的计算值。实际的单元格宽度可能取决于许多因素。例如,更改页边距或首选表格宽度会影响实际单元格宽度。您可以查看我们的文档: Table Formatting in Java|Aspose.Words for Java
  3. 当我们使用 “table.setAllowAutoFit(false); ”并默认设置单元格宽度时,MS Word 也会在打开文档时设置预设宽度。这就是为什么你也需要设置预设宽度。您可以根据 “table.setAllowAutoFit(false); ”使用单元格宽度。
    在您的代码中,您是根据单元格内容来计算和设置单元格宽度的,因此在生成的 html 文档中看起来就像是自动适应单元格内容。您可以定义比单元格内容更宽的单元格宽度。

为什么必须设置值是50呢?

@SalesDhorde 也许这是翻译上的疏漏,但我的意思是 50 只是一个示例值,您可以尝试找出表格中最大的单元格宽度,并将其设置为首选宽度:

double maxCellWidth = 0;
for(Row row : table.getRows()) {
    for (Cell cell : row.getCells()) {
        if (maxCellWidth < cell.getCellFormat().getWidth()) {
            maxCellWidth = cell.getCellFormat().getWidth();
        }
    }
}

cell.getCellFormat().setPreferredWidth(PreferredWidth.fromPoints(maxCellWidth));

在生成的文件中,表格大小将受到页面大小的限制,并根据表格大小显示所有单元格。

按照这种方式,如果我每列的宽度一样(如18,不是50),这样处理实际上获取到的最大单元格宽度跟单元格宽度是一个,PreferredWidth.fromPoints(18),这样设置在html中显示的列宽还是不一致

@SalesDhorde 您能否附上生成有问题的表格所使用的代码?我们将检查该问题并为您提供更多信息。Vyacheslav 正在度假,上面分享的链接已过期。

谢谢~https://t.wss.pet/f/ffkph7cj96g 复制链接到浏览器打开

@SalesDhorde 感谢您提供更多信息。但是您已经分享了 Aspose.Words 生成的 HTML 文档。您能否分享用于生成有问题的文档的 Java 代码?