Ruby on Rails PDF Stamper / iText - PullRequest
       28

Ruby on Rails PDF Stamper / iText

0 голосов
/ 05 января 2012

Я много занимался поиском и не могу найти решение для того, чтобы заставить PDF-штамп работать в моем приложении rails.Из учебников видно, что я пишу метод в модели?Я написал простое приложение с двумя полями: nameLast и nameFirst.Все, что я хочу сделать, это записать их в PDF-файл, который содержит поля для информации о пользователе.Два поля оказались FirstName и LastName, поэтому идеальное время для использования PDF-штемпеля, верно?Я просто хочу взять пользовательские данные из приложения rails, а затем иметь возможность нажать кнопку и сгенерировать PDF.Вот метод, который я использую в моей модели.

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

Это было явно взято из учебника, который я не должен правильно понимать.На самом деле я могу заставить это работать в Java довольно легко, но я не хочу использовать jRuby.Я использую RJB, который работает нормально.Я просто не думаю, что правильно понимаю, что должно произойти, чтобы это заработало.Любая помощь с благодарностью!

Ответы [ 2 ]

4 голосов
/ 01 ноября 2012

Я автор гема pdf-stamper.

Метод save_as сохраняет созданный PDF-файл в файловую систему. Если вы создаете приложение на Rails, я не думаю, что вы этого хотите.

Полагаю, по вашему вопросу вы хотите отправить «штампованный» PDF обратно в браузер. Если это так, вы должны вызвать to_s для созданного PDF и затем передать результат этого в метод 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. Функция, которую вы хотели, была просто недокументированной, отсюда и ваша путаница. Я должен это исправить.

0 голосов
/ 01 февраля 2012

Я делал то же самое с использованием xfdf в качестве исходных данных для полей, у меня работал следующий код, может быть, он будет вам полезен:

  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
...