Convertir des fichiers PDF en fichiers SVG?

Je tente de convertir un PDF en SVG. Cependant, celui que j’utilise actuellement mappe un chemin pour chaque lettre dans chaque morceau de texte, ce qui signifie que si je change le texte dans son fichier source, il est moche.

Je me demandais quel est le convertisseur PDF à SVG le plus propre, espérons-le, qui n’a pas de chemin pour les zones de texte qui n’en ont pas besoin. Comme nous le soaps, PDF et SVG sont assez similaires, donc je suppose qu’il existe de bons convertisseurs.

Inkscape est utilisé par de nombreuses personnes sur Wikipedia pour convertir des fichiers PDF en fichiers SVG.

http://inkscape.org/

Ils ont même un guide pratique sur la façon de le faire!

http://en.wikipedia.org/wiki/Wikipedia:Graphic_Lab/Resources/PDF_conversion_to_SVG#Conversion_with_Inkscape

Vous pouvez utiliser Inkscape uniquement sur la ligne de commande sans ouvrir d’interface graphique. Essaye ça:

 inkscape \ --without-gui \ --file=input.pdf \ --export-plain-svg=output.svg 

Pour obtenir une liste complète de toutes les options de ligne de commande, exécutez inkscape --help .

J’utilise actuellement PDFBox qui prend bien en charge la sortie graphique. Il existe un bon support pour extraire les traits vectoriels et pour gérer les fonts. Il existe de bons outils pour l’essayer (par exemple, PDFReader s’affichera sous le nom de Java Graphics2D). Vous pouvez intercepter l’outil graphique avec un outil SVG tel que Batik (je le fais et cela donne une bonne capture).

Il n’y a pas de moyen simple de convertir tous les fichiers PDF en fichiers SVG. Cela dépend de la stratégie et des outils utilisés pour créer les fichiers PDF. Certains textes sont convertis en vecteurs et ne peuvent pas être facilement reconstruits – vous devez installer des fonts vectorielles et les rechercher.

MISE À JOUR: Je l’ai maintenant développé dans un package PDF2SVG qui n’utilise plus Batik:

qui a été testé sur une gamme de PDF. Il produit une sortie SVG composée de

  • caractères comme un par caractère
  • les chemins comme
  • images comme

Les paquets ultérieurs convertiront (espérons-le) les caractères en texte en cours d’exécution et les chemins en objects graphiques de niveau supérieur

MISE À JOUR: Nous pouvons maintenant recréer du texte courant à partir des caractères SVG. Nous avons également converti des diagrammes en XML spécifiques au domaine (p. Ex. Spectres chimiques). Voir https://bitbucket.org/petermr/svg2xml-dev . Il est toujours en Alpha, mais évolue à une vitesse utile. Tout le monde peut participer!

METTRE À JOUR. (@Tim Kelty) Nous continuons à travailler sur PDF2SVG et aussi sur les outils en aval qui font (limité) la reconnaissance optique de caractères en Java et la création de primitives graphiques de niveau supérieur (flèches, boîtes, etc.). imageanalysis https://bitbucket.org/petermr/diagramanalyzer https://bitbucket.org/petermr/norma et https://bitbucket.org/petermr/ami-core . Ceci est un projet financé pour capturer 100 millions de faits de la littérature scientifique (contentmine.org) dont une grande partie est PDF.

Ce sujet est assez ancien, mais voici une solution pratique que j’ai trouvée:

http://www.cityinthesky.co.uk/opensource/pdf2svg/

Il offre un outil, pdf2png, qui une fois installé fait exactement le travail en ligne de commande. Je l’ai testé avec des résultats irréprochables jusqu’à présent, y compris avec les bitmaps.

EDIT: Mon erreur, cet outil convertit également des lettres en chemins, donc il ne répond pas à la question initiale. Cependant, il fait du bon travail, et peut être utile à quiconque n’a pas l’intention de modifier le code dans le fichier svg, alors je quitterai le post.

