pdfkit не разрабатывает pdfs - PullRequest
18 голосов
/ 08 ноября 2011

У меня есть приложение rails 3.1, которое создает документы pdf с использованием pdfkit, и все работает, как указано, за исключением того факта, что сгенерированные pdf не имеют стилей.Я предполагаю, что wkhtmltopdf не имеет доступа к моим таблицам стилей и что это не большая проблема, чем эта.Кто-нибудь знает, как вы разрешите доступ к этим таблицам стилей?В основном я следил за Railscast # 220 по этому вопросу, однако мне пришлось создать новый инициализатор, чтобы pdfkit работал с rails 3.1.

Это инициализатор, который мне пришлось использовать, чтобы заставить pdfkit работать с рельсами 3.1

ActionController::Base.asset_host = Proc.new { |source, request|
  if request.env["REQUEST_PATH"].include? ".pdf"
    "file://#{Rails.root.join('public')}"
  else
    "#{request.protocol}#{request.host_with_port}"
  end
 } 

Ссылка на pdf выглядит так:

<%= link_to 'Download PDF', load_path(@load, :format => "pdf") %>

Это даст мне ссылку на pdf, который не имеет стиля.

В моем application.rb я настроил pdfkit следующим образом:

config.middleware.use PDFKit::Middleware, :print_media_type => true

Я также добавил это в свои макеты /файл application.html.erb:

<%= stylesheet_link_tag    "application", :media => "all" %>

Ответы [ 6 ]

5 голосов
/ 13 августа 2013

Кража нескольких строк из кода промежуточного программного обеспечения, найденного на https://github.com/pdfkit/pdfkit/blob/master/lib/pdfkit/middleware.rb

Вы можете использовать:

root = PDFKit.configuration.root_url || "#{env['rack.url_scheme']}://#{env['HTTP_HOST']}/"
html.gsub!(/(href|src)=(['"])\/([^\"']*|[^"']*)['"]/, '\1=\2' + root + '\3\2')

Мой пример:

html = render_to_string #render current action to string
root = PDFKit.configuration.root_url || "#{env['rack.url_scheme']}://#{env['HTTP_HOST']}/"
html.gsub!(/(href|src)=(['"])\/([^\"']*|[^"']*)['"]/, '\1=\2' + root + '\3\2')
kit = PDFKit.new(html, :print_media_type => true)
2 голосов
/ 14 августа 2012

Я знаю, что вы ищете решение, которое будет отображать всю страницу, просто напоминание людям, прибегающим к гуглу, о том, что есть обходной путь без проблем

class DocumentController < ApplicationController

  def show
    @document = Document.last
    # ... implement your respond_to

    kit = PDFKit.new(@document.content, :page_size => 'Letter')
    kit.stylesheets << "#{Rails.root}/app/assets/stylesheets/pdf.css"
    send_data kit.to_pdf, :filename => "#{@document.title}.pdf", :type => 'application/pdf'
  end

end

теперь pdf.css должен быть css, поэтому теоретически, есливам нужно загрузить sass загрузить его из предварительно скомпилированного public / assets /

2 голосов
/ 18 апреля 2012

Для меня это была проблема с установкой для Ubuntu.Я только что переустановил из источника:

# first, installing dependencies
sudo aptitude install openssl build-essential xorg libssl-dev

# for 64bits OS
wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-amd64.tar.bz2 
tar xvjf wkhtmltopdf-0.9.9-static-amd64.tar.bz2
mv wkhtmltopdf-amd64 /usr/local/bin/wkhtmltopdf
chmod +x /usr/local/bin/wkhtmltopdf

# for 32bits OS
wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2 
tar xvjf wkhtmltopdf-0.9.9-static-i386.tar.bz2
mv wkhtmltopdf-i386 /usr/local/bin/wkhtmltopdf
chmod +x /usr/local/bin/wkhtmltopdf

И теперь у меня все работает.Поэтому мой совет: не устанавливайте wkhtmltopdf с помощью этой команды sudo apt-get install wkhtmltopdf и устанавливайте его из исходников.Полная инструкция для процесса установки

2 голосов
/ 23 февраля 2012

Я также столкнулся с этой проблемой, и похоже, что когда в Rails 3.1 был добавлен конвейер ресурсов, у pdfkit возникла проблема со ссылками на таблицы стилей. См. Проблему GitHub об этой проблеме.

Я закончил тем, что переключился на wicked_pdf и действительно доволен этим. Они решили эту проблему, и она прекрасно работает на Rails 3.2.x (не пробовала 3.1.x).

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

Я использовал гем 'wicked_pdf' и его помощники для включения CSS в страницы. Внутренне эти помощники просто читают все файлы CSS и включают в себя саму страницу. Поэтому, если вы предпочитаете использовать PdfKit, попробуйте выяснить, как включить не встроенные таблицы стилей.

0 голосов
/ 23 ноября 2011

Я успешно запустил PDFKit на Rails 3.1.Я использовал другую настройку .

Сначала у меня была та же проблема, что и вы, но это было потому, что stylesheet_link_tag имеет значение по умолчанию media => "screen";явно указав media => "all" исправил.

...