1

我们正在使用王子 gem 在我们的应用程序上生成 pdf 文档rails 4。在过去的几天里,生成的 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;                                                        
}    

执行的王子命令(如日志所示):

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.44.2.5.1,ruby 版本从更改2.2.02.3.0. 我在登台服务器上回滚了这两个更改,但是还原这些更改都不能解决纵向而不是横向的问题。

对于在哪里寻找此问题的根本原因以及如何解决它的任何建议,我们将不胜感激。

4

2 回答 2

1

如果您无法通过王子来解决这个问题,请查看combine_pdf,这里是一个旋转 pdf 文件并将其保存到另一个文件中的示例。

require "combine_pdf"

pdf = CombinePDF.load("file.pdf")
pdf.pages.each {|p| p.orientation :landscape }
pdf.save 'my.pdf'
于 2016-02-17T15:08:30.243 回答
0

最终解决方案

由于这个问题sprockets-rails,这已通过将gem 从降级3.0.0到修复。2.3.3

我是怎么到那里的

在命令行实用程序prince.log生成的文件中发现一条错误消息,其中说princexmlprintpdf.css: warning: can't open input file: No such file or directory

这让我意识到命令行实用程序是作为 css 文件的值princexml传递的,而不是完全限定的路径: on staging。printpdf.css/Users/prakash/Projects/main_project/app/assets/stylesheets/printpdf.css

通过王子代码调试,发现Rails.application.assets这里返回为nil。

我在这个练习中注意到的另一件有趣的事情:

将rails 版本从最初降级4.2.5.14.2.4回滚我的所有更改并没有将sprockets-railsgem 的版本降级到2.3.3;它仍然保持在3.0.0; 因此我的结论是rails升级步骤不是这个问题的罪魁祸首。

于 2016-02-19T19:53:46.837 回答