2008-09-17 11 views
10

tengo una serie de archivos PDF de forma secuencial llamado así:¿Es posible combinar una serie de archivos PDF en uno usando Ruby?

  • 01_foo.pdf
  • 02_bar.pdf
  • 03_baz.pdf
  • etc.

El uso de Ruby, que es posible combinar estos en un gran PDF mientras los mantiene en secuencia? No me importa instalar gemas necesarias para hacer el trabajo.

Si esto no es posible en Ruby, ¿qué tal otro idioma? Sin componentes comerciales, si es posible.


Actualización:Jason Navarrete's suggestion conducen a la solución perfecta:

Coloque los archivos PDF que necesitan ser combinados en un directorio junto con pdftk (o asegurarse de pdftk está en su PATH), a continuación, ejecutar el siguiente secuencia de comandos:

pdfs = Dir["[0-9][0-9]_*"].sort.join(" ") 
`pdftk #{pdfs} output combined.pdf` 

O incluso que podía hacerlo como una sola línea desde la línea de comandos:

ruby -e '`pdftk #{Dir["[0-9][0-9]_*"].sort.join(" ")} output combined.pdf`' 

Gran sugerencia Jason, la solución perfecta, gracias. Dale un voto arriba personas.

Respuesta

14

Un Ruby-Talk posterior sugiere utilizar el kit de herramientas pdftk fusionar los archivos PDF.

Debería ser relativamente sencillo llamar al pdftk como un proceso externo y hacer que se encargue de la fusión. PDF :: Writer puede ser exagerado porque todo lo que desea lograr es un apéndice simple.

+0

Gracias, nunca antes me había encontrado con pdftk. ¡Qué gran herramienta! –

0

No creo que Ruby tenga herramientas para eso. Puede consultar ImageMagick y Cairo. ImageMagick se puede usar para unir varias imágenes/documentos, pero no estoy seguro del caso de PDF.

Por otra parte, seguramente existen herramientas de Windows (comerciales) para hacer este tipo de cosas.

Yo uso el Cairo yo mismo para generando PDF's. Si los PDF provienen de usted, tal vez esa sería una solución (admite varias páginas). ¡Buena suerte!

+1

Gracias por las sugerencias. De hecho, utilizamos una variedad de herramientas para crear e incluso combinar archivos PDF. Sin embargo, uno no puede automatizarlos fácilmente, especialmente la herramienta que hace la combinación, de ahí el deseo de guionarla en Ruby (u otro idioma). –

2

Puede hacer esto convirtiendo a PostScript y viceversa. Los archivos PostScript se pueden concatenar trivialmente. Por ejemplo, aquí es un script bash que utiliza las herramientas de Ghostscript ps2pdf y pdf2ps:

 
#!/bin/bash 
for file in 01_foo.pdf 02_bar.pdf 03_baz.pdf; do 
    pdf2ps $file - >> temp.ps 
done 

ps2pdf temp.ps output.pdf 
rm temp.ps 

No estoy familiarizado con Ruby, pero no hay casi seguro que alguna función (que podría llamarse system() (sólo una suposición)) que se invocar una línea de comando dada.

0

Sugiero que miremos el código de PDFCreator (VB, si no me equivoco, pero eso no debería importar ya que solo estarías implementando un código similar en otro idioma), que usa GhostScript (licencia GNU) O simplemente cavar directamente en GhostScript; también hay una capa de fachada disponible llamada GhostPDF, que puede hacer lo que quieras.

Si puede controlar GhostScript con VB, puede hacerlo con C, lo que significa que puede hacerlo con Ruby.

Ruby también tiene IO.popen, que le permite llamar a programas externos que pueden hacer esto.

-1

Cualquier código de Ruby para hacer esto en una aplicación real probablemente sea muy lento. Intentaría buscar herramientas de Unix para hacer el trabajo. Esta es una de las bellezas del uso de Mac OS X, tiene capacidades de PDF muy rápidas incorporadas. La segunda mejor opción es probablemente una herramienta de Unix.

En realidad, he tenido cierto éxito con rtex. Si miras here encontrarás información al respecto. Es mucho más rápido que cualquier biblioteca de Ruby que he usado y estoy bastante seguro de que el látex tiene una función para traer datos PDF de otras fuentes.

2

Si ha Ghostscript a la plataforma, desembolsar y ejecutar este comando:

gs -q -dBATCH -dNOPAUSE -sDEVICE = pdfwrite -sOutputFile = finished.pdf < sus archivos PDF de origen >

+0

La opción -sPAPERSIZE para gs es útil para conocer. Por ejemplo -sPAPERSIZE = a4 o -sPAPERSIZE = letter. –

2

Probé la solución pdftk y tuve problemas tanto en SnowLeopard como en Tiger. Instalar en Tiger realmente causó estragos en mi sistema y me dejó incapaz de ejecutar script/servidor, afortunadamente es una máquina retirada del desarrollo web.

Posteriormente se encontró otra opción: - joinPDF. Fue una instalación absolutamente indolora y rápida y funciona perfectamente.

También probé GhostScript y falló miserablemente (no pude leer las fuentes y terminé con archivos PDF que solo tenían imágenes).

Pero si está buscando una solución a este problema, puede intentar joinPDF.

Cuestiones relacionadas