2012-01-04 2 views
0

필자는 많은 검색을 해본 결과 내 레일 애플리케이션에서 PDF 스탬퍼를 사용할 수있는 솔루션을 찾을 수 없습니다. 자습서에서 모델에 메서드를 작성한 것처럼 보입니까? nameLast와 nameFirst의 두 필드로 구성된 간단한 앱을 작성했습니다. 필자가 원하는 것은 사용자 정보 필드가 들어있는 PDF에이 내용을 쓰는 것뿐입니다. 두 필드는 성 (FirstName)과 성 (LastName)이되므로 PDF 스탬퍼를 올바르게 사용할 수있는 완벽한 시간입니까? 난 그냥 레일 응용 프로그램에서 사용자 데이터를 가지고 싶어 다음 버튼을 누르고 PDF를 생성 할 수 있어야합니다. 여기 내 모델에있는 방법이 있습니다.Ruby on Rails PDF Stamper/iText

def savePDF 
    pdf = PDF::Stamper.new("sample.pdf") 
      pdf.text :nameFirst, "Jason" 
       pdf.text :nameLast, "Yates" 
       pdf.save_as "my_output.pdf" 
    end 

이것은 제대로 이해하지 않아야하는 튜토리얼에서 분명히 취해진 것입니다. 실제로 자바에서이 작업을 쉽게 할 수 있지만 jRuby를 사용하고 싶지는 않습니다. 나는 잘 작동하는 rjb를 사용하고 있습니다. 나는이 일을하기 위해 일어날 일이 무엇인지 제대로 이해하고 있다고 생각하지 않는다. 어떤 도움이라도 대단히 감사합니다!

답변

0
내가 필드의 데이터를, 다음 코드는 나를 위해 일한 소스로 XFDF의 사용과 같은 일을했다

, 어쩌면 aswell 당신에게 도움이 될 것입니다 :

pdfreader = Rjb::import('com.itextpdf.text.pdf.PdfReader') 
    pdfstamper = Rjb::import('com.itextpdf.text.pdf.PdfStamper') 
    pdffields = Rjb::import('com.itextpdf.text.pdf.AcroFields') 
    xfdfreader = Rjb::import('com.itextpdf.text.pdf.XfdfReader') 


    pdf = pdfreader.new("#{Rails.root}/public/out/temp/form1.pdf", nil) 
    xfdf = xfdfreader.new(f) 

    stamp = pdfstamper.new(pdf, filestream.new("/tmp/text#{i}.pdf")) 
    pdffields = stamp.getAcroFields() 
    pdffields.setFields(xfdf) 
    stamp.close 
+0

stamp = pdfstamper.new (pdf, filestream.new ("/ tmp/text.pdf")) – rui

3

나는의 저자 해요 pdf-stamper gem.

save_as 메서드는 생성 된 PDF를 파일 시스템에 저장합니다. Rails 애플리케이션을 제작하고 있다면, 나는 그것이 당신이 원하는 것이라고 생각하지 않는다.

"스탬프 찍은"PDF를 다시 브라우저로 보내고 싶습니다. 이 경우 생성 된 PDF에서 to_s으로 전화 한 다음 그 출력을 Rails send_data 메소드로 전달해야합니다.

컨트롤러 (모델 아님)에서 이와 같은 코드를 추가하고 싶습니다.

def send 
    pdf = PDF::Stamper.new("sample.pdf") 
    pdf.text :nameFirst, "Jason" 
    pdf.text :nameLast, "Yates" 
    send_data(pdf.to_s, :filename => "output.pdf", :type => "application/pdf",:disposition => "inline") 
end  

여기의 문제는 실제로 pdf-stamper gem에 대한 문서입니다. 당신이 원했던 기능이 문서화되지 않았기 때문에 거기에 혼란이있었습니다. 나는 그것을 고쳐야 할 것이다.