我有一个Rails应用程序,我使用wicked_pdf生成PDF.这一切都很好并在本地工作,但是当推送到heroku时,PDF会渲染,但不应用样式表.
特别是对于PDF渲染,我有一个CSS文件:app/assets/stylesheets/pdf.css.scss.在form.pdf.haml我加载这样的样式表:
!!!
%html{lang: "en", "xml:lang" => "en", xmlns: "http://www.w3.org/1999/xhtml"}
%head
%meta{content: "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
= wicked_pdf_stylesheet_link_tag "pdf"
Run Code Online (Sandbox Code Playgroud)
如上所述,它在本地工作得很好,但是当推送到heroku时,我收到这个错误:
ActionView::Template::Error (No such file or directory - /app/public/pdf.css)
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能在heroku上完成这项工作?
编辑:我发现了这个Gihub repo https://github.com/jordan-brough/heroku-pdf,这是一个在heroku上使用wicked_pdf的示例应用程序.通过在请求PDF时调整environment.rb文件public夹中的css文件来帮助它真的很有帮助.
我的地图是
mountPage("/ page /#{code} /#{name}",Page.class);
但是当我点击链接时
localhost/page/10/toy?2
当我刷新我的页面时,wicket还会添加一个像计数器这样的参数
localhost/page/10/toy?3
为什么?
这就是wicked pdf的文档规定:
WickedPdf.new.pdf_from_string(
render_to_string(:pdf => "pdf_file.pdf", :template => 'templates/pdf.html.erb', :layout => 'pdfs/layout_pdf'),
:footer => {:content => render_to_string({:template => 'templates/pdf_footer.html.erb', :layout => 'pdfs/layout_pdf'})}
)
Run Code Online (Sandbox Code Playgroud)
我得到的是ActionView :: MissingTemplate即使我在目录中有pdf.html.erb.我在应用程序控制器中使用gen_pdf方法,在views/application文件夹中使用等效的pdf.html.erb.我错过了什么.
我正在尝试将wicked_pdf集成到我的rails 4应用程序中.我怎么会遇到UnknownFormat错误.
在我添加的gem文件中
gem 'wicked_pdf'
Run Code Online (Sandbox Code Playgroud)
在我的学生控制器中我有show方法定义如下:
controllers/students_controllers
respond_to :html, :js, :pdf
def show
@student = Student.find(params[:id])
respond_to do |format|
format.pdf do
render :pdf => "students",:template => "students/show_pdf"
end
end
Run Code Online (Sandbox Code Playgroud)
然后我在学生的viewsfolder中有show_pdf.pdf.erb模板.我怎么能添加Wicked_pdf engin路径
initializers/wicked_paf.rb
WickedPdf.config = {
:exe_path => '/usr/bin/wkhtmltopdf'
}
Run Code Online (Sandbox Code Playgroud)
我还在initilizers/mime_type.rb中为pdf添加了mime类型
initializers/mime_type.rb
Mime::Type.register "application/pdf", :pdf
Run Code Online (Sandbox Code Playgroud)
但没有运气.我收到了unknownformat错误.
ActionController::UnknownFormat at /students/1
ActionController::UnknownFormat
Run Code Online (Sandbox Code Playgroud)
我不知道这个错误的原因.请帮我找出问题所在.
提前致谢.
我在生成报告的Rails应用程序中使用gem wiked_pdf。
但是当超过1页时,我无法解决数据中断问题。
我尝试了很多时间来调整边距或间距,但仍然无法解决。
respond_to do |format|
format.html
format.pdf do
render title: @report_title,
pdf: @report_title,
template: 'applicants/generate_report.pdf.erb',
encoding: 'UTF-8',
orientation: 'Landscape',
layout: 'pdf_template.html',
footer: {
center: '[page] of [topage]',
right: "",
font_name: 'Arial',
font_size: 8
},
margin: {
top: 10, # default 10 (mm)
bottom: 12,
left: 7,
right: 7
},
spacing: 0
end
end
Run Code Online (Sandbox Code Playgroud)
我也尝试应用CSS,例如:
@media print {
td, tr {page-break-inside: avoid; }
table.full_report_table>tbody>tr>td {page-break-inside: avoid !important; }
}
Run Code Online (Sandbox Code Playgroud)
没用!
请帮忙!
我正在使用wickedpdfgem pdf invoice从html代码生成。
宝石:
gem 'wicked_pdf'
gem "wkhtmltopdf-binary"
Run Code Online (Sandbox Code Playgroud)
gemfile.lock
wicked_pdf (1.0.6)
wkhtmltopdf-binary (0.9.9.3)
Run Code Online (Sandbox Code Playgroud)
在控制器中:
def show_pdf_invoice
respond_to do |format|
format.html { render :layout => "pdf.pdf.erb" }
format.pdf do
render pdf: "show_pdf_invoice", :layout => 'pdf.pdf.erb'
#render :pdf => "pdf"#, :layout => 'pdf.html.erb'
end
end
end
Run Code Online (Sandbox Code Playgroud)
在 views/invoices/show_pdf_invoice.pdf.erb
<img id="image" src="https://www.google.co.in/logos/doodles/2016/holidays-2016-day-2-6356741311692800-scta.png" alt="logo" />
<%= wicked_pdf_image_tag 'https://www.google.co.in/logos/doodles/2016/holidays-2016-day-2-6356741311692800-scta.png' %>
Run Code Online (Sandbox Code Playgroud)
pdf正在生成。但是图像没有显示。在图片的位置出现了空盒子。找不到问题。
def foo
respond_to do |format|
format.html { render layout: 'application' }
format.pdf {
render pdf: 'foo', layout: 'pdf'
}
end
end
Run Code Online (Sandbox Code Playgroud)
如果我只放进hello world去就foo.pdf.erb可以了!
但现在如果我想使用 html 视图来迭代我的模型(来自数据库),例如:
<p>hello world</p>
<%= render @foo.chapters.order(number: :asc) %>
Run Code Online (Sandbox Code Playgroud)
它不起作用,页面保持灰色,日志中没有错误......
如果我评论这一行,hello world又可以工作了。
所以问题是关于使用html部分:我们如何在pdf视图中使用普通的html视图?
我的 wicked pdf CSS 有问题一切都在本地工作,但在生产中找不到 pdf.css
ActionView::Template::Error (The asset "components/pdf.css" is not present in the asset pipeline.):
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
<%= wicked_pdf_stylesheet_link_tag 'components/pdf.css' %>
</head>
<body>
<%= yield %>
Run Code Online (Sandbox Code Playgroud)
我的 pdf.html.erb
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
<%= wicked_pdf_stylesheet_link_tag 'components/pdf' %>
</head>
<body>
<%= yield %>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我的组件/pdf.css
.document-pdf {
background-image: asset-data-url("fond.png");
background-size: 23cm 13cm;
background-color: white;
background-repeat: no-repeat;
background-position: 50% 70%;
font-family: …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用生成PDF
WIckedPdf版本= 1.1.0
wkhtmltopdf 0.12.4(带有修补的qt)
Rails 4.2
以下是我的Controller端点
@cover = render_to_string layout: "application.html.erb", template: "pdf/cover.html.erb", locals: {report: @report}
@pdf = render_to_string pdf: "report",
encoding: "UTF-8",
page_size: 'A4',
layout: "pdf.html.erb",
orientation: 'Portrait',
disable_smart_shrinking: false,
disable_internal_links: false,
disable_external_links: false,
lowquality: false,
background: true,
no_background: false,
page_height: 297,
page_width: 210,
cover: @cover,
template: "pdf/report.pdf.erb",
locals: {report: @report},
show_as_html: false,
margin: {
bottom: 40,
top: 10
},
footer: {
html: {
template: 'pdf/footer.html.erb' # use :template OR :url
}
},
toc: {
text_size_shrink: 0.8, …Run Code Online (Sandbox Code Playgroud) pdf-generation ruby-on-rails wkhtmltopdf wicked-pdf ruby-on-rails-4.2
我正在创建一个 API,它应该根据数据库上的一些信息生成一个 PDF。
尝试调用操作时出现错误:
ActionController::UnknownFormat (ActionController::UnknownFormat):
app/controllers/v1/trips_controller.rb:56:in `print_monthly_trips'
Run Code Online (Sandbox Code Playgroud)
这是我的控制器:
/#application_controller.rb
class ApplicationController < ActionController::API
include Response
include ExceptionHandler
include Pundit
include ActionController::MimeResponds
/#trips_controler.rb
def print_monthly_trips
@trips_to_print = current_user.trips_for_month(3)
respond_to do |format|
format.html
format.pdf do
render pdf: "file_name",
template: "trips/report.html.erb",
layout: 'pdf.html'
end
format.json do
render pdf: "file_name",
template: "trips/report.html.erb",
layout: 'pdf.html'
end
end
end
Run Code Online (Sandbox Code Playgroud)
我的路线:
get 'print_monthly_trips', to: 'trips#print_monthly_trips'
Run Code Online (Sandbox Code Playgroud)
我使用以下命令调用我的 API:
http GET https://localhost/print_monthly_trips Accept:'application/vnd.trips.v1+json' Authorization:'my_token'
Run Code Online (Sandbox Code Playgroud)
那么,为什么我会得到这个:
ActionController::UnknownFormat (ActionController::UnknownFormat):
app/controllers/v1/trips_controller.rb:56:in`print_monthly_trips'
wicked-pdf ×10
css ×2
pdf ×2
ruby ×2
heroku ×1
image ×1
wicket ×1
wicket-1.5 ×1
wicket-1.6 ×1
wkhtmltopdf ×1