用Prawn生成的PDF中右侧缩进的文本

时间:2013-06-03 18:12:08

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

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

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

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

电子邮件和网址值始终与右侧整齐对齐。

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

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:2)

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

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

require 'prawn'
require 'ostruct'

p = OpenStruct.new(
  :telephone => "+1-201-555-2233",
  :email => "test@example.com",
  :url => "http://example.com")

Prawn::Document.generate('simple_text.pdf', :skip_page_creation => true) do
  start_new_page
  text_box("#{p.telephone}\n#{p.email}\n#{p.url}",
    :at => [bounds.right - 100, bounds.top - 100],
    :align => :left,
    :height => 50,
    :width => margin_box.width)
end

答案 1 :(得分:1)

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

即使在这种情况下它你的具体问题,在你渲染它们之前,从你的电话号码(实际上也是其他字段)中删除空格可能是个好主意。 - 假设这是某个表单字段,你可以预期某些用户会意外地放入尾随空格。您可以在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视图代码中执行),因为我更喜欢存储用户输入的内容,并且只在必要时(在视图中)操纵他们的数据,但它确实倾向于稍微混淆了视图代码。

答案 2 :(得分:0)

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

请参阅GitHub: Prawn Issue 578

答案 3 :(得分:0)

好的,4年后我终于可以回答我自己的问题(耶!):事实证明我的数据库中有一些不可见的\r个字符。不确定他们是如何进入那里的......(顺便说一句:在此期间我已经将我的应用程序从SQLite移到了MySQL。)

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

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