ruby-on-rails ruby pdf-generation fpdi

ruby on rails - ¿Cómo editar o escribir en PDF existente con Ruby?



ruby-on-rails pdf-generation (6)

Tengo un par de archivos de plantilla PDF con contenido complejo y varias regiones / áreas en blanco en ellos. Necesito poder escribir texto en esas regiones en blanco y guardar los PDF resultantes en una carpeta.

Busqué en Google respuestas a esta pregunta con bastante intensidad, pero no encontré respuestas definitivas. Una de las mejores soluciones es PDF::Toolkit , pero requeriría la compra de Adobe Acrobat para agregar atributos reemplazables a los documentos PDF existentes.

El mundo de PHP ha sido bendecido con FPDI que se puede usar para simplemente abrir un archivo PDF y escribir / dibujar sobre el contenido existente. Hay un puerto de Ruby en esta biblioteca , pero el último compromiso para esto ocurrió a principios de 2009. Además, parece que el proyecto no es ampliamente utilizado y compatible.

La pregunta es: ¿Cuál es la mejor forma en Ruby de editar, escribir o dibujar en archivos PDF existentes?

Esta pregunta tampoco parece ser respondida aquí. Estas preguntas están relacionadas, pero no son lo mismo:


Dado que Prawn ha eliminado la característica de la plantilla (estaba llena de errores), la forma más sencilla que he encontrado es la siguiente:

  1. Utilice Prawn para generar un PDF con SOLO las partes dinámicas que desea agregar.
  2. Use PDF::Toolkit (que envuelve PDFtk ) para combinar el PDF de Prawn con el original.

Ejemplo aproximado

require ''prawn'' require ''pdf/toolkit'' template_file = ''some/dir/Awesome-Graphics.pdf'' prawn_file = ''temp.pdf'' output_file = ''output.pdf'' Prawn::Document.generate(prawn_file) do # Generate whatever you want here. text_box "This is some new text!", :at => [100, 300] end PDF::Toolkit.pdftk(prawn_file, "background", template_file, "output", output_file)


Definitivamente tienes que revisar Prawn gem, por lo que puedes generar cualquier archivo pdf personalizado. En realidad, puede utilizar gambas para escribir texto en archivos PDF existentes al tratar el PDF existente como una plantilla para su nuevo documento de Prawn.

Por ejemplo:

filename = "#{Prawn::DATADIR}/pdfs/multipage_template.pdf" Prawn::Document.generate("full_template.pdf", :template => filename) do text "THis content is written on the first page of the template", :align => :center end

Esto escribirá el texto en la primera página del pdf antiguo.

Vea más aquí: http://prawn.majesticseacreature.com/manual.pdf


Lo mejor que se me ocurre es Rails-latex , no le permite editar archivos PDF existentes, pero le permitiría configurar la plantilla * .tex.erb que puede modificar y compilar dinámicamente en formato PDF (junto con dvi y varios otros).


Recomiendo Prawn para generar PDF y luego utilizar combine_pdf para combinar dos PDF generados en uno. Lo uso así y funciona bien.

Breve ejemplo (de README) de cómo combinar dos archivos PDF:

company_logo = CombinePDF.load("company_logo.pdf").pages[0] pdf = CombinePDF.load "content_file.pdf" pdf.pages.each { |page| page << company_logo } # notice the << operator is on a page and not a PDF object. pdf.save "content_with_logo.pdf"


Según mi investigación, Prawn es una de las gemas gratuitas y mejores que he encontrado. La funcionalidad de la plantilla no funciona en una versión posterior. La última versión que pude encontrar para trabajar con plantillas es 1.0.0.rc2 - 1 de marzo de 2013. No se pudo encontrar ninguna versión posterior que funcione con plantillas. Así que tenga en cuenta si está utilizando versiones posteriores a esta. Consulte el hilo de abajo para más información.

https://groups.google.com/forum/#!searchin/prawn-ruby/prawn $ 20templates / prawn-ruby / RYGPImNcR0I / 7mxtnrEDHeQJ

PDFtk es otra herramienta capaz para la manipulación de PDF y para trabajar con plantillas. Pero menciona los siguientes puntos,

  • Esta biblioteca es gratuita para uso personal, pero requiere una licencia si se usa en producción
  • Esta es una herramienta de línea de comandos no ruby

Para obtener más información, consulte el siguiente enlace http://adamalbrecht.com/2014/01/31/pre-filling-pdf-form-templates-in-ruby-on-rails-with-pdftk/


PDFLib parece hacer lo que quieres y tiene enlaces de rubí.