4

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

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

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

电子邮件和 url 值总是整齐地向右对齐。

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

有人可以帮忙吗?

4

4 回答 4

2

电话号码总是在右边缩进,因为在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)
结尾
于 2013-06-11T06:20:45.507 回答
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 视图代码中执行),因为我更喜欢准确存储用户输入的内容,并且只在必要时(在视图中)操作他们的数据,但它确实倾向于使稍微查看代码。

于 2013-06-16T03:02:37.473 回答
0

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

GitHub:虾问题 578

于 2014-03-04T16:23:29.157 回答
0

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

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

telephone.tr("\r", "")
于 2017-02-18T15:54:10.633 回答