在填充内容的时候,一行中,不同的单元格内容是不一样的,有的单元格内容很多,有点单元格内容很少,内容很多的单元格会自动换行。
现在需要对换行的单元格内容进行字体缩小。
比如说下面的这个文件,希望能够检查单元格的内容,发现该单元格换行了,对单元格的内容进行字体缩小
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");
}
好的,谢谢您的解答,这个遍历的次数看起来似乎有点多