Pregunta

Tengo una serie de archivos PDF nombrados secuencialmente así:

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

Usando Ruby, ¿es posible combinarlos en un PDF grande mientras se mantienen en secuencia?No me importa instalar las gemas necesarias para hacer el trabajo.

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


Actualizar: La sugerencia de Jason Navarrete conducir a la solución perfecta:

Coloque los archivos PDF que deben combinarse en un directorio junto con pdftk (o asegúrese de que pdftk esté en su RUTA), luego ejecute el siguiente script:

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

O incluso podrí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, solución perfecta, gracias. Denle un voto a favor, gente..

¿Fue útil?

Solución

A Ruby-Hablar publicación sugiere usar el pdftk kit de herramientas para fusionar los archivos PDF.

Debería ser relativamente sencillo llamar pdftk como un proceso externo y hacer que maneje la fusión. PDF::Escritor puede ser excesivo porque todo lo que busca lograr es un simple agregado.

Otros consejos

Puede hacer esto convirtiendo a PostScript y viceversa.Los archivos PostScript se pueden concatenar de forma trivial.Por ejemplo, aquí hay un script Bash que utiliza las herramientas 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 es casi seguro que hay alguna función (podría llamarse system() (sólo una suposición)) que invocará una línea de comando determinada.

Si tiene Ghostscript en su plataforma, desembolse y ejecute este comando:

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

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

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

También probé GhostScript y falló estrepitosamente (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 probar joinPDF.

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

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

Yo mismo uso El Cairo para generando PDF.Si los PDF provienen de usted, tal vez esa sea una solución (admite varias páginas).¡Buena suerte!

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

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

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

Cualquier código Ruby para hacer esto en una aplicación real probablemente será tremendamente lento.Intentaría buscar herramientas Unix para hacer el trabajo.Esta es una de las ventajas de usar Mac OS X, tiene capacidades PDF muy rápidas integradas.La mejor opción es probablemente una herramienta Unix.

De hecho, he tenido cierto éxito con rtex.Si miras aquí encontrarás alguna información al respecto.Es mucho más rápido que cualquier biblioteca Ruby que haya usado y estoy bastante seguro de que Latex tiene una función para incorporar datos PDF de otras fuentes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top