You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:38:53