Comment dupliquer automatiquement des pages dans des fichiers PDF?

10

J'ai beaucoup de fichiers PDF de 1 à 4 pages chacun. J'ai besoin d'une solution qui génère automatiquement un nouveau fichier pour chacun de ces fichiers. Les nouveaux fichiers doivent contenir deux fois le contenu des fichiers d'origine (c'est-à-dire les pages 1 à la fin, puis les mêmes pages dans le même ordre).

Comment est-ce que j'accomplis ceci?

Marc
la source
3
Veuillez clarifier, nous ne pouvons pas lire dans vos pensées. Quelle facture? Vous souhaitez générer un nouveau fichier pdf contenant deux fois chaque page de l'original? Dans quel ordre? Voulez-vous la page 1a suivie de la page 1b ou voulez-vous d'abord les 4 pages, puis les quatre pages à nouveau? Quel système d'exploitation utilisez-vous? Quel outil utilisez-vous pour créer les fichiers PDF?
terdon

Réponses:

15

Solution pour Windows utilisant PDFtk (que vous semblez utiliser selon vos balises):

Cela se traduira par un PDF avec des pages 1-end suivi par 1-end à nouveau:

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

Si vous souhaitez que chaque page soit dupliquée ensemble (comme dans 1,1,2,2, ...), utilisez le fichier batch suivant:

@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
la source
Merci beaucoup: "pdftk in.pdf cat 1-end 1-end output out.pdf" fait exactement ce dont j'ai besoin. La seule chose qui manque est une boucle qui prend tous les fichiers pdf d'un répertoire et crée tous les nouveaux fichiers. Merci beaucoup pour m'aider à nouveau. Je serai reconnaissant et inviterai ma femme pour un dîner avec le gain de temps ;-)))
Marc
@Marc: La boucle est facile à réaliser. Accédez simplement au répertoire contenant les fichiers PDF et à l'invite de commande, tapez for %a in (*.pdf) do @pdftk "%~a" cat 1-end 1-end output "%~na (Duplicated)%~xa". Pour chaque in.pdf (le nom peut être n'importe quoi), cela se traduira par un correspondant dans (Duplicated) .pdf . Profitez de votre dîner et n'oubliez pas d'accepter la réponse (cliquez sur la coche verte à gauche) si cela vous a aidé!
Karan
infini grâce à vous - vous m'avez sauvé la vie! Je suis très très reconnaissant de votre aide!
Marc
2

Je pourrais vous donner une meilleure solution si vous répondez aux questions dans mon commentaire, mais pour le bien de votre femme, voici quelques suggestions.

ImageMagick est un outil en ligne de commande multiplateforme pour la manipulation d'images. Une fois que vous l'installez, vous devriez pouvoir utiliser son convertoutil pour faire ce que vous voulez. Les détails dépendent de votre système d'exploitation. Je suppose que vous voulez deux copies du fichier entier, pas chaque page doublée.

  1. Linux / OSX / Unix etc.

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

    Cela écrasera les fichiers existants , vous voudrez peut-être d'abord sauvegarder.

  2. Les fenêtres. Cela peut être légèrement faux, je n'utilise pas Windows, je ne peux donc pas le tester, mais l'idée générale devrait être quelque chose comme ça

    for %f in (*.pdf) do (convert.exe %f %f %f)
    
terdon
la source
Votre forboucle est manquante doneet $ndevrait probablement être citée. Peut-être que je manque le convertfonctionnement, mais que fait convert-on lorsque l'on passe trois fois le même fichier? Je ne peux pas le tester pour le moment.
slhck
Merci @slhck, comme d'habitude, vous avez raison sur les deux points. Le format de conversion général est convert infile1 infile2 ... infileN outfile. Donc, si vous lui passez trois fois le même fichier, il le prendra deux fois en entrée, puis écrit dans le même fichier en sortie. Celui - là , je l'ai fait tester :).
terdon
Oh, cool, alors j'ai aussi appris quelque chose :)
slhck
Ça me semble bien. Merci beaucoup. Le commentaire ci-dessus: j'ai donné celui-là du premier coup et cela a parfaitement fonctionné, seule la bonne boucle pour laquelle je suis encore en cours de recherche ... pourriez-vous m'aider à nouveau? Merci d'avance!
Marc
@Marc désolé, je ne sais pas ce que tu veux dire. Quel commentaire? Quelle boucle? Les fenêtres ou le bash?
terdon
2

Si vous voulez que chaque page soit dupliquée ensemble (comme dans 1,1,2,2, ...) sous Linux, ce script le fera:

#!/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
la source
0

Si vous n'avez pas installé pdftk, mais poppler-utils, utilisez cette commande:

for f in *
do
    pdfjoin $f $f
done

Cela est particulièrement pertinent sur Fedora 21, où pdftk n'est plus disponible dans le référentiel.

Constantin
la source
0

Utilisation simple pdfunite. Cela peut probablement être encore simplifié avec plus de connaissances en script.

Sachez que le dernier argument est le fichier résultant . Si vous oubliez cela, ce fichier sera écrasé.

pdfunite 1.pdf 2.pdf 3.pdf 4.pdf result.pdf
pdfunite result.pdf result.pdf result.pdf 3-times-result.pdf
keiki
la source