【问题标题】:Text indented on the right in PDFs generated with Prawn使用 Prawn 生成的 PDF 中右侧缩进的文本
【发布时间】:2013-05-29 23:31:19
【问题描述】:

我正在使用 Prawn 在我的 Rails 应用程序中呈现 PDF。

不过,出于某种原因,我的电话号码总是在右侧缩进 2 个 (?) 空格。

谁能告诉我我在这里缺少什么?所有三个值都保存为我的 SQLite 数据库中的字符串,并且没有我知道的空白字符。

e-mail 和 url 值总是整齐地向右对齐。

  def show_sender_details
    text "#{p.telephone}\n#{p.email}\n#{p.url}", :align => :right 
  end

有人可以帮忙吗?

【问题讨论】:

  • 它会返回p.telephone.length 吗?它与确切的字符长度匹配吗?
  • 我有一个类似的问题,并意识到在我的情况下造成问题的是“-”。你的电话号码里有“-”吗?你解决问题了吗?

标签: ruby-on-rails ruby-on-rails-3 pdf-generation prawn prawnto


【解决方案1】:

好的,4 年后我终于可以回答我自己的问题了(耶!):原来我的数据库中有一些不可见的 \r 字符。不知道他们是怎么进来的……(顺便说一句:我已经把我的应用从 SQLite 移到了 MySQL。)

我需要做的就是删除这些字符:

telephone.tr("\r", "")

【讨论】:

    【解决方案2】:

    好的,如果您的问题也与连字符有关,解决方案是使用 Prawn Release >= 0.13.1(不是任何旧的 1.0.0.rc)

    GitHub: Prawn Issue 578

    【讨论】:

      【解决方案3】:

      p.telephone 字段中似乎确实有一些杂散的空白。我正在用 Prawn / Rails 做与你类似的事情,所以我只是尝试了尽可能多的方法来让它不能正确右对齐,并且在字段中插入空格是我可以重现你的问题的唯一方法.

      即使在这种情况下不是你的具体问题,在你渲染它们之前去掉你的电话号码(事实上,其他字段也是如此)的空格可能是个好主意- 假设这是某处的表单域,您可以预期 some 用户会不小心将尾随空格放入。您可以在 PDF 代码中执行此操作,如下所示:

      text "#{p.telephone.strip}\n#{p.email.strip}\n#{p.url.strip}", :align => :right
      

      如果您愿意,也可以在您的模型中执行此操作:

      def telephone=(t)
        write_attribute(:telephone, t.strip)
      end
      

      我个人喜欢第一个选项(在 PDF 视图代码中执行),因为我更喜欢准确存储用户输入的内容,并且只在必要时(在视图中)操作他们的数据,但它确实倾向于让视图代码有点混乱。

      【讨论】:

      • 谢谢。我会在几天后回复这个问题。
      • strip 方法在这里不起作用。不幸的是没有任何改变。刚试过...
      【解决方案4】:

      电话号码总是向右缩进,因为在text 方法中使用了:align => :right,所以所有文本字符串都向右对齐。

      您可以尝试使用text_box 左对齐方法,并通过定义其左上角从页面顶部和右侧边缘的缩进(bounds.right 和 bounds.top 值)手动将此框放在页面上)。像这样的东西(完整的工作示例):

      需要'虾'
      需要“结构”
      
      p = OpenStruct.new(
        :电话 => "+1-201-555-2233",
        :email => "test@example.com",
        :url => "http://example.com")
      
      Prawn::Document.generate('simple_text.pdf', :skip_page_creation => true) 做
        开始新页
        text_box("#{p.telephone}\n#{p.email}\n#{p.url}",
          :at => [bounds.right - 100, bounds.top - 100],
          :align => :left,
          :高度=> 50,
          :width => margin_box.width)
      结束

      【讨论】:

      • 好的,非常感谢。我现在正忙于另一个项目,但过几天会回来看看你的建议是否可行。
      • 好的,但我肯定需要在这里右对齐我的文本。只是在信笺上看起来更好。
      猜你喜欢
      • 2010-11-18
      • 2010-12-27
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      相关资源
      最近更新 更多