如何用iText Java实现段落垂直完整显示?代码显示异常求助
解决iText垂直段落显示不完整、交叉的问题
你在尝试用iText创建垂直显示段落时遇到的显示不全、文本交叉问题,主要是因为没针对垂直文本的布局逻辑做适配——要么没正确设置旋转规则,要么容器尺寸没匹配垂直显示的需求。我来帮你调整代码解决这个问题:
问题诊断
你当前的代码仅创建了Paragraph但未做垂直显示的针对性处理:
- 未明确设置文本旋转角度,布局引擎仍按水平文本逻辑处理
- 没有调整段落的对齐方式与容器尺寸,旋转后内容容易超出边界或排列混乱
修复方案
我们可以用showTextAligned方法精准控制垂直文本的位置、旋转角度,同时适配页面尺寸,确保文本完整且排列正常:
private void stampPdf(InputStream source, OutputStream dest) throws Exception { PdfDocument pdfDoc = new PdfDocument(new PdfReader(source), new PdfWriter(dest)); Document doc = new Document(pdfDoc); PdfPage page = pdfDoc.getFirstPage(); Rectangle pageSize = page.getPageSize(); // 创建垂直显示的段落 Paragraph header = new Paragraph("Received by ICA on " + getDate()) .setFont(PdfFontFactory.createFont(FontConstants.HELVETICA)) .setFontSize(12) .setTextAlignment(TextAlignment.CENTER); // 用showTextAligned实现精准垂直渲染 doc.showTextAligned( header, 30, // 垂直文本的X坐标(页面左侧留白位置) pageSize.getHeight() / 2, // 垂直文本的Y坐标(页面垂直居中) 1, TextAlignment.CENTER, VerticalAlignment.MIDDLE, 90 // 顺时针旋转90度,实现从上到下的垂直显示;若需从下往上可设为270 ); doc.close(); }
关键调整说明
- 旋转角度选择:
90度顺时针旋转对应从上到下的垂直文本,270度则是从下到上的排列,可根据需求切换 - 精准定位避免交叉:
showTextAligned跳过了普通段落的自动布局逻辑,直接将文本渲染在指定位置,不会出现文本交叉问题 - 页面边界适配:通过
pageSize获取页面尺寸,确保文本位置不会超出页面范围,解决显示不完整的问题
如果需要给多页PDF添加垂直文本,循环遍历pdfDoc.getPages()处理每一页即可。
内容的提问来源于stack exchange,提问作者Saravanan Sivalingam
相关产品推荐
相关产品推荐

