2017-09-20 2 views
1

Für ein Projekt muss ich die Konvertierung von viel .svg-Dateien zu .dxf-Dateien für die weitere Verarbeitung automatisieren..svg zu .dxf (mit Inkscape?)

Situation: Ein Verzeichnis mit vielen .svg -Dateien, die zu .dxf umgewandelt werden sollen (unabhängig davon, ob die .dxf Dateien im selben Diretory oder in einem Unterordner sind, sollte dxf Name svg Name sein)

ich tun kann, das mit Inkscape GUI, das auch für den Import der .dxf Dateien in CAD-Programmen funktioniert, aber wie erwähnt muss ich das automatisieren. (Ich habe bisher nur in Python geschrieben).

Mein Gedanke: Ich öffne die Dateien in Inkscape über die Befehlszeile. möglich wäre, über den Befehl mit folgendem Code in png -Format exportieren:

from subprocess import call 
import os 

svg_dir = "C:\\temp\\layers\\" 
files = [svg_dir + i for i in os.listdir(svg_dir) if ".svg" in i] 

dir = r"C:\Program Files\Inkscape" 
for i in files: 

    cmdline = "Inkscape -z -f "+ i +" -e "+ i + ".png" 
    rc = call("start cmd /K " + cmdline, cwd=dir, shell=True) 

Aber ich weiß nicht wirklich unterstehen Inkscape Erweiterungen. Ich weiß nur, dass ich dxf_outlines.py/.inx im Erweiterungsverzeichnis brauche. Ich brauche immer die gleichen Exportoptionen, also könnte ich den Python-Code einfach neu schreiben und ihn über einen Befehl in Inkscape ausführen?

Oder würde es irgendeine Lösung ohne zusätzliche Software wie Inkscape in Python geben? Soweit ich es gesehen habe, ist es nicht.

Antwort

0

Ich kam mit einer etwas anderen Lösung, aber immer noch den Weg zu den benötigten .dxf-Dateien. Ich habe meine Figuren in Python als .eps -Dateien gespeichert und konnte sie mit nur einer Befehlszeile mit pstoedit konvertieren.

def eps_to_dxf(): 
    eps_list = [i for i in os.listdir(eps_directory) if ".eps" in i] 
    work_directory = "C:\Program Files\pstoedit" 

    for i in eps_list: 
     input_file = i.split(".")[0] 
     output_file = input_file + ".dxf" 
     cmdline = "pstoedit -f dxf_s " + eps_directory + i + " " + eps_directory + output_file 
     subprocess.check_call(cmdline, cwd=work_directory, shell=True)