Remplacer les images vectorielles dans un PDF par des images raster

y a-t-il un moyen facile (scriptable) de convertir un PDF avec des images vectorielles en un PDF avec des images raster? En d'autres termes, je veux générer un PDF avec le même texte (non-rastérizé) mais avec chaque image vectorielle remplacée par une version rastérizée.

je lis parfois des PDF d'articles techniques sur mon Kindle, et j'ai trouvé que lire un PDF directement est frustrant. Heureusement, le d'Amazon conversion automatique de PDFs au Kindle format fait un bon travail de reflecting les portions de texte de la plupart des PDFs que j'ai essayé. Cependant, alors que les images raster semblent le faire à travers le processus de conversion fine, les images vectorielles sont horriblement mutilé. Ce serait génial si je pouvais facilement convertir un PDF de sorte que toutes ses images vectorielles ont été rasterized.

je suis intéressé par toutes les solutions possibles, mais une Linux - ou Windows-basé serait préférable.

24
demandé sur Michael Boyer 2012-03-07 23:19:47

8 réponses

j'ai eu un problème similaire, et l'ai résolu en utilisant L'outil de conversion ImageMagics ( http://www.imagemagick.org/script/index.php ). Qui vient avec linux et fonctionne bien sur Windows / Cygwin ou OS X

convert -density 300 largeVectorFileFromR.pdf out.pdf

Avec une densité de 300 vous de contrôle de la résolution (DPI).

le mauvais côté: le texte est rasterisé aussi, je comprends que Michael ne veut pas cela.

9
répondu vertikalist 2013-07-01 13:18:42

c'est un peu compliqué, mais vous avez demandé n'importe quelle solution possible. De plus, cette solution n'est pas automatisable.

1) Ouvrez le pdf avec les images vectorielles dans Inkscape . Sélectionnez ensuite l'image entière avec l'outil select ( F1 )

2) Si l'image vectorielle est composée de plus d'un svg, appuyez sur la touche Ctrl + G (objet --> Groupe)

3) Couper l'image groupée svg Ctrl + x

4) ouvrir une nouvelle fenêtre InkScape Ctrl + n et coller l'image Ctrl + v

5) choisissez Fichier --> exporter en Bitmap ( Shift + Ctrl + e ), peut-être vous voulez augmenter les dpi

6) revenir à la première fenêtre InkScape, Fichier --> Importer ( Ctrl + i ) et choisir la bitmap exportée

7) Placez le bitmap à l'endroit où l'image svg était

Enregistrer le fichier pdf et le vecteur d'image est remplacée par une image bitmap.

2
répondu Martin Grohmann 2013-02-07 08:08:01

Pitstop Pro v2 update 3 de Enfocus peut faire exactement cela. Il a une action appelée "Rasterize page content, keeping text" qui fonctionne assez bien. C'est un plugin à Adobe Acrobat donc il nécessite un peu plus mais est également disponible comme une solution de serveur.

2
répondu fltman 2014-11-14 11:45:09

après quelques jours de recherche d'une solution, basée sur" supprimer tout le texte du fichier PDF "et" comment ajouter une image sur un fichier pdf existant? " j'ai trouvé un (vilain) scriptable solution:

gs -o /tmp/onlytxt.pdf -sDEVICE=pdfwrite -dFILTERVECTOR -dFILTERIMAGE $INPUT_FILE && \
gs -o /tmp/graphics.pdf -sDEVICE=pdfwrite -dFILTERTEXT $INPUT_FILE && \
convert -density $DPI -quality 100 /tmp/graphics.pdf /tmp/graphics.png && \
convert -density $DPI -quality 100 /tmp/graphics.png /tmp/graphics.pdf && \
pdftk /tmp/graphics.pdf stamp /tmp/onlytxt.pdf output $OUTPUT_FILE && \
rm /tmp/onlytxt.pdf /tmp/graphics.pdf /tmp/graphics.png

si nous avons trois variables INPUT_FILE, OUTPUT_FILE, et DPI. Nous divisons le contenu textuel et graphique via Ghostscript, convertissons l'image graphique en une image matricielle (PNG) et rejoignons les deux en utilisant pdftk.

Je l'ai utilisé avec succès pour convertir des images vectorielles énormes pour une utilisation dans les documents scientifiques.

2
répondu Civ Lins 2017-12-20 16:35:56

Voici une façon de résoudre votre problème:

Étape 1: utilisez un convertisseur PDF-HTML en ligne, comme celui-ci ici:

http://www.idrsolutions.com/online-pdf-to-html5-converter /

cet outil convertit le PDF en un ensemble d'images et de textes superposés. Les images vectorielles devraient être converties en raster à ce point.

Étape 2: convertir le HTML+images de nouveau en PDF:

http://pdfcrowd.com/#convert_by_upload+avec_options

le PDF résultant aura toutes les images vectorielles rasterized, et tout le texte restera texte, de sorte que vous pouvez sélectionner, copier, etc.

1
répondu Hari 2013-02-07 13:46:27

j'ai utilisé ce qui suit:

gswin32c -o "%2" -dFirstPage=1 -dLastPage=1 -sDEVICE=pngalpha -r72x72 -dUseCropBox -dFitPage "%1" -dBATCH -dNOPAUSE

%1 est le fichier d'entrée et %2 est la sortie. Cela peut être utilisé avec LaTeX, Le PNG généré a le même rapport et la taille de la page que le PDF original de sorte que la position relative de l'image ne changera pas.

notez que sous Linux, vous devrez peut-être utiliser gs plutôt que gswin32c .

vous pouvez également définir la gamme de page et ensuite imprimer les pages back to PDF. L'inconvénient est que le texte est pixellisée.

0
répondu the swine 2016-11-15 16:05:23

convertissez le pdf en djvu avec https://jwilk.net/software/pdf2djvu convertisseur. Décocher " polices antialias, vecteurs..". Cela permettra de réduire considérablement la taille des fichiers et d'améliorer les temps de chargement des documents.

0
répondu not_a_spammer 2017-12-16 15:58:39

inkscape est la meilleure solution, j'ai rapidement fait ce fichier batch plutôt non optimisé qui fait exactement cela et vous pouvez jouer avec elle et changer les options. ImageMacick convert, gs, ou pdftoimages ne fonctionnent pas aussi bien que inkscape soit ils n'exportent pas les couches ou exportent, mais avec une mauvaise qualité :

#!/bin/bash
#set -xev
ORIGINAL_FOLDER=`pwd` 
JPEGS=`mktemp -d`
unzip "" -d "$JPEGS"
cd "$JPEGS"
# expang the pdf in pdf pages
pdftk combined_to_do.pdf burst output pg_%04d.pdf
#1) print the pdf's to pngs as they are seen with alpha, layers, transparency etc, this cannot be done by ImageMacick convert or pdftoimages
ls ./pg*.pdf | xargs -L1 -I {}  inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png
#2) Second change to jpgs
rm *.pdf
ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300  {}.jpg
#3) This to make a pdf file out of every jpg image without loss of either resolution or quality:
ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf
#4) This to concatenate the pdfpages into one:
pdftk *.jpg.pdf cat output combined.pdf
#5) And last I add an OCRed text layer that doesn't change the quality of the scan in the pdfs so they can be searchable:
pypdfocr combined.pdf
cp "$JPEGS/combined_ocr.pdf" "$ORIGINAL_FOLDER/_ocr.pdf"
cp "$JPEGS/combined.pdf" "$ORIGINAL_FOLDER/.pdf"
0
répondu Eduard Florinescu 2018-02-13 13:38:55