2014-02-26 7 views
6

내가보기배경 이미지는

prawn_document(:page_size=> "A4", :top_margin => 80, :bottom_margin => 40, 
       :background => "public/uploads/1.png") do |pdf| 

    creation_date = Time.now.strftime('%d-%m-%Y') 
    posts = @posts.each do |post| 
    pdf.pad(10) do 
     pdf.text post.title 
     pdf.text post.text 
    end 
    end 

    pdf.page_count.times do |i| 
    pdf.go_to_page(i + 1) 
    pdf.draw_text "Creation Date : " + creation_date, :at => [200, 780] 
    pdf.draw_text "Page : #{i + 1}/#{pdf.page_count}", :at => [450, -3] 
    end 
end 

이 나에게 다음과 같은 출력 제공이 코드를 가지고 :

enter image description here

을이

enter image description here

첫 번째 이미지에서 볼 수 있듯이 이미지 i 중심에 있지 않습니다.

두 번째 이미지에서 이미지가 전체 페이지에 맞지 않는 것을 볼 수 있습니다.

각 페이지에 이미지를 추가하려고했는데 페이지 번호를 추가하는 방법과 이미지가 텍스트를 오버랩합니다. 하지만 여기서는 이미지가 원하는대로 배치 할 수 있지만 텍스트가 겹치는 것만 가능합니다.

머리글을 넣으면 이미지의 위치와 크기를 조정할 수 없습니다.

그래서 이미지를 페이지에 맞게 가져 오는 데 도움이 필요합니다. 이미지는 700px x 700px입니다.

PDFkit을 사용해 보았지만 페이지 번호를 얻을 수 없어서 새우를 사용하여 거의 다 왔지만 느낌이 듭니다. 다른 해결책조차도 높이 평가 될 것입니다.

답변

3

새우는 불행히도 옵션을 통해 페이지에 맞게 배경 이미지를 늘릴 수 없습니다. 그러나 할 수 있습니다. 이미지가 꼭 들어 맞아야하는 페이지는 정적이며 크기를 변경하지 않습니다. 또한, 우리는 정확한 치수를 알고

p Prawn::Document::PageGeometry::SIZES['A4'] 
# => [595.28, 841.89] 

따라서, 가장 좋은 방법은 당신의 선택의 이미지 편집기를 사용하여 해당 크기의 이미지를 만드는 것입니다. 즉, 원하는 크기로 캔버스를 만들고 원래 이미지에 맞 춥니 다. 폭을 맞추고 수직으로 가운데에 맞 춥니 다. 그러나 그것은 당신에게 달려 있습니다. 595px x 842px 이미지를 만들면 멋지게 잘 맞을 것입니다.

+1

이미지 크기와 함께 페이지 지오메트리 정보를 사용하여 크기 조정 비율을 얻은 다음 background_scale 옵션을 전달할 수도 있습니다. 그래도 페이지에 맞추기위한 지원을 추가하는 패치를 병합하는 것이 좋습니다. –

+0

@GregoryBrown 오, 그 옵션이 존재한다는 것을 몰랐습니다! 나는 새우를 자주 사용하지 않기 때문에 Document API를 봤는데, 그 옵션을 전혀 언급하지 않은 0.11 버전으로 끝났다.'새우 문서 API'의 첫 번째 결과입니다. 현재 버전은 (http://prawnpdf.org/api-docs/Prawn/Document.html) 않습니다. ': background_fit' 옵션을 추가하는 것이 좋습니다. 사용자는 일반적으로 수학을 수행하고 스스로 적절한 비율을 파악하는 것을 좋아하지 않습니다. 절약 할 시간이 있다면': center'와 같은 위치 지정 옵션을 추가하여 확장되지 않은 배경을 중앙에 배치하는 것도 고려해 볼 수 있습니다. –

+0

나는 잡아 당기기 요청을 검토하고 배포판을 자르고 버그를 수정하는 것을 제외하고는 아무 것도 할애 할 시간이 없다. 그러나이 패치와 Prawn에서 발견 한 다른 거친 부분에 대해서는 패치를 환영합니다. –

1

새우 templates을 사용해보십시오. 이렇게하면 배경과 반복되는 세부 정보 (머리말, 꼬리말)를 쉽게 스타일링 할 수 있으며 (Illustrator와 같은 디자인 소프트웨어를 사용하여) 코드에서 Prwan이 템플릿 파일 (templeate.pdf)을 가리킬 수 있습니다.

말했다 것
prawn_document(:page_size=> "A4",:top_margin => 80,:bottom_margin => 40,:template => 'public/pdf/template.pdf') do |pdf| 
# Yout pdf building code here 
end 

,이 솔루션은 많은 PNG 파일을 사용하는 특수 경우 템플릿 출력 기능을 새우 팀 extract하기로 결정이 해결 방법으로 올

또 다른 경고 (이 issue 확인), 최적의 성능 현명하지 않을 수도 있습니다 메인 주얼리는 seperate one입니다. 이전 버전을 사용하는 경우이 점에 대해 걱정할 필요는 없지만 최신 버전을 사용하는 경우이 기능이 유지되고 죽지 않았는지 확인해야 할 수 있습니다.

+0

나는 새우의 관리자입니다. 몇 가지 포인트 : 1) 최신 버전의 새우는 훨씬 빠른 PNG 지원을 제공하며, 2) 템플릿 구현에 근본적인 결함이 있으므로 새우의 모든 버전에서 사용하기에 안전하지 않기 때문에 추출되었습니다. 문서가 손상 될 가능성은 출시 된 모든 버전에 있습니다. –

+0

@GregoryBrown 템플릿 포인트에 대한 설명을 주셔서 감사합니다. 템플릿은 저와 다른 많은 사람들이 복잡한 머리글과 바닥 글을 그리는 데 낭비 될 수있는 많은 시간을 절약 해주었습니다. 여기에 누락 된 해결 방법이 있습니까? – Nimir

+0

우리는 Prawn을 안정화시킬 때 훨씬 더 높은 수준에서 다양한 작업을 수행 할 수있는 플러그인이 점점 더 많아지기를 희망하지만 어떤 해결 방법도 없습니다. 템플릿의 문제점은 가장 낮은 레벨에서 템플릿 파일을 구문 분석하고 템플릿에 무엇이 있는지에 대해 실제로 알지 못하는 채로 Prawn의 출력으로 병합하는 것입니다. 이러한 이유로 Prawn 코드에서 수행중인 작업이 템플릿에서 발생한 작업과 충돌 할 때마다 손상이 발생합니다. –