2011-08-10 3 views
14

각 페이지마다 배경 이미지를 넣어야하는 pdf 책을 만들고 있습니다.새우 : 더 큰 해상도의 배경 이미지 추가

페이지 크기는 (576 x 576)이고 배경 이미지의 크기는 2700 x 2700 (300 dpi.)입니다.이 크기는 조정할 수없는 요구 사항입니다. 내 문제는 - 배경 이미지가 페이지에서 비례하여 나타납니다. 이 문제를 어떻게 해결할 수 있습니까?

Prawn::Document.generate("#{Rails.root.to_s}/public/#{filename}.pdf", :page_size => [576,576], :left_margin => 50, 
:right_margin => 50, :page_layout => :portrait, :skip_page_creation => true, :skip_encoding => true, 
:background => "#{Rails.root.to_s}/public/images/pdf/bg_blank_low.jpg") do |pdf| 
    .... 
    .... 
    .... 
) 

나는 배경 이미지로 300 DPI의 이미지를 배치 할 수있는 다른 방법이 있나요 : 다음은 내 코드입니다.

나는 심지어 배경으로 pdf 템플릿을 추가하려했지만 여전히 운이 없다.

모든 제안이나 힌트를 주시면 감사하겠습니다.

감사합니다.

답변

11

:background 옵션은 이미지의 크기를 조정할 수 없으므로 Prawn::Document.generate의 옵션을 사용하여 수행하려는 작업을 수행 할 수 없습니다. :background 옵션을 사용하려면 이미지가 PDF와 동일한 dpi (일반적으로 72dpi)인지 확인해야합니다.

그러나 정상적인 이미지처럼 페이지에 이미지를 넣은 다음 텍스트를 맨 위에 놓을 수도 있습니다. 이것은 이미지를 임베드 한 이후로 확장 할 수 있기 때문에 가능합니다. 코드는 다음과 같을 수 있습니다

Prawn::Document.generate("#{Rails.root.to_s}/public/#{filename}.pdf", :page_size => [576,576], :left_margin => 50, :right_margin => 50, :page_layout => :portrait, :skip_page_creation => true, :skip_encoding => true) do |pdf| 
    bg_image = "#{Rails.root.to_s}/public/images/pdf/bg_blank_low.jpg" 
    pdf.image bg_image, :scale => 0.2311 
    pdf.move_up 576 
end 

이 당신의 '배경'완전히 (우리가 수동으로 규모 576분의 2,700을 계산하기 때문에) 당신이 당신의 여백을 (존중하려는 경우,이 아마 인 페이지를 포함 할 것 더 좋은 방법은 일반적으로 다음과 같이 바꿀 수 있습니다.

pdf.image bg_image, :width => pdf.bounds.width 

이렇게하면 이미지의 크기가 페이지 경계 상자의 너비에 따라 자동으로 조정됩니다. 당신은 당신이 당신의 텍스트를 넣어 시작할 수 있습니다 이런 짓을하고 이미지의 맨 위에 나타납니다 그래서 우리가 얻을 후

pdf.move_up pdf.bounds.height 

이 우리의 확장 시뮬레이션 된 : 물론 당신은뿐만 아니라 당신의 move_up을 변경하려면 뭔가를해야합니다 배경.

업데이트

이 코멘트에 관해서 업데이트입니다. 페이지가 자동으로 만들어지고 동일한 배경을 원한다면 현재 새우를 사용하는 경우 운이 좋지 않게됩니다. 이 기능이 정말로 필요한 경우 새우를 패치해야합니다.

새우 소스 (https://github.com/sandal/prawn)를 잡고 살펴보십시오. 너 뒤에있는 것이 lib/document.rb이고, 244 행에 start_new_page 메쏘드가있다. 280 행의이 메소드 내에서 백그라운드가 설정되는 곳을 볼 수 있습니다. 불행히도 canvas을 사용하고 있습니다. 즉, 이미 올바른 크기의 이미지 여야합니다. 이것이 배경 이미지가 자동으로 확대되지 않는 이유입니다.

이 동작을 무시해야합니다.Ruby이므로 프로젝트 내에서 클래스를 다시 연 다음이 방법을 붙여 넣기 만하면됩니다 (이 방법에 대한 자세한 정보가 필요하면 Ruby 클래스에 원숭이 패치가 많이 있습니다). 이제이 방법을 마음의 내용으로 편집하십시오. 가장 쉬운 방법은 캔버스를 모두 제거한 다음 위의 이미지 트릭을 사용하는 것입니다. 따라서 라인은 다음과 같이 끝납니다 :

image(@background, :width => bounds.width) if @background 
move_up bounds.height 

이제 배경을 설정하는 표준 방법을 사용하면 모든 것이 작동합니다.

Infact는, 당신도 여기에 라인 (280)을 변경 멀리받을 수 있습니다 :

canvas { image(@background, :width => bounds.width) } if @background 

그리고 모든 것을 당신이 여분의 줄을 : 입력 할 필요 절약, 잘 작동합니다. :width 옵션으로 이미지를 사용하면 이미지의 크기가 자동으로 조정되지만옵션을 사용하면 새 이미지가 이미지의 크기를 조정하지 않습니다.

참고 : 나는 실제로 이것을하지 않았으므로 꼬임을 풀 필요가 있습니다.

+0

안녕하세요 skorks, 의견을 보내 주셔서 감사합니다. 나는 이미 이것을 시도했다. 이 접근 방식의 문제점은 텍스트가 둘 이상의 페이지로 커지면 다음 페이지에는 배경이 전혀 없을 것입니다. 내 응용 프로그램에서는 데이터베이스에서 검색된 텍스트를 추가해야합니다. 텍스트가 길어서 한 페이지에 맞지 않으면 새우가 자동으로 새 페이지를 만들고 나머지 텍스트를 페이지에 추가합니다. 그리고 새우가 만든 페이지에는 배경이 없으며 단순히 흰색이됩니다. 새우 자동 생성 페이지의 배경 이미지를 넣는 방법이 있습니까? 다시 한번 감사합니다. – safalmj

+0

새우를 사용하지 않는 방법으로 이미지를 확대하고 새 페이지에 배경을 추가하려면 새우를 패치해야합니다. 나는 내가 생각하기에 대답을 업데이트 할 것이고, 나는 실제로 그것을하지 않았 음을 생각하면, 꼬임을 해결해야 할 것이다. – skorks

+0

고맙습니다 skorks. 당신의 힌트가 효과가있었습니다. 그러나 나는 많은 꼬임에 맞춰야했지만 마침내 탈출구를 만들었습니다. 너 락. 건배. – safalmj