Zum ersten Mal musste ich einen Diff für eine mit Inkscape erstellte SVG-Datei durchführen, da ich einen Konflikt in SVN hatte.
Bei der Überprüfung der Unterschiede habe ich festgestellt, dass die SVG-Datei viele persönliche Informationen enthält. Bei den persönlichen Informationen handelt es sich um Pfade, die für den Export verwendet werden. Die SVG-Quelle sieht folgendermaßen aus:
<text ... inkscape:export-filename="<personal information here>" ... />
In meinem Fall gibt es viele Ordnernamen, die auf Projekte zurückgehen, für die ich 2009 gearbeitet habe.
Wie kann ich diese persönlichen Informationen aus Inkscape SVG-Dateien entfernen?
Natürlich könnte ich es in einem Texteditor manuell machen, aber das hat einige Nachteile:
- Es ist fehleranfällig. Sie müssen ziemlich sicher sein, was Sie tun. Es sollte einen sichereren Weg geben, dies zu tun.
- es ist zeitaufwändig. Es sollte einen schnelleren Weg geben, dies zu tun.
- es könnte unvollständig sein. Vielleicht gibt es andere persönliche Daten, die ich noch nicht entdeckt habe.
Ich habe viele SVGs aus verschiedenen Quellen, daher suchte ich nach einer automatisierten Lösung .
1. SVGO (NodeJS, Javascript)
Es gibt ein sehr gutes NPM-Paket: SVGO
Da ich
gulp
als Task-Runner verwende, ist das gulp-svgmin (oder gulp-svgo ) sehr hilfreich2. XSLT (SVG transformieren)
Der andere automatisierte Ansatz - verwenden Sie XSLT. Hier ist eine XSL-Transformation, mit der ich SVG bereinigt habe.
Dieses XSLT führt Folgendes aus:
inkscape
undsodipodi
Attributeinkscape
undsodipodi
Elementemetadata
Element mit allen Vorfahrenstyle
Attribute (wir verwenden CSS) - nur wenn die Variable aufpreserve-style
gesetzt istfalse
Als Ausgabe erhalten Sie die saubere SVG-Datei.
So führen Sie eine Transformation durch
Javascript (Schluckaufbau)
Wenn Sie gulp als Build-System verwenden, können Sie folgende Plugins verwenden:
saxon.jar
im SystemPython und lxml.etree
Verwenden Sie dieses kurze Python-Skript:
quelle