Convertir PDF pour nettoyer SVG? [fermé]

j'essaie de convertir un PDF en SVG. Cependant, celui que j'utilise trace actuellement un chemin pour chaque lettre dans chaque morceau de texte, ce qui signifie que si je change le texte dans son fichier source, il a l'air moche.

je me demandais ce qu'est le PDF le plus propre au convertisseur SVG, avec un peu de chance un qui n'a pas de chemin pour ses zones de texte qui n'en ont tout simplement pas besoin. Comme nous le savons, PDF et SVG sont assez similaires, donc je suppose qu'il y a de bons convertisseurs là-bas.

99
demandé sur sashoalm 2012-04-24 00:48:37
la source

9 ответов

Inkscape est utilisé par de nombreuses personnes sur Wikipedia pour convertir PDF en 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

82
répondu Saintt Sheldon Patnett 2012-04-24 00:53:12
la source

vous pouvez utiliser Inkscape sur la ligne de commande seulement, sans ouvrir d'interface graphique. Essayez ceci:

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

pour une liste complète de toutes les options en ligne de commande, Lancez inkscape --help .

76
répondu Kurt Pfeifle 2012-04-24 04:04:01
la source

j'utilise actuellement PDFBox qui a un bon support pour la sortie graphique. Il y a un bon support pour extraire les traits vectoriels et aussi pour gérer les polices. Il existe de bons outils pour l'essayer (par exemple, PDFReader s'affichera sous Java Graphics2D). vous pouvez intercepter l'outil graphique avec un outil SVG comme Batik (je le fais et il donne bonne capture).

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

mise à jour: Je l'ai maintenant développé dans un paquet PDF2SVG qui n'utilise plus Batik:

qui a été testé sur une gamme de PDF. La production de SVG se compose de

  • <svg:text> par caractère
  • chemins <svg:path>
  • images <svg:image>

les paquets suivants convertiront (avec un peu de chance) les caractères en texte courant et les chemins vers les objets graphiques de niveau supérieur

mise à jour: Nous pouvons maintenant recréer le texte courant à partir des caractères SVG. Nous avons également converti des diagrammes en XML propre à un domaine (par exemple les spectres chimiques). Voir https://bitbucket.org/petermr/svg2xml-dev . Il est toujours en Alpha, mais se déplace à une vitesse utile. N'importe qui peut participer!

UPDATE. (@Tim Kelty) nous continuons à travailler sur PDF2SVG et aussi les outils en aval qui font (limité) Java OCR et la création de primitives graphiques de haut niveau (flèches, boîtes, etc.) Voir . https://bitbucket.org/petermr/imageanalysis https://bitbucket.org/petermr/diagramanalyzer https://bitbucket.org/petermr/norma et https://bitbucket.org/petermr/ami-core . Il s'agit d'un projet financé pour saisir 100 millions de faits tirés de la littérature scientifique (contentmine.org) dont une grande partie est en PDF.

20
répondu peter.murray.rust 2015-01-25 12:39:38
la source

ce sujet est assez ancien, mais voici une solution pratique que j'ai trouvé:

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 bitmaps.

EDIT: mon erreur, cet outil convertit aussi des lettres en chemins, donc il ne s'adresse pas à l'initiale question. Cependant, il fait du bon travail de toute façon, et peut être utile à quiconque n'a pas l'intention de modifier le code dans le fichier svg, donc je vais quitter le poste.

16
répondu pierre 2015-02-06 01:46:44
la source

voici le processus que j'ai fini par utiliser. L'outil principal que j'ai utilisé était Inkscape qui a été capable de convertir le texte alright.

  • utilisé les actions D'Adobe Acrobat Pro avec JavaScript pour scinder les feuilles PDF
  • ran Inkscape Portable 0.48.5 à partir de Windows Cmd pour convertir SVG
  • a fait quelques modifications manuelles à un attribut XML SVG particulier avec lequel j'avais des problèmes en utilisant Windows Cmd et Windows PowerShell

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

à L'aide des Actions Adobe Acrobat Pro (anciennement traitement par lots) créer une action personnalisée pour séparer les pages PDF en fichiers séparés. Vous pouvez aussi séparer les fichiers PDF avec GhostScript

Acrobat JavaScript Action de fractionner 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"
    });
};

PDF à la Conversion SVG: Inkscape avec le fichier de lot CMD de Windows

en utilisant Windows Cmd créé un fichier par lot pour parcourir en boucle tous les fichiers PDF dans un dossier et de les convertir en SVG

fichier par lot pour convertir PDF en SVG dans le dossier courant

:: ===== 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 string
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"

attributs pour le nettoyage: Windows Cmd et PowerShell

je me rends compte que ce n'est pas une bonne pratique d'éditer manuellement des balises SVG ou XML en raison de variations potentielles et d'utiliser un analyseur XML à la place. Cependant j'ai eu un simple problème où la largeur de trait sur un dessin était très petite, et sur un autre la famille de police était mal identifiée, donc j'ai modifié le script Cmd lot précédent de Windows pour faire une recherche simple et remplacer. Les seuls changements ont été apportés aux définitions de la chaîne de recherche et à la commande D'appel PowerShell. La commande PowerShell effectuera une recherche et remplacera et sauvera le fichier modifié avec un suffixe ajouté. J'en ai trouvé quelques autres références qui pourraient être mieux utilisées pour analyser ou modifiez les fichiers SVG résultants si un autre nettoyage mineur est nécessaire.

Modifications pour trouver manuellement et remplacer SVG XML data

:: setup file search and save string
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%'"

Espère que cela peut aider quelqu'un

Références

Adobe Acrobat Pro Actions et JavaScript des références à des Pages Distinctes

GhostScript les références à des Pages Distinctes

Inkscape Ligne de Commande références de fichier PDF au format SVG Conversion

Windows Cmd Batch File Script references

balise XML/attribut de remplacement de recherche

8
répondu ClearBlueSky85 2017-05-23 14:46:49
la source

si DVI to SVG est une option, vous pouvez également utiliser dvisvgm pour convertir un fichier DVI en un 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 ya aussi pdf2svg qui utilise poppler et Le Caire pour convertir un pdf en SVG. Quand j'ai essayé cela, le SVG était parfaitement rendu dans inkscape .

6
répondu dhaumann 2015-07-06 20:22:35
la source

Bash script 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=

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...

4
répondu Alain Pannetier 2015-12-06 19:18:42
la source

j'ai trouvé que xfig a fait un excellent travail:

pstoedit -f fig foo.pdf foo.fig
xfig foo.fig

export to svg

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

1
répondu user877329 2015-05-26 10:41:24
la source

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

les Scripts sont: pdf2svg et Imagemagicks convertir

0
répondu user257980 2016-04-03 11:22:36
la source

Autres questions sur pdf svg