¿Cómo duplico páginas dentro de archivos PDF automáticamente?

10

Tengo muchos archivos PDF con 1 a 4 páginas cada uno. Necesito una solución que genere automáticamente un nuevo archivo para cada uno de estos archivos. Los nuevos archivos deben contener el contenido de los archivos originales dos veces (es decir, las páginas 1 hasta el final, seguidas de las mismas páginas en el mismo orden nuevamente).

¿Cómo logro esto?

Bagazo
fuente
3
Por favor aclare, no podemos leer su mente. Que factura ¿Desea generar un nuevo archivo pdf que contenga cada página del original dos veces? ¿En qué orden? ¿Desea la página 1a seguida de la página 1b o quiere las 4 páginas primero y luego las cuatro páginas nuevamente? ¿Qué sistema operativo estás usando? ¿Qué herramienta utilizas para crear los archivos PDF?
terdon

Respuestas:

15

Solución para Windows que usa PDFtk (que parece estar usando según sus etiquetas):

Esto dará como resultado un PDF con páginas 1-end seguido de 1-end nuevamente:

pdftk in.pdf cat 1-end 1-end output out.pdf

Si desea que cada página se duplique (como en 1,1,2,2, ...), use el siguiente archivo por lotes:

@echo off
set pages=
setlocal enabledelayedexpansion
for /f "tokens=2" %%a in ('pdftk in.pdf dump_data ^| find /i "NumberOfPages"') do for /l %%b in (1,1,%%a) do set pages=!pages! %%b %%b
pdftk in.pdf cat!pages! output out.pdf
Karan
fuente
Muchas gracias: "pdftk in.pdf cat 1-end 1-end output out.pdf" hace exactamente lo que necesito. Lo único que falta es un bucle que toma todos los archivos pdf de un directorio y crea todos los archivos nuevos. Muchas gracias por ayudarme nuevamente. Estaré agradecido e invitaré a mi esposa a una cena con el tiempo ahorrado ;-)))
Marc
@Marc: el bucle se logra fácilmente. Simplemente vaya al directorio con los archivos PDF y en el símbolo del sistema escriba for %a in (*.pdf) do @pdftk "%~a" cat 1-end 1-end output "%~na (Duplicated)%~xa". Para cada in.pdf (el nombre puede ser cualquier cosa), esto dará como resultado un correspondiente en (Duplicado) .pdf . ¡Disfruta de tu cena y no olvides aceptar la respuesta (haz clic en la marca de verificación verde a la izquierda) si te ayudó!
Karan
infinete gracias a ti - me has salvado la vida! Estoy muy muy agradecido por tu ayuda!
Marc
2

Podría darle una mejor solución si responde las preguntas en mi comentario, pero por el bien de su esposa, aquí hay un par de sugerencias.

ImageMagick es una herramienta de línea de comandos multiplataforma para la manipulación de imágenes. Una vez que lo instales, deberías poder usar su convertherramienta para hacer lo que quieras. Los detalles dependen de su sistema operativo. Supongo que quiere dos copias del archivo completo, no que cada página se duplique.

  1. Linux / OSX / Unix, etc.

    for n in *pdf; do convert -density 150 "$n" "$n" "$n"; done
    

    Esto sobrescribirá los archivos existentes , es posible que desee hacer una copia de seguridad primero.

  2. Windows Esto puede estar un poco mal, no uso Windows, así que no puedo probarlo, pero la idea general debería ser algo como esto

    for %f in (*.pdf) do (convert.exe %f %f %f)
    
terdon
fuente
Su forbucle no tiene el doney $nprobablemente debería ser citado. Tal vez me falta cómo convertfunciona, pero ¿qué hace convertcuando pasa tres veces el mismo archivo? No puedo probarlo ahora.
slhck
Gracias @slhck, tienes razón en ambos aspectos como de costumbre. El formato de conversión general es convert infile1 infile2 ... infileN outfile. Entonces, si le pasa el mismo archivo tres veces, lo tomará dos veces como entrada y luego escribirá en el mismo archivo como salida. Que uno me hice la prueba :).
terdon
Oh, genial, entonces también aprendí algo :)
slhck
Suena bien para mí. Muchas gracias. El comentario anterior: le di a ese el primer intento y funcionó perfectamente, solo el bucle correcto para el que todavía estoy buscando ... ¿podrían ayudarme de nuevo? ¡Muchas gracias de antemano!
Marc
@ Marc lo siento, no estoy seguro de lo que quieres decir. Cual comentario? Cual bucle ¿Las ventanas o la fiesta?
terdon
2

Si desea que cada página se duplique (como en 1,1,2,2, ...) en Linux, este script lo hará:

#!/bin/bash
INPUTFILE=$*
PAGENUM=`pdftk ${INPUTFILE} dump_data | grep NumberOfPages | cut -d : -f 2  | cut -d " " -f 2`
PAGES=`seq 1 ${PAGENUM}`
DUPAGES=`for i in ${PAGES} ; do echo $i $i | tr "\n" " " ; done`
OUTPUT=`basename ${INPUTFILE} .pdf`.dup.pdf
pdftk ${INPUTFILE} cat ${DUPAGES} output ${OUTPUT}
Seegras
fuente
0

Si tiene pdftk no instalado, pero poppler-utils, utilice este comando:

for f in *
do
    pdfjoin $f $f
done

Esto es especialmente relevante en Fedora 21, donde pdftk ya no está disponible en el repositorio.

Constantin
fuente
0

Uso simple pdfunite. Esto probablemente se puede simplificar aún más con más conocimiento de scripts.

Tenga en cuenta que el último argumento es el archivo resultante . Si olvida eso, este archivo se sobrescribirá.

pdfunite 1.pdf 2.pdf 3.pdf 4.pdf result.pdf
pdfunite result.pdf result.pdf result.pdf 3-times-result.pdf
keiki
fuente