4

Prawn을 사용하여 내 Rails 앱에서 PDF를 렌더링합니다.새우로 생성 된 PDF의 오른쪽에 들여 쓰기 된 텍스트

그러나 내 전화 번호는 항상 오른쪽에 2 (?) 공백만큼 들여 쓰기되어 있습니다.

아무에게도 내가 누락 된 내용을 말할 수 있습니까? 세 가지 값은 모두 SQLite 데이터베이스에 문자열로 저장되며 알고있는 공백 문자가 없습니다.

전자 메일 및 URL 값은 항상 오른쪽에 깔끔하게 정렬됩니다.

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

아무도 도와 줄 수 있습니까?

+0

WHT를 'p.telephone.length'를 돌려 주나요?정확한 문자 길이와 일치합니까? – Muntasim

+0

나는 비슷한 문제가 있으며 내 경우에 문제를 일으키는 '-'임을 깨달았다. 전화 번호에 '-'가 있습니까? 아직 문제를 해결 했니? – Yolgie

답변

2

text 메서드에서 :align => :right이 사용되므로 모든 텍스트 문자열이 오른쪽에 정렬되므로 전화 번호는 항상 오른쪽에 들여 쓰여집니다.

왼쪽 맞춤을 사용하여 text_box 메서드를 사용하고 페이지의 위쪽 및 오른쪽 가장자리에서 왼쪽 위 모서리의 들여 쓰기를 정의하여이 상자를 수동으로 배치 할 수 있습니다 (bounds.right 및 bounds.top 값) . 이 (전체 작업 예)처럼 뭔가 :

require 'prawn' 
require 'ostruct' 

p = OpenStruct.new(
    :telephone => "+1-201-555-2233", 
    :email => "[email protected]", 
    :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
+0

OK, 고맙습니다. 나는 지금 다른 프로젝트에 묶여 있지만, 제안이 효과가 있는지 확인하기 위해 며칠 후에 이것을 다시 얻을 것입니다. – Tintin81

+0

그래,하지만 내 텍스트를 여기에 맞게 정렬해야 겠어. Letterhead에서 더보기 만합니다. – Tintin81

1

그것은 정말 p.telephone 분야에서 일부 길잃은 공백이 있다는 가능성이 보인다. 나는 Prawn/Rails에서 당신과 비슷한 것을하고 있습니다. 그래서 올바르게 옳은 정렬을하지 못하도록 생각할 수있는 많은 방법을 시도해 보았습니다. 문제를 재현 할 수있는 방법은 필드에 공백을 삽입하는 것뿐이었습니다. .

이 경우 이 아닌 경우에는 특정 문제가 발생할 수 있습니다. 어쨌든 렌더링하기 전에 전화 번호 (실제로는 다른 입력란)의 공백을 제거하는 것이 좋습니다. 어딘가에 양식 필드가 있다면 일부 사용자가 우연히 후행 공백에 넣을 것입니다.

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

또는 당신이 원하신다면 당신은 당신의 모델을 할 수있는 : 당신은 다음과 같이 당신의 PDF 코드에서 그렇게 할 수 있습니다

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

개인적으로 첫 번째 옵션 등이 (그것을 PDF 뷰 코드에서) 사용자가 입력 한 내용을 정확하게 저장하고 필요할 때만 (보기에서) 데이터를 조작하기를 원하기 때문에보기 코드를 조금 복잡하게 만드는 경향이 있습니다. 당신 문제가 아니라 하이픈 관련이 있는지

참조

+0

감사합니다. 나는 며칠 후에 이것으로 돌아갈 것이다. – Tintin81

+0

'strip' 메소드가 여기서 작동하지 않습니다. 불행히도 아무 것도 변경하지 않습니다. 방금 시도 ... – Tintin81

0

좋아요, 4 년 후 나는 마침내 내 자신의 질문에 대답 할 수 있습니다 (예!) : 내 데이터베이스에 보이지 않는 \r 문자가 있음이 밝혀졌습니다. 그들이 ... 거기에 있었는지 확실하지 (그런데 : 나는 그 동안 MySQL로 SQLite는에서 내 응용 프로그램을 옮겼습니다.)

내가 할 필요가 모든 해당 문자 제거했다 :

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