Comment convertir un fichier SVG en fichier PDF sous Linux

126

Comment convertir un fichier SVG (contenant quelques mots de texte latin et quelques graphiques vectoriels simples) en PDF sous Linux?

J'ai essayé Inkscape 0.47 sur Ubuntu Lucid, mais cela déplace certains sous-graphiques de manière aléatoire et rend certaines lignes plus courtes dans le fichier PDF de sortie. La sortie est donc inutile, car les graphismes sont complètement différents.

J'ai essayé d'ouvrir SVG dans Google Chrome 16 et de l'imprimer au format PDF, mais il déforme toutes les couleurs et élimine également certains éléments. (Le format SVG apparaît bien à l'écran, mais il est déjà incorrect dans l'aperçu avant impression et le fichier PDF généré l'est également.)

Je ne veux pas rasteriser ou rendre le SVG. Une solution qui convertit le SVG en image bitmap puis crée un PDF avec l’image incorporée ne répond pas à ma question. (Pour votre information, Inscape 0.47 rend le texte très mal, sans antialiasing, lors du rendu au format PNG.)

Quelles autres options ai-je?

pts
la source
1
Si vous ne disposez que de quelques images à convertir, il vous sera peut-être plus facile d’utiliser certains convertisseurs en ligne. J'ai essayé CloudConvert et il a fait un très bon travail avec la moitié de la taille du fichier SVG.
Frank Breitling

Réponses:

134

rsvg-convert a fait l'affaire pour le SVG que je voulais convertir:

$ sudo apt-get install librsvg2-bin
$ rsvg-convert -f pdf -o t.pdf t.svg

rsvg-convert -f pdfne pixellise pas le SVG, et il incorpore et sous-définit les polices (du moins, il a incorporé les caractères utilisés de la police Arial). Parfois, l'incorporation de la police échoue (par exemple, pour la police LMRoman17) et le fichier de police entier est copié dans le fichier PDF généré.

Dépendances sur Ubuntu Lucid:

  • libcairo.so.2
  • libgobject-2.0.so.0
  • libgthread-2.0.so.0
  • libglib-2.0.so.0
  • librsvg-2.so.2
  • libpthread.so.0
  • libc.so.6

Par défaut, libcairo a besoin de libX11, ce qui rend l’installation de rsvg-convert difficile à installer sur un système sans tête.

Remarque: La page de manuel rsvg-convertindique que l'outil est toujours pixellisé, mais ce n'est pas vrai. Le manuel est simplement obsolète. Parfois, votre outil de génération de svg peut pixelliser partiellement l'image svg, ce qui peut également vous induire en erreur.

pts
la source
4
Je vois beaucoup de dépendances ici: cairo, libgphoto, gtk3, libsane ... Ah bon, si ça fait le boulot ...
ShiDoiSi 16/04/2012
4
@ AyberkÖzgür C'est la faute d'Inkscape: lorsque vous enregistrez un projet Inkscape, il est enregistré par défaut en tant que SVG, mais ce dernier enregistre un ensemble de données non standard spécifiques à Inkscape qui peuvent perturber fréquemment d'autres programmes. Vous devez exporter en tant que SVG plutôt que de simplement enregistrer en tant que SVG.
AJMansfield
2
Pourrait gagner du temps la recherche: SuSE-Systems le paquet contenant rsvg-convertest appelé rsvg-view.
Trendfischer
1
Cela a fonctionné pour moi et la qualité du pdf est la même que celle de svg. Auparavant, imagemagick était utilisé pour convertir en PDF et la qualité était médiocre, en particulier pour svg.
Pratik Soni
1
Malheureusement, cela n’incorpore pas les polices sur macOS.
Oarfish
79

Cela fonctionne sur Ubuntu Lucid:

$ sudo apt-get install inkscape
$ inkscape t.svg --export-pdf=t.pdf

L'invocation Inkscape ci-dessus en ligne de commande fonctionne même en mode sans interface graphique, sans interface graphique ( DISPLAY=). Toutefois, l’installation d’Inscape installe de nombreuses dépendances, notamment X11.

Veuillez noter que le statut de sortie d'Inskscape est toujours égal à 0, même en cas d'erreur. Veillez donc à conserver son statut.

Il existe également inkscape --shell, adapté à la conversion de nombreux documents dans un lot. Cela évite la lenteur du démarrage d'Inkscape pour chaque fichier:

$ (echo t.svg --export-pdf=t.pdf;
   echo u.svg --export-pdf=u.pdf) |
  DISPLAY= inkscape --shell

Inkscape est également utile pour simplifier un fichier SVG:

