Comment distiller / pixelliser un PDF sous Linux


13

Nous avons une imprimante à notre bureau qui imprime les fichiers PDF à partir d'une clé USB. Il imprime la plupart des fichiers, mais il a des problèmes avec certains, en particulier ceux générés avec Latex. Certains fichiers PDF refusent tout simplement d'imprimer, certains fichiers PDF s'impriment avec une police de type messagerie et d'autres, très bien, à l'exception des équations.

Je cherche un moyen de "distiller" les PDF dans un format sûr pour imprimer. Soit en simplifiant / normalisant le PDF au point que n'importe quel moteur de rendu le rendra correctement, soit en faisant simplement de chaque page une image raster de 600 dpi dans le PDF. (Je pourrais diviser le PDF en images raster individuelles et les combiner manuellement, mais je veux quelque chose de scriptable.)

La taille du fichier de sortie n'a pas d'importance, tant qu'il est sûr d'imprimer, a un format de papier A4 (ou l'original) et une résolution de 300 ~ 600 dpi.


Peut-être que pdf2ps pourrait aider si l'imprimante prend en charge le post-scriptum.
frlan

C'est censé être une imprimante PostScript, mais ce support est encore pire que celui du PDF (et il n'imprimera pas PS à partir d'une clé USB).
Sampo

Réponses:


22

Après avoir essayé sans succès certaines options pour rendre les polices sous forme de contours (y compris cette question et pstoedit), j'ai trouvé un moyen de convertir facilement le PDF en forme tramée à l'aide d'ImageMagick:

convert -density 600 +antialias input.pdf output.pdf

Cela crée un PDF rendu à 600 dpi, avec les antialias désactivés (inutile à cette résolution).

Les fichiers de sortie sont énormes (~ 30 Mo pour un document de 8 pages) et extrêmement lents à imprimer, mais devraient fonctionner tant que l'imprimante dispose de suffisamment de mémoire pour rendre le contenu.


1
Oui! J'ai utilisé cela pour aplatir les couches de mon PDF avec beaucoup de succès. + l'antialias n'était pas nécessaire car nous n'avions que des images (cela ne faisait aucune différence) et j'ai baissé la résolution à 150 car cela semblait assez bon pour l'archivage sans prendre autant de place. Merci!
mlissner

2
Notez que convertcela ne préserve pas le contenu des formulaires que vous pourriez avoir remplis. (Je voulais pixelliser un PDF afin de m'assurer que le contenu du formulaire était identique partout, en particulier qu'il sera affiché par chaque visionneur PDF en premier lieu.) Afin de préserver le contenu du formulaire, utilisez evince(ou autre application que vous avez utilisée pour remplir le formulaire) pour imprimer le document "dans un fichier" - ceci est un autre PDF où le contenu du formulaire est devenu une partie du texte normal. Ensuite, vous pouvez toujours pixelliser ce nouveau PDF, selon vos besoins.
balu

Notez que cela active l'anticrénelage ( +antialias) plutôt que de le désactiver ( -antialias).
xiii1408

Non, +antialiasdésactive l'anticrénelage: imagemagick.org/script/command-line-options.php?#antialias
Sampo

1
J'ai eu besoin de modifier imagemagick ( stackoverflow.com/questions/42928765/… ) pour que cela fonctionne.
SteveSong

1

D'après mon expérience, utiliser imagemagick n'est pas stable avec des résolutions élevées et / ou de gros fichiers. De nombreuses imprimantes peuvent atteindre 1 200 ppp et plus, de sorte que le fichier tramé doit avoir une résolution similaire. Une meilleure solution consiste à utiliser pdf2djvu qui est plus rapide, plus robuste et crée même des fichiers avec une taille qui rivalise souvent avec le PDF d'origine à 1200 ou 2400 dpi. Ces fichiers peuvent être visualisés et imprimés en utilisant okular ou evince.

Exemple:

pdf2djvu -d 2400 file.pdf > rastered.djvu

1

Je pense que ma façon préférée de le faire est:

  1. Utilisez pdftoppm pour convertir le fichier PDF en une série d'images.

    $ pdftoppm source.pdf output -png

  2. Utilisez img2pdf pour créer un fichier pdf à partir de ces images.

    $ img2pdf * .png -o output.pdf

La bonne nouvelle est que vous pouvez créer un script bash pour automatiser l'ensemble du processus pour vous.

Voici un script bash qui distillera tous les fichiers pdf d'un répertoire et conservera les originaux dans un nouveau répertoire "originals".

#!/bin/bash

mkdir "originals";
for filename in ./*.pdf; do
    pdftoppm "$filename" output -png
    mv "$filename" ./originals
    img2pdf *.png "-o" "$filename"
    rm *.png
done

Crédits: img2pdf answer & pdftoppm answer & bash script help: 1 & 2

(Note latérale) Vous pouvez installer img2pdf en utilisant:

$ sudo apt install img2pdf


-1

Une autre alternative consiste à convertir en images via quelque chose comme

pdfimages

À partir de la page de manuel, "Pdfimages enregistre les images d'un fichier PDF (Portable Document Format) en tant que fichiers Portable Pixmap (PPM), Portable Bitmap (PBM) ou JPEG. Pdfimages lit le fichier PDF en format PDF, numérise une ou plusieurs pages, et écrit un fichier PPM, PBM ou JPEG pour chaque image, image-root-nnn.xxx, où nnn est le numéro de l'image et xxx est le type d'image (.ppm, .pbm, .jpg). "

Utilisez ensuite pdftk pour reconvertir en PDF https://www.pdflabs.com/docs/pdftk-cli-examples/

Enfin, imprimez ce fichier. De toute évidence, la question clé est de savoir comment l'écrire.

Vous pouvez automatiser cela via une simple page Web pour les utilisateurs. Enfin, ils impriment le fichier converti et vous devriez avoir une impression plus performante et fonctionnelle?


3
pdfimages extrait des images tramées incorporées à partir de fichiers PDF, ne pixellise pas le texte ou les graphiques vectoriels.
Sampo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.