Rails使用Prawn gem生成PDF调用table方法报未定义方法错误
Rails中Prawn调用table方法报NoMethodError解决方案
错误复现
在Rails项目中使用Prawn生成带表格的PDF时,触发如下错误:#<NoMethodError: undefined method 'table' for #<PdfMethods:0x0000023fc7b70648>>
原有实现代码:
require "prawn" class PdfMethods < Prawn::Document def initialize super pdf_text statement_accounts end def pdf_text text "Order goes here", size: 40, style: :bold end def statement_accounts move_down 20 table_data = Array.new table_data << [[1, 2], [3, 4]] table(table_data) end end
前置条件:本地已安装prawn和prawn-table两个gem。
根因分析
- 从Prawn 1.0版本开始,表格能力已从核心库拆分到独立的
prawn-tablegem中,仅安装gem但不在代码中显式引入的话,Prawn::Document类不会注入table实例方法,就会触发找不到方法的错误。 - 原有代码中
table_data的构造多嵌套了一层数组,即使方法调用正常,也会出现表格结构渲染异常的问题。
修复步骤
第一步:确认Gemfile配置正确,执行依赖安装
在项目Gemfile中添加如下配置:gem 'prawn' gem 'prawn-table'执行命令完成依赖安装:
bundle install第二步:显式引入prawn-table组件,修正表格数据结构
修改PdfMethods类代码,在文件顶部补充prawn/table的引入,同时修正二维数组的嵌套问题:require "prawn" require "prawn/table" # 核心修复:引入后才会给Prawn::Document添加table方法 class PdfMethods < Prawn::Document def initialize super pdf_text statement_accounts end def pdf_text text "Order goes here", size: 40, style: :bold end def statement_accounts move_down 20 # table方法接收二维数组作为参数,每个子数组对应表格一行 table_data = [ [1, 2], [3, 4] ] table(table_data) end end可选全局配置(Rails项目推荐)
如果项目中多处用到Prawn生成PDF,可以在config/initializers目录下新建prawn.rb初始化文件,统一添加引入逻辑,避免每个业务类重复写require:# config/initializers/prawn.rb require "prawn" require "prawn/table"修改完成后重启Rails开发服务即可生效。
内容的提问来源于stack exchange,提问作者Elvis Githinji
相关产品推荐
相关产品推荐

