EPS in DXF umwandeln

Mittwoch, Mai 24, 2017 by crypti

Nachdem der Cutworks-Webshop inzwischen auch Kunststoff-Teile im Sortiment hat und nach Aussage unseres Kunststoff-Partners ein Großteil der Kunden mit EPS-Dateien arbeitet, habe ich mich mal im Netz umgeschaut, wie man ein EPS in ein DXF umwandeln kann, ohne das über einen Cloud-Service oder teure Zusatz-Software abbilden zu können.

Nach ziemlich langem Suchen bin ich auf ein Linux-Forum gestoßen, bei dem der entsprechende Blogger eine Umwandlung mit Hilfe von pstoedit durchführt.

WOW - ein Gratis-Tool auf der Linux-Kommandozeile, dass genau die Dinge macht die ich brauche - ich bin begeistert. Nachdem ich dann endlich wusste, wie das Tool heisst, konnte ich auf der sourceforge-Seite sogar eine Windows-Version herunterladen und installieren.

Die ersten Tests zeigten zwar, dass zwingend eine Installation von Ghostscript notwendig ist (die 32bit-Version - egal, ob pstoedit 64 oder 32 bit ist). Nach der Installation konnte ich mit dem folgenden Befehl eine EPS erfolgreich in eine DXF umwandeln:

pstoedit.exe -dt -f dxf:-polyaslines <Quelldatei>.eps <Zieldatei>.dxf 

Optional kann man mit -mm das Modell als mm umwandeln, standardmäßig wird sonst inch benutzt!

Das ganze lässt sich ziemlich leicht als Java-Service im Backend über ProcessBuilder bzw. Runtime.exec() aufrufen, so dass man schwupp die wupp - in kürzester Zeit auch EPS-Dateien lesen kann.

Nachtrag 25.05.2017:

Bei der Integration in Java führte die Ausführung von pstoedit immer dazu, dass nur der DXF-Header erzeugt wurde, nach dem Header brach die Generierung ab. Hintergrund ist, dass bei Aufruf von gswin32c in das Standard-Temp-Verzeichnis (C:\Users\%userName%\Appdata\LocalLow\Temp\2) geschrieben wird, welches als System-Account wohl nicht zur Verfügung steht. Daher führt der Ghostscript-Aufruf wohl zu einer leeren Datei.
Zur Behebung des Problems muss man den Tomcat-Dienst dann einfach als priviligierter Nutzer (z.B. Administrator) ausführen, anschließend funktioniert die Umwandlung ohne Probleme.