Rails 3 + PDFKit: как преобразовать представление в PDF?

В моем приложении Rails 3 в Windows у меня есть следующая страница, которая показывает получение задания и позволяет пользователю редактировать его:

http://localhost:3001/jobs/45/invoice

У меня также есть кнопка «Создать PDF» внизу страницы. При нажатии вызывается create_pdf_invoice моего JobsController:

def create_pdf_invoice
    job = Job.find(params[:id])

    kit = PDFKit.new("<h1>Hello</h1><p>This is PDF!!!</p>", :page_size => "A4")
    file = kit.to_file("my_file_name.pdf")

    redirect_to(:action => 'index')
  end
end

Все это прекрасно работает, т.е. PDF создается!

Мой вопрос: как я могу распечатать сам счет, а не этот статический текст (например, если я нажму «Печать» на странице http://localhost:3001/jobs/45/invoice)?


ОБНОВЛЕНИЕ

я пытался поставить

require 'pdfkit'

и

config.middleware.use PDFKit::Middleware

в config/application.rb, как предложено здесь.

Сервер запускается нормально, но когда я захожу в

http://localhost:3001/jobs/45/invoice.pdf

Рубин вылетает:

введите здесь описание изображения

Я использую:

ruby 1.9.2p0 (2010-08-18) [i386-mingw32]
Rails 3.0.1
rake, version 0.8.7
pdfkit (0.5.0)

Любые идеи ?


person Misha Moroshko    schedule 03.03.2011    source источник
comment
Я не уверен, правильно ли я вас понял. Вы хотите преобразовать вид для http://localhost:3001/jobs/45/invoice в PDF или хотите print текущий вид с помощью (например, лазерного) принтера? Или распечатать PDF вместо HTML?   -  person polarblau    schedule 03.03.2011
comment
Я хотел бы преобразовать http://localhost:3001/jobs/45/invoice в PDF.   -  person Misha Moroshko    schedule 03.03.2011
comment
после ответа @tommasop мне нечего сказать :) но railscasts.com/episodes/220-pdfkit, также может помочь.   -  person Anand Shah    schedule 03.03.2011


Ответы (2)


сначала вам нужно указать приложению использовать pdfkit в качестве промежуточного программного обеспечения.

Итак, где-то в инициализаторе вам нужно поставить:

# PDFKit
require 'pdfkit'
middleware.use PDFKit::Middleware

PDFKit.configure do |config|
  config.wkhtmltopdf = 'windows_path_to_wkhtmltopdf'
end

После этого, если вы позвоните

http://localhost:3001/jobs/45/invoice.pdf

PDF должен быть сгенерирован для вас.

PDFkit — это промежуточное программное обеспечение, которое перехватывает формат pdf, отображая страницу соответствующим образом.

Если вы хотите, вы также можете ограничить pdf-маршруты в конфигурации с помощью регулярных выражений или строки.

Просто предостережение: если у вас есть изображения на странице, они должны называться с абсолютным путем.

Мы также обнаруживаем некоторые проблемы с pdfkit 0.5.0, но с версией 0.4.6 все работает нормально, это как-то связано с путями, поэтому, возможно, это может решить ваши проблемы.

person tommasop    schedule 03.03.2011
comment
Мой пример кода, упомянутый выше, работает, т.е. wkhtmltopdf настроен правильно, так что проблема не в этом... - person Misha Moroshko; 03.03.2011
comment
Я могу дать вам два общих совета: 1. вы можете попробовать github.com/nkokkos/PDFKit этот pdfkit версия для машин Windows XP 2. кажется, проблема может заключаться в отсутствии функции fork() в Windows ruby-forum.com/topic/214311 - person tommasop; 03.03.2011
comment
У вас есть идеи, как решить проблему fork() в Windows? - person Misha Moroshko; 03.03.2011

С помощью промежуточного программного обеспечения PDFKit вы можете просматривать html-страницу в формате pdf только в браузере. Если вы хотите показать приглашение на загрузку, вам нужно установить заголовок в своем действии.

headers["Content-Disposition"] = "attachment; filename=export"

Кроме того, если вы хотите сохранить файл PDF на сервере, вы можете попробовать эту ссылку.

Сохранить PDF-файл, отображаемый промежуточным программным обеспечением PDFKit

person Ashish    schedule 03.03.2011