Ich habe SVG-Bilder von PlantUML, die einige Teile der Zeichnung außerhalb der Leinwand haben. Es macht es schwierig, solche Bilder zu verwenden, und ich muss die Zeichnung auf Leinwandgröße zuschneiden. Da ich sowieso UML-Diagramme mit Skript erstelle, wäre es sehr effizient, dort auch ein Zuschneiden durchzuführen.
Bisher habe ich zwei Dinge ausprobiert: a) Ändern Sie die Größe der Leinwand, um mit Inkscape zu zeichnen
inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose *.svg
Dies funktioniert gut, aber ich muss die Zeichnung auf Leinwandgröße zuschneiden, und dieser Vorgang scheint nicht verfügbar zu sein.
b) Ändern Sie die Größe mit rsvg-convert
rsvg-convert image.svg -w 1870 -h 1195 -f svg -o image.svg
Dadurch wird genau auf die gewünschte Größe zugeschnitten, aber die Bildgröße erhöht sich um das Zehnfache, da jetzt einige Binärbilder in SVG eingebettet sind. Das ist für mich nicht akzeptabel.
quelle
svg
Das Format ist ein XML-basiertes ASCII-Format. Der einfachste Weg ist daher,sed
eine Zeile, die den Begrenzungsrahmen festlegt , mit Ihrem bevorzugten Textbearbeitungswerkzeug einzufügen oder zu ändern. Dies würde nicht einmal den anderen Inhalt der Datei berühren. Versuchen Sie es einmal manuell in einer Beispiel-SVG-Datei (in einem Texteditor) und übersetzen Sie dann Ihre Aktionen in ein Skript.Antworten:
Ich habe einen uneleganten Weg gefunden, dies mit dem Vorschlag von orion zu tun. Angenommen, es
$svg_file_name
handelt sich um eine Variable, die den Dateipfad zu einem SVG-Bild enthält.Zuerst brauchen wir Bildbreite und -höhe
PlantUML erstellt das Diagramm als einzelne Gruppe (Tag
<g>
). Platzieren Sie ein Rechteck mit Leinwandgröße über dieser GruppeÖffnen Sie nun das Bild mit inkscape, wählen Sie alle aus und schneiden Sie die Gruppe mit dem Rechteck ab
Mit dem neuesten Inkscape muss Inkscape beendet werden, anstatt die Datei zu schließen
quelle