2010-06-04 24 views
9

Me gustaría tomar un pdf y convertirlo en imágenes ... cada página en formato PDF se convierte en una imagen separada.Convierta .pdf en imágenes usando RMagick & Ruby

Aquí hay una publicación similar: Convert a .doc or .pdf to an image and display a thumbnail in Ruby? Pero no cubre cómo hacer imágenes separadas para cada página.

+2

En el título se dice .doc, pero en su pregunta que usted dice .pdf . ¿Cuál es? –

+0

oops ... sí, quiero decir .pdf – tybro0103

Respuesta

19

ImageMagick puede hacerlo con archivos PDF. Presumiblemente RMagick puede hacerlo también, pero no estoy familiarizado con él.

EDIT:

El código del poste se enlazó a:

require 'RMagick' 
pdf = Magick::ImageList.new("doc.pdf") 

pdf es un objeto ImageList, que de acuerdo con los delegados documentation muchos de sus métodos a Array. Debería poder iterar sobre pdf y llamar al write para escribir las imágenes individuales en los archivos.

+0

Sin duda ... Me pregunto si alguien tiene algún código de muestra. – tybro0103

2

Dado que no puedo encontrar una manera de manejar archivos PDF por página en RMagick, recomiendo primero dividir el PDF en páginas con el comando pdftk'sburst, y luego ocuparme de las páginas individuales en RMagick. Probablemente esto sea menos eficaz que una solución todo en uno, pero desafortunadamente no se presenta ninguna solución todo en uno.

También hay PDF::Toolkit para Ruby que se engancha en pdftk pero nunca lo he usado.

51

Usando RMagick sí mismo, puede crear imágenes para diferentes páginas.

require 'RMagick' 
pdf_file_name = "test.pdf" 
im = Magick::Image.read(pdf_file_name) 

encima le dará una matriz arr [], que tendrá una entrada para las páginas correspondientes. Qué si desea generar una imagen (jpg) de la quinta página, que puede hacer:

im[4].write(pdf_file_name + ".jpg") 

Pero esto va a cargar pdf completa, tan lento.

Alternativamente, si desea crear una imagen de la quinta página y no desea cargar el archivo PDF completo, hacer de la siguiente manera:

require 'RMagick' 
pdf_file_name = "test.pdf[5]" 
im = Magick::Image.read(pdf_file_name) 
im[0].write(pdf_file_name + ".jpg") 
+2

oh que podría darte más de un voto :) – baash05

+2

¡Gracias por darnos el consejo sobre el índice en el camino! Funciona muy bien, a pesar de que es un truco sucio;) – SciPhi

+2

Esto es genial, pero me quedé atrapado durante mucho tiempo sin saber que necesitaba "preparar instalar ghostscript" para que el lector devuelva más que una matriz vacía. Si usted es un usuario de OSX, es posible que no sea estándar para usted también. –

Cuestiones relacionadas