¿Cómo editar o escribir en PDF existente con Ruby?

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:

  • Gema de gambas: Cómo crear el .pdf a partir de un archivo * existente * (.xls)
  • marca de agua pdf existente con Ruby
  • Biblioteca de Ruby para la manipulación de PDF existentes.
  • ¿Cómo reemplazar una palabra en un PDF existente usando Ruby Prawn?

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

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) 

Recomiendo gamba 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" 

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 comstackr dinámicamente en formato PDF (junto con dvi y varios otros).

PDFLib parece hacer lo que quieres y tiene enlaces de Ruby.

Según mi investigación, Prawn es una de las gems 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. Revise 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/

Intereting Posts