Extrahieren aller Ipe-Ansichten automatisiert mit einem Skript

Extrahieren aller Ipe-Ansichten automatisiert mit einem Skript

Ich weiß, dass ich mit eine einzelne Ansicht aus einer .ipeDatei extrahieren kann iperender -eps -view 3 a.ipe a3.eps.

Ich möchte ein Skript erstellen, das eine .ipeDatei als Argument verwendet und alle Ansichten extrahiert, unabhängig davon, wie viele Ansichten die .ipeDatei hat.

Dafür brauche ich eine Funktion, die die Ansichten in der .ipeDatei zählt. Ich könnte einfach versuchen, Ansicht für Ansicht zu extrahieren, bis es fehlschlägt, aber das scheint eine unvorstellbare Lösung zu sein. Wenn es dann iperenderaus einem anderen Grund fehlschlägt, würde es stillschweigend fehlschlagen.

Gibt es ein ipeentsprechendes Tool, das einfach die Anzahl der Aufrufe in einer .ipeDatei ausgibt?

Antwort1

Das IPE-Dateiformat ist XML, daher können Sie hierfür allgemeine XML-Tools verwenden. Beispielsweise enthält die folgende IPE-Seite zwei Ansichten, eine mit einem Rechteck und eine andere mit zwei Rechtecken:

<page>
<layer name="alpha"/>
<layer name="beta"/>
<view layers="alpha" active="alpha"/>
<view layers="alpha beta" active="beta"/>
<path layer="alpha" stroke="orange">
16 832 m
16 800 l
48 800 l
48 832 l
h
</path>
<path layer="beta" stroke="orange">
64 784 m
64 816 l
32 816 l
32 784 l
h
</path>
</page>

viewSie können die beiden Tags am Anfang sehen . Mit xmllintbeispielsweise (es gibt viele andere mögliche Tools) können Sie die Anzahl der Tags extrahieren (aushttps://stackoverflow.com/a/35576314/):

xmllint --xpath "count(//view)" myfile.ipe

Fügen Sie dies in ein kleines Bash-Skript ein:

nrviews=`xmllint --xpath "count(//view)" $1`
fbase=`basename "$1"`
fname="${fbase%.*}"
for VIEW in $(seq 1 $nrviews)
do
    iperender -eps -view $VIEW $1 $fname.$VIEW.eps
done

Beispielausgabe: Bildbeschreibung hier eingeben

verwandte Informationen