【问题标题】:pdf file rendered in portrait instead of landscape以纵向而不是横向呈现的 pdf 文件
【发布时间】:2016-02-17 14:01:44
【问题描述】:

我们正在使用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"]

app/assets/stylesheets/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。我在登台服务器上回滚了这两个更改,但是还原这些更改都不能解决纵向而不是横向的问题。

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

【问题讨论】:

    标签: css ruby ruby-on-rails-4 pdf-generation princely


    【解决方案1】:

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

    require "combine_pdf"
    
    pdf = CombinePDF.load("file.pdf")
    pdf.pages.each {|p| p.orientation :landscape }
    pdf.save 'my.pdf'
    

    【讨论】:

      【解决方案2】:

      最终解决方案

      由于this issue,将sprockets-rails gem 从3.0.0 降级到2.3.3 已解决此问题。

      我是如何到达那里的

      princexml 命令行实用程序生成的prince.log 文件中发现一条错误消息,上面写着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。

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

      将rails版本从4.2.5.1降级到4.2.4原本是为了回滚我的所有更改并没有将sprockets-rails gem的版本降级到2.3.3;它仍然保留在3.0.0;因此我的结论是,rails 升级步骤不是这个问题的罪魁祸首。

      【讨论】:

        猜你喜欢
        • 2016-01-13
        • 1970-01-01
        • 2012-08-16
        • 2019-12-02
        • 2014-09-23
        • 1970-01-01
        • 2018-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多