#ruby-on-rails-3 #barcode #wkhtmltopdf #wicked-pdf
#ruby-on-rails-3 #штрих-код #wkhtmltopdf #wicked-pdf
Вопрос:
Когда я пытаюсь включить SVG в PDF, созданный wicked_pdf (wkhtmltopdf), он выходит пустым. Есть идеи, как заставить 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
Ответ №1:
Я заставил его работать, используя этот метод встраивания SVG.
Отображение встроенного SVG-файла с помощью тега
Заменить
"data:image/svg xml;base64,PD94bWwgdmVy..."
с
"data:image/svg xml;base64,#{Base64.encode64(barcode.to_svg)}"
Ответ №2:
вот как я адаптировал ответ 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)}"}
таким образом, вы получите правильную ширину штрих-кода
Ответ №3:
Я использую wicked_pdf в одном из своих приложений Rails 3.0.x, и это работает как шарм. Я использую SVG-код, встроенный непосредственно в HTML (представления erb / haml). Нет или — просто чистый тег с заданными атрибутами ‘width’ и ‘height’. Это не работает для некоторых браузеров (Opera, IE<9), но в моем случае меня это не волнует. Может быть, вы могли бы попробовать использовать свои материалы таким образом?