PDF-файл отображается в портретной ориентации вместо альбомной

Мы используем драгоценный камень принца для создания документов в формате PDF в нашем приложении rails 4. В течение последних нескольких дней сгенерированный PDF-файл отображается в портретном режиме вместо указанного ландшафтного режима; эта функция работала нормально в течение многих лет.

Были сделаны некоторые обновления для версий ruby/rails на сервере, но ничего не изменилось в самом коде генерации pdf.

Один интересный аспект заключается в том, что pdf создается в ландшафтном режиме на сервере разработки, когда я тестирую его локально на своем компьютере (Mac). Тот же код создает PDF-файл в портретном режиме на промежуточном/производственном сервере (Linux).

Связанный код:

Из Gemfile

gem 'rails', '4.2.5.1'
gem 'princely', git: "[email protected]: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.4 на 4.2.5.1, а версия ruby ​​была изменена с 2.2.0 на 2.3.0. Я отменил оба этих изменения на промежуточном сервере, но отмена ни одного из этих изменений не устраняет проблему портретной ориентации вместо альбомной.

Буду признателен за любые предложения о том, где искать основную причину этой проблемы и как ее исправить.


person Prakash Murthy    schedule 17.02.2016    source источник


Ответы (2)


Если вы не можете сделать это правильно с помощью Princely, взгляните на combine_pdf, здесь пример, который вращает PDF файл и сохраняет его в другой файл.

require "combine_pdf"

pdf = CombinePDF.load("file.pdf")
pdf.pages.each {|p| p.orientation :landscape }
pdf.save 'my.pdf'
person peter    schedule 17.02.2016

Окончательное решение

Это было исправлено путем понижения уровня 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 при подготовке.

При отладке с помощью княжеского кода обнаружено, что Rails.application.assets возвращается как ноль здесь.

Еще одна интересная вещь, которую я заметил во время этого упражнения:

Понижение версии rails с 4.2.5.1 до 4.2.4 изначально для отката всех моих изменений не привело к понижению версии sprockets-rails gem до 2.3.3; он по-прежнему держал его на уровне 3.0.0; следовательно, мой вывод о том, что шаг обновления рельсов не был причиной этой проблемы.

person Prakash Murthy    schedule 19.02.2016