为什么iText7跨列单元格内放大图片会意外改变表格列宽占比?
问题根因
iText7的表格默认使用自动布局算法,列宽计算会同时参考预设的比例参数、以及所有单元格(包括跨列单元格)的内容最小宽度。跨2列的图片的最小宽度会被平摊到两列的宽度计算逻辑中,当图片宽度足够大时,布局算法会优先保证内容不溢出,主动调整原有列宽比例,最终会被拉平为50:50。
解决方案
直接开启表格的固定布局模式即可,该模式下iText会严格遵守你设置的列宽比例,跨列内容不会反向影响列宽计算,符合你的预期。修改后的代码如下:
const float SCALE = 3.0f; float[] colWidths = { 1, 4 }; Table table = new Table(UnitValue.CreatePercentArray(colWidths)) .UseAllAvailableWidth() .SetFixedLayout(); // 新增本行开启固定布局 table.AddCell(new Cell().Add(new Paragraph("row 1, col 1"))); table.AddCell(new Cell().Add(new Paragraph("row 1, col 2"))); Cell image = new Cell(1, 2); ImageData logoData = ImageDataFactory.Create(@"logo.png"); Image logo= new Image(logoData) .ScaleAbsolute(170f * SCALE, 50f * SCALE); // 若后续有图片宽度超过跨列总宽度的场景,可额外加下面的配置让图片自动适配宽度 // logo.SetAutoScaleWidth(true); image.Add(logo); table.AddCell(image); table.AddCell(new Cell().Add(new Paragraph("row 3, col 1"))); table.AddCell(new Cell().Add(new Paragraph("row 3, col 2"))); document.Add(table);
内容的提问来源于stack exchange,提问作者ChrisH
相关产品推荐
相关产品推荐

