4

I am using Prawn to render PDFs in my Rails app.

For some reason, though, my phone numbers are always indented on the right by 2 (?) spaces.

Can anybody tell me what I am missing here? All three values are saved as strings in my SQLite database and there are no whitespace characters that I am aware of.

The e-mail and url values are always neatly aligned to the right.

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

Can anybody help?

4

4 に答える 4

2

textメソッドでは が使用されるため、電話番号は常に右側にインデントされ:align => :rightます。そのため、テキストのすべての文字列が右側に配置されます。

左揃えでメソッドを使用text_boxして、ページの上端と右端から左上隅のインデントを定義することで、このボックスを手動でページに配置できます (bounds.right と bounds.top の値)。このようなもの(完全な動作例):

「エビ」が必要
'ostruct' が必要

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

エビ::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,
    :高さ => 50,
    :幅 => 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

OK、4 年後、ようやく自分の質問に答えることができます(やった!)\r :データベースに見えない文字がいくつかあることがわかりました。彼らがどうやってそこに入ったのかわからない... (ちなみに、私はその間にアプリを SQLite から MySQL に移動しました。)

私がする必要があったのは、これらの文字を削除することだけでした:

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