Voici le processus que j’ai fini par utiliser. L’outil principal que j’ai utilisé était Inkscape qui était capable de convertir le texte correctement.

  • Utilisation d’actions Adobe Acrobat Pro avec JavaScript pour diviser les feuilles PDF
  • Inkscape Portable 0.48.5 de Windows Cmd pour convertir en SVG
  • J’ai apporté des modifications manuelles à un atsortingbut SVG XML particulier avec lequel je rencontrais des problèmes en utilisant Windows Cmd et Windows PowerShell

Pages séparées: Adobe Acrobat Pro avec JavaScript

En utilisant Adobe Acrobat Pro Actions (anciennement Traitement par lots), créez une action personnalisée pour séparer les pages PDF en fichiers distincts. Vous pouvez également diviser les fichiers PDF avec GhostScript

Action JavaScript Acrobat pour diviser les pages

 /* Extract Pages to Folder */ var re = /.*\/|\.pdf$/ig; var filename = this.path.replace(re,""); { for ( var i = 0; i < this.numPages; i++ ) this.extractPages ({ nStart: i, nEnd: i, cPath : filename + "_s" + ("000000" + (i+1)).slice (-3) + ".pdf" }); }; 

Conversion PDF vers SVG: Inkscape avec fichier batch Windows CMD

Utilisation du fichier batch créé par Windows Cmd pour parcourir tous les fichiers PDF d'un dossier et les convertir en SVG

Fichier batch pour convertir PDF en SVG dans le dossier actuel

 :: ===== SETUP ===== @echo off CLS echo Starting SVG conversion... echo. :: setup working directory (if different) REM set "_work_dir=%~dp0" set "_work_dir=%CD%" :: setup counter set "count=1" :: setup file search and save ssortingng set "_work_x1=pdf" set "_work_x2=svg" set "_work_file_str=*.%_work_x1%" :: setup inkscape commands set "_inkscape_path=D:\InkscapePortable\App\Inkscape\" set "_inkscape_cmd=%_inkscape_path%inkscape.exe" :: ===== FIND FILES IN WORKING DIRECTORY ===== :: Output from DIR last element is single carriage return character. :: Carriage return characters are directly removed after percent expansion, :: but not with delayed expansion. pushd "%_work_dir%" FOR /f "tokens=*" %%A IN ('DIR /A:-D /O:N /B %_work_file_str%') DO ( CALL :subroutine "%%A" ) popd :: ===== CONVERT PDF TO SVG WITH INKSCAPE ===== :subroutine echo. IF NOT [%1]==[] ( echo %count%:%1 set /A count+=1 start "" /D "%_work_dir%" /W "%_inkscape_cmd%" --without-gui --file="%~n1.%_work_x1%" --export-dpi=300 --export-plain-svg="%~n1.%_work_x2%" ) ELSE ( echo End of output ) echo. GOTO :eof :: ===== INKSCAPE REFERENCE ===== :: print inkscape help REM "%_inkscape_cmd%" --help > "%~dp0\inkscape_help.txt" REM "%_inkscape_cmd%" --verb-list > "%~dp0\inkscape_verb_list.txt" 

Atsortingbuts de nettoyage: Windows Cmd et PowerShell

Je me rends compte que ce n'est pas la meilleure pratique de modifier manuellement les balises ou les atsortingbuts SVG ou XML en cas de variations potentielles et d'utiliser plutôt un parsingur XML. Cependant, j'avais un problème simple: la largeur de trait sur un dessin était très petite et sur une autre, la famille de fonts était mal identifiée. J'ai donc modifié le script batch Windows Cmd précédent pour effectuer une simple recherche. Les seules modifications concernaient les définitions de chaîne de recherche et leur modification pour appeler une commande PowerShell. La commande PowerShell effectue une recherche et remplace et enregistre le fichier modifié avec un suffixe ajouté. J'ai trouvé d'autres références qui pourraient être mieux utilisées pour parsingr ou modifier les fichiers SVG résultants si un autre nettoyage mineur est nécessaire.

