Встраивание SVG в PDF с использованием Wicked_PDF (wkhtmltopdf) - PullRequest
4 голосов
/ 24 октября 2011

Когда я пытаюсь включить SVG в PDF-файл, созданный с помощью wicked_pdf (wkhtmltopdf), он выходит пустым.Любая идея, как заставить svg отображать в pdf?

app / views / barcodes / 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 ]

7 голосов
/ 11 октября 2012

Я заставил его работать, используя этот метод встраивания SVG.

Отображение встроенного SVG с использованием тега

Заменить

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

с

"data:image/svg+xml;base64,#{Base64.encode64(barcode.to_svg)}"
3 голосов
/ 30 мая 2013

так я адаптировал ответ 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

на ваш взгляд(в моем случае хамл)

%img{:width => ExampleModelObject.barcode.width, :src=> "data:image/svg+xml;base64,#{Base64.encode64(ExampleModelObject.barcode.to_svg)}"}

таким образом вы получите правильную ширину штрих-кода

1 голос
/ 03 декабря 2011

Я использую wicked_pdf в одном из моих приложений Rails 3.0.x, и он работает как шарм. Я использую код SVG, встроенный непосредственно в HTML (представления erb / haml). Нет или - просто чистый тег с заданными атрибутами 'width' и 'height'. Это не работает для некоторых браузеров (Opera, IE <9), но мне все равно, в моем случае. Может быть, вы могли бы попробовать пойти со своими вещами таким образом? </p>

...