先说一下 所满足的需求是什么?
- 将一个网页html生成一个文件,通过浏览器发送到电脑端
- 将一个网页html生成一个文件,保存到数据库中
第一步:
引用Gem
# PDF所用
gem 'pdfkit'
gem 'render_anywhere'
gem 'wkhtmltopdf-binary'
# 存储文件用的
gem 'carrierwave'
第二:封装一个类方法
require 'render_anywhere'
class ManageMeetPdf
include RenderAnywhere
def initialize(manage_meet)
@manage_meet = manage_meet
end
def to_pdf
kit = PDFKit.new(as_html, page_size: 'A4')
kit.to_file("#{Rails.root}/public/manage_meet#{manage_meet.id}.pdf")
end
def filename
"会议_#{manage_meet.title}.pdf"
end
private
attr_reader :manage_meet
def as_html
renderer = ::ActionController::Base.renderer.new
# 这里manage_meets/pdf 是一个pdf 视图文件。 meet_pdf 是 layout 视图文件
renderer.render(template: "manage_meets/pdf", layout: 'meet_pdf', locals: {manage_meet: @manage_meet })
end
end
第三:Controller.rb
# 这里ManageMeet 是一个表
@manage_meet = ManageMeet.find(params[:id])
pdf = ManageMeetPdf.new(@manage_meet)
file = pdf.to_pdf
@manage_meet.update!(pdf_file: file, status: 'place_file')
File.delete(file.path)
俩试图文件
pdf.html.erb
内容自定义
meet_pdf.html.erb
<!DOCTYPE html>
<html>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<head>
<title></title>
<style>
.pro-title{
font-size: 17px;
}
.layui-elem-quote{
padding: 8px;
}
.card-height{
min-height: 167px;
display: flex;
}
.layui-col-md6 {
width: 50%;
}
.layui-bg-gray {
background-color: #fafafa!important;
color: #5f5f5f!important;
}
layui-badge-rim, .layui-border, .layui-colla-content, .layui-colla-item, .layui-collapse, .layui-elem-field, .layui-form-pane .layui-form-item[pane], .layui-form-pane .layui-form-label, .layui-input, .layui-input-split, .layui-panel, .layui-quote-nm, .layui-select, .layui-tab-bar, .layui-tab-card, .layui-tab-title, .layui-tab-title .layui-this:after, .layui-textarea {
border-color: #eee;
}
.layui-field-title {
margin: 10px 0 20px;
border-width: 0;
border-top-width: 1px;
}
.layui-elem-field {
margin-bottom: 10px;
padding: 0;
border-width: 1px;
border-style: solid;
}
fieldset {
border: 1px solid #e4e4e4;
margin: 0;
min-width: inherit;
}
.flex {
display: flex;
}
.layui-col-space15 {
margin: -7.5px;
}
hr {
height: 0;
line-height: 0;
margin: 10px 0;
padding: 0;
border: none!important;
border-bottom: 1px solid #eee!important;
clear: both;
overflow: hidden;
background: 0 0;
}
</style>
</head>
<body>
<%= yield %>
</body>
如果导出出现黑色方块或者乱码执行这个试试
centos:
yum install wqy-zenhei-fonts
ubuntu:
apt-get install fonts-wqy-microhei ttf-wqy-microhei fonts-wqy-zenhei ttf-wqy-zenhei