Modifications pour rechercher et remplacer manuellement les données XML SVG

 :: setup file search and save ssortingng set "_work_x1=svg" set "_work_x2=svg" set "_work_s2=_mod" set "_work_file_str=*.%_work_x1%" 

powershell -Command "(Get-Content '%~n1.%_work_x1%') | ForEach-Object {$_ -replace 'stroke-width:0.06', 'stroke-width:1'} | ForEach-Object {$_ -replace 'font-family:Times Roman','font-family:Times New Roman'} | Set-Content '%~n1%_work_s2%.%_work_x2%'"

J'espère que cela pourrait aider quelqu'un

Les références

Actions Adobe Acrobat Pro et références JavaScript aux pages séparées

  • Comment automatiser l'extraction de pages à partir d'un PDF ...
  • Référence JavaScript pour Acrobat API - extractPages
  • Extraire les pages pour séparer les fichiers PDF (quelque chose ne va pas avec la boucle?)
  • Comment puis-je créer une valeur Zerofilled en utilisant JavaScript?
  • Comment sortir des entiers avec des zéros en tête dans JavaScript

Références GhostScript aux pages séparées

  • GhostScript noob help - Casser un fichier PDF de plusieurs pages ...
  • Comment convertir un fichier PDF de plusieurs pages ...
  • Fractionnement d'un PDF avec Ghostscript

Inkscape Command Line références pour la conversion PDF vers SVG

  • convertir pdf en svg
  • Convertir des fichiers PDF en fichiers SVG?

Windows Cmd Batch File Script références

  • Fonctionnalités cachées des fichiers de commandes Windows
  • SS64.com - Index de la ligne de commande Windows CMD
  • Pourquoi la boucle FOR / f dans ce script de traitement par lots évalue-t-elle une ligne vide?

Recherche de remplacement de balises / atsortingbuts XML

  • Comment pouvez-vous trouver et remplacer du texte dans un fichier à l'aide de l'environnement de ligne de commande Windows?
  • Modification des données de balise dans un fichier XML à l'aide du fichier de commandes Windows
  • mettre à jour le XML depuis la ligne de commande [windows]
  • Comment modifier / créer des valeurs dans des fichiers XML à l'aide de PowerShell?
  • Modification des atsortingbuts XML à l'aide de Powershell
  • powershell change la valeur de l'atsortingbut XML Element

Si DVI to SVG est une option, vous pouvez également utiliser dvisvgm pour convertir un fichier DVI en fichier SVG. Cela fonctionne parfaitement par exemple pour les formules LaTeX (avec l’option --no-fonts ):

 dvisvgm --no-fonts input.dvi -o output.svg 

Il y a aussi pdf2svg qui utilise poppler et Cairo pour convertir un pdf en SVG. Quand j’ai essayé ceci, le SVG était parfaitement rendu dans inkscape .

Script Bash pour convertir chaque page d’un PDF dans son propre fichier SVG.

 #!/bin/bash # # Make one PDF per page using PDF toolkit. # Convert this PDF to SVG using inkscape # inputPdf=$1 pageCnt=$(pdftk $inputPdf dump_data | grep NumberOfPages | cut -d " " -f 2) for i in $(seq 1 $pageCnt); do echo "converting page $i..." pdftk ${inputPdf} cat $i output ${inputPdf%%.*}_${i}.pdf inkscape --without-gui "--file=${inputPdf%%.*}_${i}.pdf" "--export-plain-svg=${inputPdf%%.*}_${i}.svg" done 

Pour générer en png, utilisez --export-png , etc …

J’ai trouvé que xfig faisait un excellent travail:

 pstoedit -f fig foo.pdf foo.fig xfig foo.fig export to svg 

Il faisait beaucoup mieux que inkscape. En fait, c’est probablement pdtoedit qui l’a fait.

Voici l’API REST NodeJS pour deux scripts de rendu PDF. https://github.com/pumppi/pdf2images

Les scripts sont: pdf2svg et Imagemagicks convertissent