使用Wicked_PDF(wkhtmltopdf)在PDF中嵌入SVG

时间:2011-10-24 18:27:13

标签: ruby-on-rails-3 barcode wkhtmltopdf wicked-pdf

当我尝试在由wicked_pdf(wkhtmltopdf)生成的PDF中包含SVG时,它显示为空白。知道如何让svg显示在pdf中吗?

应用/视图/条码/ to_pdf.html.haml

<descriptive text here>
%object#code_image{:data=>"/barcodes/generate_svg?code=4567898", :type=>"image/svg+xml", :height=>70}

条形码控制器

def generate_svg
  require 'barby'
  require 'barby/barcode/code_128'
  require 'barby/outputter/svg_outputter'
  barcode = Barby::Code128B.new(params[:code])
  render :text => barcode.to_svg({:height=>30, :width => 170})
end


def to_pdf
 render :pdf        => 'file_name'      
end

3 个答案:

答案 0 :(得分:7)

我使用这种嵌入SVG的方法让它工作。

Display Inline SVG Using the Tag

替换

"data:image/svg+xml;base64,PD94bWwgdmVy..."

"data:image/svg+xml;base64,#{Base64.encode64(barcode.to_svg)}"

答案 1 :(得分:3)

这就是我如何调整user1632065的答案,以便在html和pdf

中工作 你的GemFile中的

gem 'cairo'
gem 'barby'

在您的模型中

class ExampleModel
  def barcode
    require 'barby'
    require 'barby/barcode/code_128'
    require 'barby/outputter/cairo_outputter'
    Barby::CairoOutputter.new(Barby::Code128B.new('bla bla this is barcode source'))
  end
end
在你看来

(在我的案例中是haml)

%img{:width => ExampleModelObject.barcode.width, :src=> "data:image/svg+xml;base64,#{Base64.encode64(ExampleModelObject.barcode.to_svg)}"}
这样就可以获得正确的条形码宽度

答案 2 :(得分:1)

我在我的一个Rails 3.0.x应用程序中使用wicked_pdf,它就像一个魅力。我使用直接嵌入到HTML(erb / haml视图)中的SVG代码。否或 - 只是具有给定'width'和'height'属性的纯标签。它不适用于某些浏览器(Opera,IE&lt; 9),但在我的情况下我并不关心。也许你可以试试这样的东西吗?