2009-08-30 80 views
5

我構建了一組包含不幸數目的硬編碼值的SVG文件(它們必須以mm爲單位的一些元素進行打印,而其他元素則必須按百分比進行縮放,而大部分值都是相對於彼此定義)。不用手工管理這些數字(天堂禁止我想改變某些東西),我想我可以用我的可靠錘子python來完成任務。使用Python創建SVG

SVG 1.1本身並不支持任何種類的可變方案,它可以讓我做我想做的事,而且我也沒有興趣將javascript或不穩定的w3c草稿規範引入組合。一個明顯的解決方案是使用字符串格式來讀取,解析和替換我的SVG文件中的變量。對於更大的文檔來說,這看起來不是個好主意,但具有簡單便攜的優點。

我的第二個目的是調查可用的python-> svg庫。不幸的是,這幾個選項似乎往往太新(pySVG仍然有一個不穩定的界面),太舊(自2005年以來沒有更新)或放棄。我沒有仔細觀察,但我的感覺是,製圖應用程序不夠靈活,無法生成我的文檔。

我遇到的第三種選擇是使用一些其他繪圖工具(例如cairo),它可以讓人信服推出svg。這具有(潛在的)缺點,不是本地支持對我而言非常重要的絕對元素大小,但可能包括輸出PDF的能力,這將是方便的。

我已經完成了谷歌搜索,所以我正在尋找使用任何提及的方法的人的輸入,或者誰可能知道其他方法。選擇任何解決方案的長期穩定性對我來說都很重要(這是手寫代碼而不是僅僅使用插圖畫家的原始原因)。

在這一點上,我傾向於第一個解決方案,因此建議使用python來解析和替換XML文件中的變量。

回答

4

基於標記的模板引擎(如genshi)可能會有用。它可以讓你使用SVG工具完成大部分創作,並在模板中進行自定義。我一定會喜歡它到XSLT。

+0

這是一個很好的觀點。 XSLT仍然讓我不寒而慄。對於SVG文檔,Genshi應該允許我開發測試值,然後將其替換爲方便。在工作時,我可以保持模板在我的瀏覽器中打開。 – 2009-08-30 15:22:20

0

既然SVG是XML,也許你可以使用XSLT將包含你的變量的源XML文件轉換爲SVG。在您的XSLT樣式表中,您將擁有與SVG插圖的各個元素相對應的模板,這些模板會根據源XML文件中的值更改其輸出。

或者您可以使用模板SVG作爲源代碼並將其轉換爲最後一個,並將值作爲參數傳遞給XSLT處理器。

如果您需要使用傳統語言更容易執行的邏輯,您可以直接使用XSLT,也可以通過Python使用XSLT。

+0

因此,這將是您的第一個解決方案的變體,使用適合處理XML並提供強大工具來幫助您的解決方案,如XPath。 – 2009-08-30 14:37:36

+0

我在過去使用XSLT做過東西,並且在我的嘴裏帶着一種非常惡劣的味道。解析器的功能並不是標準化的,像日期轉換這樣簡單的事情涉及到半個頁面。我想遠離他們,但如果沒有更好的選擇,可能會再看一次。 – 2009-08-30 14:38:57

+0

雖然真的,但更多地思考它,也許我的任務很簡單,XSLT是正確的選擇。將更復雜的語言排除在等式之外很好。 – 2009-08-30 14:41:21