$ DISPLAY= inkscape t.svg --export-plain-svg=t.plain.svg
pts
la source
2
Malheureusement, cela ne semble pas fonctionner sous OS X. Bonne réponse.
Konrad Rudolph
3
L'OP a spécifié qu'Inkscape avait des bogues de rendu; cela correspond à mon expérience.
Dylan Thurston
3
Sous OSX avec Homebrew, vous pouvez installer Inkscape avec brew install inkscapeces jours. Le résultat a /usr/local/bin/inkscapefonctionné pour moi sans avoir à exécuter X11.app.
Alex Schröder
2
Inkscape peut être installé sur OS X à partir de la version dmgdistribuée de son propre site Web, puis appelé à partir de la ligne de commande après la création de deux liens symboliques: ln -s ~/Applications/Inkscape.app/Contents/Resources/bin/inkscape ~/bin/inkscapeet de même pour inkscape-bin(en supposant que ce ~/binsoit dans votre $PATH).
Ioannis Filippidis
2
Vous pouvez utiliser l' indicateur -z(ou --without-gui) avec Inkscape pour l'exécuter en mode de traitement par lots uniquement (aucune fenêtre ne s'ouvre du tout).
Artefact2
8

J'ai utilisé CairoSVG avec succès sur OSX et Ubuntu.

pip install cairosvg
cairosvg in.svg -o out.pdf

Documentation CairoSVG

SYK
la source
Vous pouvez même utiliser des liaisons en python. Malheureusement, j'ai trouvé que cette méthode est plutôt limitée, c'est-à-dire que beaucoup de fonctionnalités de svg ne sont pas supportées.
Bodo
7

Les résultats d'Inkscape (0,47 également) en PDF et de l'enregistrement au format PDF (mais légèrement différent) donnent de bons résultats, mais cela peut dépendre du graphique à portée de main.

Une alternative avec une résolution plus basse (je n’ai essayé d’aucune option pour l’améliorer) est

 convert file.svgz file.pdf 

convertfait partie du ImageMagickpaquet. Rasterizer est un autre programme:

 rasterizer -m application/pdf file.svgz -d file.pdf 

Pour savoir quels programmes qui gèrent svgs sont installés sur votre système, essayez simplement

 apropos -s 1 svg

La page de manuel de ces programmes devrait expliquer si ce programme est utile pour convertir le svg en pdf.

Utilisateur inconnu
la source
18
Merci pour vos suggestions. FYI convertn’est pas une réponse à la question initiale, parce que convertle SVG pixellisé en une image bitmap, et la question initiale cherchait une solution qui ne le fasse pas.
Pts
5

https://superuser.com/a/79064/19956 mentionne gsvg , composant de GhostPDL.

J'ai essayé gsvg ghostpdl-9.06 sur Ubuntu Lucid, mais cela a échoué pour deux fichiers SVG générés par Inkscape. Un fichier SVG contenait du texte, l’autre ne contenait que des graphiques vectoriels. Il a également échoué pour les graphiques simples sans extensions Inkscape ni chemin de clip. Donc, je ne considère pas que gsvg soit un convertisseur SVG en PDF utilisable.

pts
la source
3

Sur Mac OS (étant donné que vous avez déjà installé la bière), je fais:

$ brew install cairo libffi python3
$ pip3 install cairosvg

$ cairosvg -o blah.pdf ./blah.svg 

Même chose devrait fonctionner sous Linux, mais avec apt-get à la place.

Adriel Jr
la source
1
Cela fonctionne aussi avec la sortie pdf. Contrairement à svg2pdfet rsvg-convert, cela préserve les polices.
Oarfish
Merci, j'ai mis la mauvaise extension. J'ai mis à jour l'exemple.
Adriel Jr
Travaillé comme un charme!
Mayrop
1

Je me demande pourquoi cela n'a pas été mentionné auparavant, mais j'ai testé plusieurs convertisseurs svg-> pdf et constaté que le meilleur d'entre eux est Headless Chrome . Il produit les résultats les plus précis pour moi. Avant de passer à Chrome, j'essayais de lutter contre les bogues Inkscape, mais beaucoup d'entre eux sont trop sérieux et je ne peux pas y faire grand chose (bugs de transparence, polices incorrectes, etc.).

 chrome --headless --disable-gpu --print-to-pdf="output.pdf" "input.svg"

Il faut quelques ajustements pour utiliser la taille PDF personnalisée (A4 par défaut), mais j’ai été capable de définir la taille personnalisée après avoir googlé et joué avec les attributs CSS et SVG (consultez cette réponse sur stackoverflow )

Avael Kross
la source
Bienvenue sur Super User! Les liens externes peuvent rompre ou ne pas être disponibles, auquel cas votre réponse ne serait qu'un teaser. Même si les liens fonctionnent toujours, le contenu ne peut pas être indexé pour aider les gens à trouver la solution. Veuillez inclure les informations essentielles dans votre réponse et utiliser le lien pour l’attribution et la suite des lectures. Merci.
fixer1234
de WSL, vous avez besoin de drapeaux supplémentaireschromium --no-sandbox --disable-setuid-sandbox --headless --disable-gpu --print-to-pdf=output.pdf input.svg
ticapix
0

Ouvrez le fichier svg avec Image Viewer(également appelé Eye of Gnome eog), imprimez-le au format PDF (par exemple image.pdf) et convertissez-le au format EPS en utilisant la pdf2pscommande. Facile!

Étapes élaborées:

  1. Installer Image Viewersi ce n'est déjà fait (étape très peu probable si vous utilisez gnome)

    sudo apt-get install eog
    
  2. Ouvrez le fichier svg avec eoget imprimez-le dans un image.pdffichier.

  3. (Facultatif) Supprimez les espaces blancs environnants du fichier pdf:

    pdfcrop image.pdf
    

    Cela générera image-crop.pdfavec les espaces blancs supprimés.

  4. Convertir un fichier PDF découpé en eps (à utiliser image.pdfdirectement si vous n'avez pas découpé le fichier PDF)

    pdf2ps image-crop.pdf image.eps
    

C'est ça!

codeman48
la source