2009-08-30 4 views
5

불행한 수의 하드 코드 된 값을 포함하는 SVG 파일 세트를 작성 중입니다. 일부 요소는 mm으로 크기가 인쇄되어야하고 나머지는 백분율로 표시되어야하며 대부분의 값은 서로에 대해 정의 됨). 그 숫자를 수작업으로 관리하는 대신 (천국에서 무언가를 바꾸고 싶지는 않음), 저는 믿을만한 망치 파이썬을 그 작업에 사용할 수있을 것이라고 생각했습니다.Python을 사용하여 SVG 만들기

SVG 1.1은 내가 원하는 것을 할 수있는 모든 종류의 변수 체계를 기본적으로 지원하지 않으며 자바 스크립트 또는 불안정한 w3c 초안을 혼합하여 도입하는 데 관심이 없습니다. 한 가지 분명한 해결책은 SVG 파일에서 문자열 형식을 사용하여 변수를 읽고, 구문 분석하고, 바꾸는 것입니다. 이것은 더 큰 문서의 경우 나쁜 생각이지만 간단하고 이식성이 있다는 장점이 있습니다.

내 초는 사용 가능한 python-> svg 라이브러리를 조사하는 것이 었습니다. 불행히도 몇 가지 옵션이 너무 새로 워서 (pySVG은 여전히 ​​불안정한 인터페이스를 가짐), 너무 오래되어 (2005 년부터 업데이트되지 않았거나 버려진) 경향이있는 것으로 보입니다. 필자는 자세히 보지 않았지만 도표 작성 애플리케이션이 내 문서를 생성 할만큼 충분히 융통성이 없다는 것이 내 감각입니다.

내가 만난 세 번째 옵션은 svg을 출력하도록 확신 할 수있는 다른 드로잉 도구 (예 : 카이로)를 사용하는 것입니다. 이것은 내게 너무 중요한 절대적인 요소 크기를 기본적으로 지원하지 않는 (잠재적 인) 단점이 있지만 PDF를 출력하는 기능을 포함 할 수 있습니다. 이는 편리 할 것입니다.

나는 이미 인터넷 검색을 했으므로 언급 된 방법 중 하나를 사용하거나 다른 접근법을 알고있는 사람들로부터 의견을 찾고 있습니다. 어떤 솔루션을 선택하든 장기간 안정성이 중요합니다 (일러스트 레이터를 사용하는 대신 손으로 코딩하는 원래의 이유였습니다).

이 시점에서 필자는 첫 번째 해결책에 기대고 있습니다. 따라서 Python을 사용하여 XML 파일의 변수를 구문 분석하고 바꿔 사용하는 것이 좋습니다.

답변

4

마크 업 기반 템플릿 엔진 (예 : genshi)이 유용 할 수 있습니다. SVG 도구를 사용하여 대부분의 제작 작업을 수행하고 템플릿에서 사용자 정의 작업을 수행 할 수 있습니다. 나는 확실히 XSLT를 선호한다.

+0

좋은 지적입니다. XSLT는 여전히 나를 떨리게 만든다. SVG 문서의 경우 Genshi에서 테스트 값을 사용하여 개발 한 다음 편리하게 대체 할 수 있어야합니다. 내가 일하는 동안 내 브라우저에 템플릿을 열어 둘 수 있습니다. –

0

SVG는 XML이므로 XSLT를 사용하여 변수가 포함 된 소스 XML 파일을 SVG로 변환 할 수 있습니다. XSLT 스타일 시트에는 SVG 일러스트레이션의 다양한 요소에 해당하는 템플릿이 있으며 원본 XML 파일에있는 값에 따라 출력이 변경됩니다.

소스로 템플릿 SVG를 사용하고 매개 변수로 전달 된 값을 사용하여 마지막으로 변환 할 수 있습니다.

전통적인 언어로 더 쉽게 수행 할 수있는 논리가 필요한 경우 XSLT를 직접 사용하거나 Python을 사용합니다.

+0

XML을 다루는 데 적합한 솔루션을 사용하고 XPath와 같은 강력한 도구를 제공하여 첫 번째 솔루션의 변형이 될 것입니다. –

+0

저는 XSLT를 사용하여 과거에 물건을 다 써 버렸고 입안에서 정말 맛이났습니다. 구문 분석기는 기능이 구현되는 한 표준화되지 않았으며 날짜 변환과 같은 단순한 작업은 페이지 반감기와 관련이 있습니다. 나는 그 (것)들에서 멀리 체재하고 싶으면, 그러나 더 나은 선택권이없는 경우에 다른보기가 갈지도 모르다. –

+0

정말 그것에 대해 생각해 보았지만, 아마도 내 작업은 XSLT를 사용하는 것이 옳은 방법 일만큼 간단합니다. 방정식에서 더 복잡한 언어를 유지하는 것이 좋을 것입니다. –