针对一行中某个单元格文本缩小问题

在填充内容的时候,一行中,不同的单元格内容是不一样的,有的单元格内容很多,有点单元格内容很少,内容很多的单元格会自动换行。
现在需要对换行的单元格内容进行字体缩小。
比如说下面的这个文件,希望能够检查单元格的内容,发现该单元格换行了,对单元格的内容进行字体缩小
test.docx (10.8 KB)

@magua 使用 "Aspose.Words "方法也无法做到这一点,因为这是单行文本,只是被单元格宽度包裹了。不过,也有一些变通方法可以满足您的需要。

首先是计算单元格内的内容宽度,然后与单元格宽度进行比较:

public void TestTable() throws Exception {
    Document doc = new Document("test.docx");

    Table table = doc.getFirstSection().getBody().getTables().get(0);
    for (Row row : table.getRows()) {
        for (Cell cell : row.getCells()) {
            double cellTextWidth = CalculateWidhtOfCellContent(cell);
            System.out.println(cellTextWidth);
            if (cellTextWidth > cell.getCellFormat().getWidth()) {
                // 调整字体大小或使用 "setFitText"。
                cell.getCellFormat().setFitText(true);
            }
        }
    }

    doc.save("Output.docx");
}

private double CalculateWidhtOfCellContent(Cell cell) {
    double width = 0;
    for (Paragraph paragraph : cell.getParagraphs()) {
        double contentWidth = 0;
        for (Run run : paragraph.getRuns()) {
            java.awt.Font font = new java.awt.Font(run.getFont().getName(), java.awt.Font.PLAIN, (int) run.getFont().getSize());

            BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2d = img.createGraphics();
            FontMetrics fm = g2d.getFontMetrics(font);

            contentWidth += fm.stringWidth(run.getText());
        }
        if (contentWidth > width)
            width = contentWidth;
    }
    return width;
}

或者,你只需使用 "setFitText "即可。这种方法只适用于单元格内的多行文本。

public void TestTable() throws Exception {
    Document doc = new Document("test.docx");

    Table table = doc.getFirstSection().getBody().getTables().get(0);
    for (Row row : table.getRows()) {
        for (Cell cell : row.getCells()) {            
            cell.getCellFormat().setFitText(true);            
        }
    }

    doc.save("Output.docx");
}

好的,谢谢您的解答,这个遍历的次数看起来似乎有点多