Rails 3 + PDFKit: Как преобразовать вид в PDF? - PullRequest
1 голос
/ 03 марта 2011

В моем приложении на 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:

enter image description here

Я использую:

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

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

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

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

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

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

2 голосов
/ 03 марта 2011

сначала вам нужно указать приложению использовать 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 все работает нормально, это как-то связано с путями, поэтому, возможно, это решит ваши проблемы.

...