Prawn(PDF Gem)的QR码,用的是表格?还是一个不同的简单解决方

时间:2012-10-07 02:36:11

标签: ruby-on-rails qr-code prawn

我尝试过许多用于创建PDF文档的宝石,其中一些工作非常好,没有太多困难。我的任务是在PDF文档中创建QRcode。我在QR生成器和PDF生成器之间尝试了很多组合。虽然我在将Qr代码放入PDF文档时遇到了很多麻烦。我正在使用rqrcode宝石,我喜欢它,因为它从CSS生成QR码,而不是图像。

我尝试使用专门为Prawn生成QR码的gems,但是我不断收到一条消息,说它无法识别modules方法。我最接近的是在我的html文档中使用类似的结构。但那只是在没有表的情况下使用它,这是没用的,因为gem通过输出表和CSS来工作。

我知道这很模糊,但由于我尝试过的可能解决方案和不同尝试的数量,我不确定我应该给出什么其他信息。

有什么想法吗?有没有其他人设法使用Prawn中的表创建一个包含rqrcode gem的QR码?

表格在视图中的显示方式(HTML,而不是PDF):

<table class="qr">
 <% qr.modules.each_index do |x| -%>
   <tr>
   <% qr.modules.each_index do |y| -%>
    <% if qr.dark?(x,y) -%>
    <td class="black"/>
    <% else -%>
    <td class="white"/>
    <% end -%>
   <% end -%>
   </tr>
 <% end -%>
</table> 

我最接近.prawn.pdf file时没有突破(当我试图添加它打破的表时)。 *!只是在测试modules method是否有效,当我尝试将其更改为单元格背景时,它会中断。

@qr.modules.each_index do |x|
   @qr.modules.each_index do |y|
    if @qr.dark?(x,y)
      pdf.text "!"
    else
      pdf.text "*"
    end
   end
 end

Gemfile

gem 'prawn'

gem 'prawn-qrcode'

gem "rqrcode", "~> 0.4.2"

更新

我找到了一些有用的code,虽然现在我遇到的问题是QR码的实际大小。我希望能够使QR码非常大。令人惊讶的是,新代码中的参数实际上并没有改变大小;实际QR码中的size参数确实会稍微改变大小,但它实际上正在改变QR码的version,这不是我想要的。

1 个答案:

答案 0 :(得分:1)

我有一个几乎相似的问题。我有一个生成条形码的pdf文档。条形码需要在html视图的网格中显示,当用户点击“另存为pdf”时,视图的pdf文件将发送给用户。 我解决了它

在控制器中,在课前

require 'rubygems'
require 'barby'
require 'barby/barcode/code_128'
require 'chunky_png'
require 'barby/outputter/png_outputter'
require 'aws/s3'

控制器方法

def generate_barcode
   ...
   @barcode_numbers = inspection.get_barcode_numbers
   ...
   @barcode_numbers.each do |d|
     barcode = Barby::Code128B.new(d)
     image_path = get_image_path + "code_#{params[:inspection_id]}_#{@spec.id}_#{d.sub('.', '0')}.png"
     File.open(image_path, 'w'){|f|
       f.write barcode.to_png(:height => 50, :margin => 3)
       Barcode.create(:filename => "code_#{params[:inspection_id]}_#{@spec.id}_#{d.sub('.', '0')}.png", :measurement => d)
     }
   end
   html = render_to_string(:action => "generate_barcode.html.haml", :layout => false)
   kit = PDFKit.new(html)
   send_data(kit.to_pdf, :filename => 'barcodes.pdf', :type => 'application/pdf', :disposition => 'inline')
   @all_barcodes.each do |d|
     File.delete("#{Rails.root}/tmp/#{d.filename}")
   end if Rails.env != "development"
   @all_barcodes.destroy_all