web-dev-qa-db-fra.com

Enregistrez chaque PDF fichier d'un répertoire sous un autre PDF (opération similaire à l'impression d'un PDF sous forme de PDF)

Considérons la procédure suivante:

1) Ouvrez un fichier PDF à l'aide de la visionneuse de documents (Ubuntu).

2) Goto File

3) Aller à imprimer

4) Choisissez "Imprimer en tant que fichier" et cochez la case "pdf"

Oui, j'imprime un fichier PDF comme fichier PDF. Je dois le faire pour une grande collection de fichiers. Je voudrais faire ceci en exécutant un script au terminal.

Vous pensez peut-être que cette procédure n’a aucun sens, mais c’est en fait le seul moyen sûr que j’ai trouvé de régler le problème considéré ici . Cette question de StackOverflow montre un problème avec les fichiers PDF que le marqueur EOF n’a pas été trouvé. Lorsque je fais la procédure décrite ci-dessus, je suis en mesure de résoudre ce problème [Ce n'est pas la solution présentée dans le site StackOverflow, qui ne fonctionne pas ici.]

Je voudrais ceci automatiquement avec tous les fichiers qui présentent ce problème.

Je sais que je devrais construire un script (.sh) pour cela, mais je ne sais pas comment procéder.

Un exemple du fichier PDF (1) avec des problèmes est ici

Le fichier PDF corrigé (2) est ici

La seule différence entre eux est que j'ai ouvert le premier en utilisant "Ubuntu Document Viewer", je suis allé dans "Fichier", "Imprimer", "Imprimer dans un fichier", "Sortie = pdf".

Je veux faire cela automatiquement.

EDIT:

Je ne veux PAS fusionner les fichiers.

1
DanielTheRocketMan

Assurez-vous que cups-pdf est installé et ajouté en tant qu’imprimante. Notez le nom de l'imprimante pdf. (Facultatif) Éditez /etc/cups/cups-pdf.conf: supprimez le commentaire et changez la ligne où il est dit #Out /var/spool/cups-pdf/${USER} dans le répertoire de sortie souhaité.

Puis redémarrez CUPS: Sudo systemctl restart cups

Maintenant, pour imprimer, faites:

SOURCEDIR="/path/to/source/pdfs"
for i in "$SOURCEDIR"
do
    lpr -P <pdf printer name> "$i"
done

Maintenant, copiez les fichiers du répertoire de sortie par défaut vers l'emplacement souhaité, si vous n'avez pas édité cups-pdf.conf

Installez poppler-utils et exécutez pdfunite input1.pdf input2.pdf input3.pdf output.pdf.

1
spacelander

Vous pouvez obtenir ce que vous voulez le plus facilement avec l’aide de Ghostscript. Je l'ai testé avec succès avec la version 9.26 de Ghostscript:

gs                  \
  -o out.pdf        \
  -sDEVICE=pdfwrite \
   in.pdf

Je dois avouer que je ne comprends pas vraiment votre problème avec le marqueur EOF dans le non modifié exemple de fichier ici , car je vois clairement que ce marqueur EOF est présent.

Cependant, je vois un problème supplémentaire qui apparaît dans votre 'corrigé' exemple de fichier here : celui-ci utilise désormais un format de page A4 (595 x 842 pts) avec de grandes marges blanches, alors que votre fichier non modifié comporte de petites marges et un format de page de 362 x 558 pts (ce qui correspond à moins de la moitié du format A4! )

Ma méthode présente l'avantage de préserver les formats de page d'origine.

Pour l'appliquer à tous les fichiers PDF du répertoire actuel, y compris tous les sous-répertoires, utilisez la commande suivante:

find . -name "*.pdf" -type f | while read line; do
    gs -o mod-${line} -sDEVICE=pdfwrite "${line}"
done
1
Kurt Pfeifle