iText 7 C#生成PDF:单元格文本旋转后换行、居中及斜向旋转问题求助
iText 7 C# PDF表格旋转文本问题解决方案
问题梳理
- 表格最后一行添加日期时,垂直旋转后出现文本换行
- 旋转后的文本需在单元格内实现垂直、水平居中
- 需要设置类似'/'的向右倾斜旋转效果
解决方案与代码修改
1. 解决文本换行问题
旋转后文本换行的核心原因是单元格空间不足以容纳旋转后的文本尺寸,同时段落默认允许换行。通过以下两点修复:
- 给段落设置
SetNoWrap(true)强制禁止换行 - 给单元格设置
SetMinHeight()确保有足够的垂直空间
2. 实现旋转文本居中
需要同时设置段落自身对齐和单元格内容对齐,配合旋转原点的默认行为,实现整体居中:
- 段落设置
SetTextAlignment(TextAlignment.CENTER)实现文本水平居中 - 单元格设置
SetVerticalAlignment(VerticalAlignment.MIDDLE)+SetHorizontalAlignment(HorizontalAlignment.CENTER)实现内容整体垂直、水平居中
3. 设置向右倾斜旋转
Math.PI/2是90度垂直旋转,要实现类似'/'的向右倾斜,需设置顺时针旋转的负弧度值,例如-45度对应-Math.PI/4,可根据视觉需求调整角度(如-30度对应-Math.PI/6)。
修改后的完整代码
// 添加签署日期行 table.AddCell(new Cell().Add(new Paragraph("")).SetWidth(UnitValue.CreatePercentValue(5)).SetBorder(Border.NO_BORDER)); table.AddCell(new Cell().Add(new Paragraph("")).SetWidth(UnitValue.CreatePercentValue(35)).SetBorder(Border.NO_BORDER)); foreach (var month in months) { // 创建日期段落,配置不换行、文本居中 var datePara = new Paragraph("3/5/23") .SetFontSize(8) .SetTextAlignment(TextAlignment.CENTER) .SetNoWrap(true); var dateCell = new Cell() .SetWidth(UnitValue.CreatePercentValue(5)) .Add(datePara) // 单元格内容居中 .SetVerticalAlignment(VerticalAlignment.MIDDLE) .SetHorizontalAlignment(HorizontalAlignment.CENTER) // 向右倾斜45度(可调整弧度值改变倾斜角度) .SetRotationAngle(-Math.PI / 4) // 设置最小高度,适配旋转后的文本尺寸 .SetMinHeight(30); table.AddCell(dateCell); }
补充说明
- 若需要恢复垂直90度旋转,将
SetRotationAngle改为Math.PI/2即可,同时调整SetMinHeight的值适配文本长度 - 若单元格宽度固定,可根据旋转角度计算所需最小高度,确保文本完整显示
内容的提问来源于stack exchange,提问作者san
相关产品推荐
相关产品推荐

