我们正在使用princely gem在我们的rails 4
应用上生成pdf文档。在过去几天中,生成的pdf以纵向模式而不是指定的横向模式渲染;这个功能多年来一直很好用。
在服务器上的ruby / rails版本上已经进行了一些更新,但是pdf生成代码本身没有任何改变。
一个有趣的方面是,当我在我的机器(Mac)上本地测试时,pdf是在开发服务器上以横向模式生成的。相同的代码在临时/生产服务器(Linux)上以纵向模式生成pdf。
相关代码:
来自Gemfile
gem 'rails', '4.2.5.1'
gem 'princely', git: "git@github.com:mbleigh/princely.git"
....
Pdf渲染代码:
render :pdf => "ticket",
:template => "admin/tickets/print.pdf.erb",
:stylesheets => ["printpdf.css"]
应用/资产/样式表/ printpdf.css:
@page {
size: 8.5in 11in landscape;
margin: 5mm 5mm 5mm 5mm;
}
@page {
@bottom-right {
content: counter(page);
}
}
#pagebreak {
page-break-after: always;
}
执行了Princely命令(如日志所示):
PRINCE XML PDF COMMAND
/usr/local/bin/prince --input=html --server --log=/Users/prakash/Projects/main_project/log/prince.log -s /Users/prakash/Projects/main_project/app/assets/stylesheets/printpdf.css --silent - -o -
Rails版本最近已从4.2.4
更改为4.2.5.1
,并且ruby版本已从2.2.0
更改为2.3.0
。我在登台服务器上回滚了这两个更改,但是还原这些更改都没有修复纵向问题。
欢迎任何有关在何处查找此问题的根本原因以及如何解决此问题的建议。
答案 0 :(得分:1)
如果你不能通过王子来看看combine_pdf,那么这里有一个旋转pdf文件并将其保存到另一个文件中的示例。
require "combine_pdf"
pdf = CombinePDF.load("file.pdf")
pdf.pages.each {|p| p.orientation :landscape }
pdf.save 'my.pdf'
答案 1 :(得分:0)
最终解决方案
由于this issue,将sprockets-rails
gem从3.0.0
降级为2.3.3
,从而解决了这个问题。
我是如何到达那里的
在prince.log
命令行实用程序生成的princexml
文件中找到一条错误消息,其中说printpdf.css: warning: can't open input file: No such file or directory
这让我意识到princexml
命令行实用程序正在传递printpdf.css
作为css文件的值,而不是传递的完全限定路径:/Users/prakash/Projects/main_project/app/assets/stylesheets/printpdf.css
。
通过princely code进行调试,发现Rails.application.assets
在此处返回为nil。
我在练习中注意到的另一个有趣的事情是:
最初将我的4.2.5.1
降级为4.2.4
以将我的所有更改降级为sprockets-rails
并未将2.3.3
gem的版本降级为3.0.0
;它仍然保持在string
;因此我的结论是铁轨升级步骤不是这个问题的罪魁祸首。