pdfkit does not style pdfs

前端 未结 6 1356
庸人自扰
庸人自扰 2020-12-14 02:22

I have a rails 3.1 app that creates pdf documents using pdfkit, and everything works as specified, except for the fact that the generated pdfs don\'t have any styling. I am

相关标签:
6条回答
  • 2020-12-14 02:59

    I know you're looking for solution that will render whole page, just reminder for googling people that there is still problem free workaround

    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
    

    now the pdf.css must be css, so teoretically if you need to load sass load it from pre-compiled public/assets/

    0 讨论(0)
  • 2020-12-14 03:02

    I ran into this problem as well, and it appears that when the asset pipeline was added in Rails 3.1, pdfkit has a problem with the stylesheet links. See the GitHub issue about this problem.

    I ended up switching to wicked_pdf and am really happy with it. They've solved this problem and it works nicely on Rails 3.2.x (haven't tried 3.1.x).

    0 讨论(0)
  • 2020-12-14 03:02

    I have used gem 'wicked_pdf' and its helpers to include CSS into pages. Internally that helpers just read all CSS files and include into the page itself. So if you prefer to use PdfKit try to investigate how to include non-inline stylesheets.

    0 讨论(0)
  • 2020-12-14 03:02

    I have successfully run PDFKit on Rails 3.1. I have used a different setup though.

    At first I had the same problem you did but that was because stylesheet_link_tag has a default set to media => "screen"; specifying explicitely media => "all" fixed it.

    0 讨论(0)
  • 2020-12-14 03:03

    For me it was problem with installation for ubuntu. I just reinstalled from source:

    # 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
    

    And everything works now for me. So my advice is do not install wkhtmltopdf by this command sudo apt-get install wkhtmltopdf and install it from sources. Full instructions for installation process

    0 讨论(0)
  • 2020-12-14 03:18

    Stealing a couple of lines from the middleware code found at https://github.com/pdfkit/pdfkit/blob/master/lib/pdfkit/middleware.rb

    You can use:

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

    My example is:

    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)
    
    0 讨论(0)
提交回复
热议问题