PDFKit дает мне 406, и рендеринг пустой PDF - PullRequest
4 голосов
/ 18 мая 2011
  • Рельсы 3
  • PDFKit 0.5.0
  • Windows 7 с установленным wkhtmltopdf

    #/config/initializers/pdfkit.rb
    require 'rbconfig'
    PDFKit.configure do |config|
      if !((Config::CONFIG['host_os'] =~ /mswin|mingw/).nil?)#if windows environment this is the path to wkhtmltopdf otherwise use gem binaries
        config.wkhtmltopdf = "C:/Program\ Files\ (x86)/wkhtmltopdf/wkhtmltopdf.exe"
      end
    end
    
    #show action I am working with
    def show
      @work_order = WorkOrder.find_by_id(params[:id])
      respond_to do |format|
        format.pdf #pdfkit handles this
        format.html { render :partial => "show" } if request.xhr? 
      end
    end
    
    #config/initializers/mime_types.rb
    Mime::Type.register "application/pdf", :pdf
    

И после всего этого я получаю пустой PDF-файл, отправленный в браузер, и вывод журнала говорит об этом

Started GET "/work_orders/6.pdf" for 127.0.0.1 at 2011-05-17 15:51:31 -0400
Processing by WorkOrdersController#show as HTML
Parameters: {"id"=>"6"}
User Load (3.0ms)  SELECT `users`.* FROM `users` WHERE (`users`.`id` = 1) LIMIT 1
SQL (6.0ms)  describe `roles_users`
Role Load (3.0ms)  SELECT `roles`.* FROM `roles` WHERE (`roles`.`id` = 980190962) LIMIT 1
WorkOrder Load (4.0ms)  SELECT `work_orders`.* FROM `work_orders` WHERE (`work_orders`.`id` = 6) LIMIT 1
Completed 406 Not Acceptable in 265ms

Я надеюсь, вы можете помочь мне

РЕДАКТИРОВАТЬ: я удалил все из действия шоу до

def show
  @work_order = WorkOrder.find_by_id(params[:id])
end

и теперь я получаю 200, но страница по-прежнему отображается пустым

Started GET "/work_orders/6.pdf" for 127.0.0.1 at 2011-05-17 17:15:26 -0400
Processing by WorkOrdersController#show as HTML
Parameters: {"id"=>"6"}
User Load (19.0ms)  SELECT `users`.* FROM `users` WHERE (`users`.`id` = 1) LIMIT 1
SQL (34.0ms)  describe `roles_users`
Role Load (17.0ms)  SELECT `roles`.* FROM `roles` WHERE (`roles`.`id` = 980190962) LIMIT 1
WorkOrder Load (9.0ms)  SELECT `work_orders`.* FROM `work_orders` WHERE (`work_orders`.`id` = 6) LIMIT 1
Rendered work_orders/show.html.erb within layouts/application (10.0ms)
Completed 200 OK in 741ms (Views: 58.0ms | ActiveRecord: 79.0ms)

EDIT2: Теперь я рендерился без макета, страница уже не пустая, но все символы закручены

1 Ответ

1 голос
/ 09 ноября 2011

Если вы хотите, чтобы PDFKit обрабатывал все автоматически, когда URL-адрес заканчивается на .pdf, вам также необходимо настроить PDFKit middleware.

Источник: https://github.com/jdpace/PDFKit

Middleware

PDFKit поставляется с промежуточным программным обеспечением, которое позволяет пользователям просматривать PDF-страницы любой страницы вашего сайта, добавляя .pdf к URL-адресу.Установка промежуточного программного обеспечения

Приложения Rails

# in application.rb(Rails3) or environment.rb(Rails2)
require 'pdfkit'
config.middleware.use PDFKit::Middleware

С опциями PDFKit

# options will be passed to PDFKit.new
config.middleware.use PDFKit::Middleware, :print_media_type => true
...