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

如何在Rails中向指定打印机打印HTML格式内容?

实现Rails直接发送打印任务到Linux打印机的方案

嘿,这个需求完全可以实现!我给你两种实用的思路,一种是借助现成的gem简化流程,另一种是纯Ruby+系统命令手动搞定,都能满足你不渲染到浏览器、直接给printer_b发打印任务的需求:

一、推荐:用wicked_pdf转PDF+Linux系统命令打印

这种方式能保证打印样式的一致性,因为HTML转PDF后排版更稳定,适合需要精准样式的场景。

步骤1:准备依赖

  1. 在Gemfile中添加gem:
    gem 'wicked_pdf'
    
    然后执行bundle install安装。
  2. 安装Linux上的HTML转PDF工具wkhtmltopdf:
    • Debian/Ubuntu系:sudo apt-get install wkhtmltopdf
    • RedHat/CentOS系:sudo yum install wkhtmltopdf

步骤2:控制器中实现打印逻辑

在你的控制器里添加一个动作,负责渲染ERB模板、转PDF并发送到指定打印机:

def send_to_printer
  # 渲染toprint.html.erb成HTML字符串(可以传动态数据到模板)
  html_content = render_to_string(
    template: 'your_controller/toprint',  # 替换成实际的模板路径
    layout: false,  # 不需要渲染应用的全局布局
    locals: { data: @your_dynamic_data }  # 如果模板需要动态数据,这里传递
  )

  # 把HTML转成PDF
  pdf_content = WickedPdf.new.pdf_from_string(html_content)

  # 创建临时PDF文件
  temp_pdf = Tempfile.new(['print_job', '.pdf'])
  temp_pdf.write(pdf_content)
  temp_pdf.close

  # 调用Linux的lpr命令,指定printer_b发送打印任务
  system("lpr -P printer_b #{temp_pdf.path}")

  # 返回响应提示任务已发送
  render plain: "打印任务已发送到printer_b"
end

二、纯Ruby+系统命令(无需额外gem)

如果不想引入新gem,也可以直接渲染HTML后,用wkhtmltopdf直接通过管道输出到打印机,跳过保存文件的步骤:

def send_to_printer
  # 渲染模板成HTML字符串
  html_content = render_to_string(
    template: 'your_controller/toprint',
    layout: false,
    locals: { data: @your_dynamic_data }
  )

  # 创建临时HTML文件
  temp_html = Tempfile.new(['print_html', '.html'])
  temp_html.write(html_content)
  temp_html.close

  # 直接把HTML转成PDF并通过管道发送到printer_b
  system("wkhtmltopdf #{temp_html.path} - | lpr -P printer_b")

  render plain: "打印任务已发送到printer_b"
end

关键注意事项

  • 权限问题:运行Rails的进程(比如Puma、Unicorn)需要有执行lpr命令的权限,并且能访问系统打印机。可以用lpstat -p printer_b验证打印机是否正常识别。
  • 临时文件清理:Tempfile会在进程结束后自动删除,如果你想手动清理,可以在调用完命令后加temp_pdf.unlink。
  • 打印机状态检查:如果打印失败,可以用lpq -P printer_b查看打印队列状态,排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:23:36