【问题标题】:QR code in Prawn (PDF Gem), use a table? or a different simple solution?Prawn 中的二维码(PDF Gem),使用表格?或不同的简单解决方案?
【发布时间】:2012-10-07 02:36:10
【问题描述】:

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

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

我知道这很含糊,但由于可能的解决方案和我尝试过的不同尝试的数量,我不确定我应该提供哪些其他信息。

有什么想法吗?有没有其他人使用 Prawn 中的表格创建了带有 rqrcode gem 的二维码?

表格在视图中的外观(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

宝石文件

gem 'prawn'

gem 'prawn-qrcode'

gem "rqrcode", "~> 0.4.2"

更新

我发现了一些有用的code,尽管现在我遇到的问题是 QR 码的实际大小。我希望能够把二维码做得很大。令人惊讶的是,新代码中的参数实际上并没有改变大小。实际二维码中的size 参数确实会稍微改变大小,但它实际上改变了二维码的version,这不是我想要的。

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 看起来不错。虽然我不想将 QR 码存储为图像,即使我之后直接删除图像。我发现了一些使用 barby 的代码(我更新了我的问题)。但是我在增加 QR 码的大小时遇到​​了问题。我看到您在回答中使用了 barby。你有过使用 barby 尺码的经验吗?
    • 我已经生成了大小为 50 的条形码图像。它在上面的代码中。我想你也可以使用 barby 生成 QRCode。
    • 我目前使用的方法似乎不可能。二维码无法识别高度方法。我会投票赞成你的答案,因为你绝对值得积分,但现在我坚持尝试找到一种不使用图像的方法来做到这一点。如果我在当前设置中找不到答案,我可能会再次尝试使用表格,或者我可能会使用您的方法,在这种情况下,我会正确勾选。但在那之前,我真的想要没有图片的东西,或者至少不上传或下载图片。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2013-02-23
    相关资源
    最近更新 更多