2010-04-26 25 views

Respuesta

8

Esto lo hará:

PDF::Reader para contar el número de páginas del archivo.

Prawn para crear un nuevo documento PDF usando cada página del pdf de entrada como plantilla.

require 'prawn' 
require 'pdf-reader' 

input_filename = 'input.pdf' 
output_filename = 'output.pdf' 

page_count = PDF::Reader.new(input_filename).page_count 

Prawn::Document.generate(output_filename, :skip_page_creation => true) do |pdf| 

    page_count.times do |num| 
    pdf.start_new_page(:template => input_filename, :template_page => num+1) 
    pdf.text('WATERMARK') 
    end 

end 

Sin embargo, en mis pruebas, el tamaño del archivo de salida era enorme, con la última versión de la gema de la gamba (0,12), pero después de señalar mi Gemfile en la rama principal en github, todo funcionó bien.

+0

Puede pasar la opción ': template' a' Prawn :: Document' y luego simplemente recorrer las páginas de esa manera. Eso mantendrá el tamaño del archivo de salida mucho más cerca del tamaño del archivo de entrada. – siannopollo

+0

Gamba ya no es compatible con la edición/combinación de dos archivos PDF en uno. Verifique la respuesta de @Myst para obtener una solución actualizada. –

-1

Use Ruport.

primer resultado para Googling ruby pdf watermark.

+0

Duh ... sólo muestra los límites de Google. Estoy buscando lo mismo, y Ruport no es así. – John

+0

'+ ruby ​​+ pdf + watermark -ruport' :-) –

+0

Ruport usa PDF :: Writer. PDF :: Writer solo crea archivos PDF. No vayas. –

1

Echa un vistazo a Gambas (http://github.com/sandal/prawn) por solo rubí y Prawnto (http://github.com/thorny-sun/prawnto) por Ruby on Rails.

Probablemente desee utilizar la funcionalidad de incrustación de imágenes o la funcionalidad de la imagen de fondo.

He aquí un ejemplo del uso de una imagen de fondo http://cracklabs.com/prawnto/code/prawn_demos/source/general/background

+0

Gambón solo puede incrustar imágenes en un pdf fresco creado con gambas, no en uno existente ... por lo que no funciona para mí. – Mike

+0

ah, se perdió la parte * existente * en su publicación. Lo siento por eso. No creo que exista, a menos que lo convierta en una imagen y luego lo filtre. –

+0

En realidad, parece que Prawn puede editar un PDF existente si usa ese PDF como plantilla: http://groups.google.com/group/prawn-ruby/browse_thread/thread/a8dd9bb83d2c2abd?pli = 1 y https://github.com/yob/prawn/tree/templates_2010. Personalmente no los he usado, ¿pero la información parece algo reciente? –

3

Otra opción es utilizar PDFTK. Se puede usar para agregar una marca de agua y crear un nuevo PDF. Tal vez gambas hará lo mismo con sus plantillas.

pdftk in.pdf background arecibo.pdf output wmark1.pdf

algo más de información: http://rhodesmill.org/brandon/2009/pdf-watermark-margins/

Hay una gema de rubíes envoltorio llamada active_pdftk que apoya backgrounding, por lo que no tiene que hacer los comandos de la cáscara sí mismo.

1

gamba no es compatible con las plantillas más ...

Prueba el combine_pdf gem.

Puede combinar, marca de agua, número de página y agregar texto simple a los archivos PDF existentes (incluida la creación de una tabla de contenidos simple sin enlaces PDF).

Es una biblioteca PDF muy simple y básica, escrita en puro Ruby sin dependencias.

Este ejemplo puede adaptarse a su situación (que es desde el archivo readme):

# load the logo as a pdf page 
company_logo = CombinePDF.load("company_logo.pdf").pages[0] 

# load the content file 
pdf = CombinePDF.load "content_file.pdf" 

# inject the logo to each page in the content 
pdf.pages.each {|page| page << company_logo} 

# save to a new file, with the logo. 
pdf.save "content_with_logo.pdf" 
Cuestiones relacionadas