介绍
在开发web应用程序时,有时候需要将html文档转换为pdf格式,这可能是因为需要将电子文件发送到不同的人员或顾客,也可能是因为需要生成具有商业价值的报告或凭证。在Ruby on Rails框架中,有很多可以执行此操作的工具和库,而本文将介绍一些流行的工具以将html文档转换为pdf格式。
在Rails中使用Wicked PDF
安装
Wicked PDF是一个基于wkhtmltopdf的Ruby on Rails插件,可以使用户轻松将HTML文档转换为PDF格式。因此,首先需要安装wkhtmltopdf和wicked_pdf插件。建议在linux服务器上安装wkhtmltopdf。
# 安装依赖项
sudo apt-get install -y wkhtmltopdf
sudo apt-get install -y xvfb
sudo apt-get install -y libjpeg-dev
# Gemfile中添加
gem 'wicked_pdf'
# 安装
bundle install
使用
要使用插件,需要配置控制器以使用render_with_wicked_pdf方法呈现PDF文件。然后通过使用format.pdf指定所需的格式以调用特定的操作。
# 配置controller
class ReportsController < ApplicationController
def index
# Code to gather data
respond_to do |format|
format.html
format.pdf do
render pdf: "report",
:template => "reports/index.html.erb",
# 头脚部防止在文本中的断开,可以通过设置 :header 或 :footer 来定义。
:header => {:html => { :template => 'shared/header.pdf.erb'} },
# footer: {:html => { :template => 'shared/footer.pdf.erb'} }
end
end
end
end
Wicked PDF的优势和不足
Wicked PDF的主要优点是,具有很好的性能和堆栈跟踪,因此可以快速处理大量请求。另外,Wicked PDF遵循D.R.Y设计哲学,是一种可完全集成到Rails应用程序中的解决方案。
Wicked PDF的缺点包括,需要单独安装wkhtmltopdf。虽然wkhtmltopdf是一个优秀的工具,但它没有在所有平台上都获得良好的支持,因此可能会出现一些问题。
将HTML文档转换为PDF格式的另一种方法:PrawnPDF
安装
PrawnPDF是一种在Ruby on Rails中使用广泛的pdf生成器,使用PrawnPDF进行pdf生成时,其概念是你手写pdf,实际上,prawnpdf是一个直观易用的Ruby DSL库,可以方便地定义PDF文档的页面大小、布局、文本样式、表格、图形以及其他PDF元素。
安装prawnPDF 最简单的方法是添加以下代码到Gemfile文件中:
gem "prawn"
那么就可以在控制器中使用prawn生成PDF,具体请看代码块:
# See https://gist.github.com/silverp1/76a975ab2ee3992e8cd6#file-report_controller-rb-L11-L20
class ReportController < ApplicationController
def index
pdf = Prawn::Document.new( :page_size => 'A4', :page_layout => :landscape, :margin => 5)
pdf.text "Hello World"
pdf.render_file "report.pdf"
end
end
PrawnPDF的优势和不足
PrawnPDF的优势包括,它可以生成高度定制的pdf文档,PrawnPDF还支持自定义字体和图片等特性。此外,PrawnPDF提供的完整文档,因此在使用时,可以容易地首先阅读并快速上手。
PrawnPDF主要的缺点是,其使用方式比其他一些工具要复杂。虽然与Wicked PDF相比,设置并不那么麻烦,但至少需要花费时间和精力阅读文档和教程。
总结
无论你选择Wicked PDF或Prawn PDF,都是一种可靠的方法将HTML文档转换为PDF格式。 Wicked PDF是一个基于wkhtmltopdf的插件,而Prawn PDF则是一种完全不同的方法,用Ruby DSL代码定义PDF文档。如果确实需要尽快将html文档转换为pdf,请选择Wicked PDF。如果你需要具有更高度定制的PDF文件,Prawn PDF可能是更好的选择。