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

iText8中使用Canvas类无法渲染文本至报表,求原因排查

可能的原因及排查方向
  • Canvas构造参数的版本差异:你参考的是iText7的代码,iText8中Canvas的第三个addToPage参数行为可能有所调整。尝试去掉第三个参数,改用new Canvas(pdfCanvas, rect),或者显式基于页面尺寸初始化Canvas后再限制内容区域:

    Canvas canvas = new Canvas(pdfCanvas, pdfPage.getPageSize());
    canvas.setClip(rect); // 用裁剪区域限制文本显示范围
    canvas.add(p);
    
  • Paragraph未继承文档默认样式:原document.showTextAligned会自动复用Document的字体、字号等配置,但Canvas有独立的样式上下文。如果Paragraph没有显式设置字体,可能因默认字体缺失或字号为0导致文本不可见。可以给Paragraph强制设置基础样式:

    p.setFont(PdfFontFactory.createFont(StandardFonts.HELVETICA))
      .setFontSize(12)
      .setMargin(0)
      .setPadding(0);
    
  • Canvas内容未正确刷入页面:虽然try-with-resources会自动关闭Canvas,但如果当前pdfPage仍处于Document的处理流程中,Canvas的内容可能未被及时flush。可以在Canvas关闭后手动调用pdfCanvas.flush(),确保内容写入页面。

  • Paragraph的边距导致内容被裁剪:Paragraph默认带有上下边距,如果你的rect高度刚好等于文本高度,边距会导致文本被挤出Canvas可视区域。尝试清除Paragraph的边距和内边距:

    p.setMarginTop(0).setMarginBottom(0).setPadding(0);
    

内容的提问来源于stack exchange,提问作者Tomas Sexenian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:22:36