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

Prawn中如何实现bounding_box内所有内容的文本两端对齐

Prawn 实现 bounding_box 内文本两端对齐方案

你当前代码不生效有两个核心原因:一是错误使用table方法传递纯文本参数,二是没有显式给文本/单元格指定两端对齐属性,以下是可直接落地的实现方式:


方案1:纯文本场景(推荐,无多余结构)

如果只是渲染普通备注文本,不需要表格结构,直接用Prawn原生的text方法即可,原生支持align: :justify两端对齐属性,不需要套无意义的无框表格:

if customer_note.present?
  pdf.bounding_box [0, 50], width: 350 do
    pdf.text customer_note, 
             align: :justify, # 核心参数:设置两端对齐
             leading: 3, # 可选:设置行间距,按需调整
             inline_format: true # 可选:支持<b>/<i>等简单富文本标签,不需要可删除
  end
end

方案2:必须保留table结构的场景

如果后续需要扩展成多列/多行表格,需要注意两个点:一是table入参必须是二维数组格式,二是对齐属性必须在单元格样式里显式声明(单元格不会继承外层bounding_box的文本属性):

if customer_note.present?
  pdf.bounding_box [0, 50], width: 350 do
    # 注意:纯文本要包装成 [[文本]] 的二维数组格式,直接传字符串会被按字符拆成多行
    pdf.table([[customer_note]], cell_style: { 
      borders: [],
      padding: 0,
      align: :justify # 核心参数:给单元格内文本设置两端对齐
    })
  end
end

常见踩坑说明

  • Prawn 默认对段落最后一行做左对齐处理,如果需要最后一行也强制两端对齐,可在text/cell_style里额外加参数justify_last_line: true(Prawn 2.4及以上版本支持)
  • 渲染中文文本时请提前加载支持中文的字体,否则会因为字体宽度计算错误导致对齐效果异常
  • 不要手动给文本设置过大的字间距、字符间距,会干扰两端对齐的自动空格计算逻辑

内容的提问来源于stack exchange,提问作者Samuel D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:01:41