2009-08-30 42 views
5

Buduję zbiór plików SVG, które zawierają niefortunną liczbę zakodowanych wartości (muszą być drukowane z elementami o wielkości w mm, a inne muszą być skalowane jako procent, a większość wartości to zdefiniowane względem siebie). Zamiast zarządzać tymi liczbami ręcznie (nie daj Boże, chcę coś zmienić), pomyślałem, że mogę użyć mojego zaufanego pytona z młotkiem do tego zadania.Tworzenie SVG przy użyciu Pythona

Format SVG 1.1 nie wspiera natywnego typu programu, który pozwoliłby mi robić to, co chcę, i nie jestem zainteresowany wprowadzeniem do miksu javascript lub niestabilnej wersji roboczej w3c. Jednym z oczywistych rozwiązań jest użycie formatowania ciągów do odczytu, analizy i zamiany zmiennych w moim pliku SVG. Wydaje się, że jest to zły pomysł na większy dokument, ale ma tę zaletę, że jest prosty i przenośny.

Moja druga sprawa polegała na zbadaniu dostępnych bibliotek Pythona-> SvG. Niestety wygląda na to, że kilka opcji jest albo zbyt nowych (pySVG nadal ma niestabilny interfejs), zbyt stare (nieaktualne od 2005), albo porzucone. Nie przyjrzałem się uważnie, ale mam wrażenie, że aplikacje do tworzenia wykresów nie są wystarczająco elastyczne, aby generować moje dokumenty.

Trzecią opcją, z którą się spotkałem, było użycie innego narzędzia do rysowania (na przykład cairo), które można przekonać do wydania svg. Ma to (potencjalną) wadę polegającą na tym, że nie obsługuje on bezwzględnych rozmiarów elementów, które są dla mnie tak ważne, ale może obejmować możliwość wyprowadzania plików PDF, co byłoby wygodne.

Wykonałem już badanie google, dlatego szukam informacji od osób, które skorzystały z którejś z wymienionych metod lub które mogą znać inne podejście. Długookresowa stabilność dowolnego rozwiązania jest dla mnie ważna (to był pierwotny powód kodowania ręcznego zamiast używania tylko programu Illustrator).

W tym momencie pochylam się nad pierwszym rozwiązaniem, więc mile widziane są zalecenia dotyczące najlepszych praktyk dotyczących używania Pythona do analizowania i zastępowania zmiennych w plikach XML.

Odpowiedz

4

Może być przydatny silnik szablonowy oparty na znacznikach, taki jak genshi. Umożliwiłoby to większość tworzenia za pomocą narzędzia SVG i dostosowywanie w szablonie. Zdecydowanie wolałbym to od XSLT.

+0

To dobra uwaga. XSLT wciąż mnie drży. A dla dokumentów SVG, Genshi powinien pozwolić mi rozwinąć się z wartościami testowymi, a następnie wymienić je tak, jak jest to wygodne. W trakcie pracy będę mógł zachować szablony w mojej przeglądarce. –

0

Ponieważ SVG to XML, może mógłbyś użyć XSLT do transformacji źródłowego pliku XML zawierającego twoje zmienne do SVG. W twoim arkuszu stylów XSLT będziesz miał szablony odpowiadające różnym elementom twojej ilustracji SVG, które zmieniają ich wyniki w zależności od wartości znalezionych w źródłowym pliku XML.

Albo możesz użyć szablonu SVG jako źródła i przekształcić go w ostateczny, z wartościami przekazanymi jako parametry procesora XSLT.

Używasz XSLT bezpośrednio lub przez Python, jeśli potrzebujesz logiki, która jest łatwiejsza do wykonania w tradycyjnym języku.

+0

To byłaby odmiana pierwszego rozwiązania, korzystającego z rozwiązania dostosowanego do obsługi XML i oferującego zaawansowane narzędzia, takie jak XPath. –

+0

Zrobiłem rzeczy w przeszłości za pomocą XSLT i wyszedłem z naprawdę paskudny smak w ustach. Parsery nie są ustandaryzowane pod względem funkcjonalności, a proste rzeczy, takie jak transformacje dat, obejmowały pół strony okrakiem. Chciałbym trzymać się od nich z daleka, ale może pójść jeszcze raz, jeśli nie ma lepszej opcji. –

+0

Chociaż naprawdę, myśląc o tym więcej, może moje zadanie jest na tyle proste, że XSLT jest właściwą drogą. Byłoby miło trzymać bardziej złożone języki z równania. –

Powiązane problemy