Próbuję wygenerować obraz PDF z obrazu SVG za pomocą Pythona. Próbowałem zarówno CairoSVG i svglib. Problem polega na tym, że w obu przypadkach wygenerowane pliki PDF nie mają zastosowanych żadnych osadzonych stylów CSS.Konwersja SVG z osadzonym CSS na PDF w Pythonie
Oto prosty plik SVG, które powinny uczynić niebieski prostokąt z czarną obwódką:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="200" height="200" version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<style type="text/css"><![CDATA[
rect {
fill: #1f77b4;
stroke: black;
stroke-width: 1;
shape-rendering: crispEdges;
}
]]></style>
</defs>
<rect x="50" y="50" width="100" height="100"></rect>
</svg>
Podczas renderowania PDF przy użyciu tego SVG CairoSVG obraz PDF jest wyświetlany w postaci czarnego prostokąta. Za pomocą svglib nie ma obrysu ani stylu zastosowanego do prostokąta, więc nie jest on widoczny. Czy ktoś jest świadomy sposobu konwersji SVG ze stylami CSS na obraz PDF w Pythonie?
muszę zrobić miniatury wizualizacje D3, jak dotąd najlepszy wymyśliłem jest nieco zagmatwana konfiguracja za pomocą phantomjs do renderowania SVG. Ponieważ phantomjs jest prawdziwą przeglądarką Webkit, SVG jest renderowane dokładnie tak, jak wersja przeglądarki (istnieje moduł phantompy, ale jest to uszkodzenie w moim środowisku i brak mi czasu na zbadanie przyczyny). –
Dokumentacja CairoSVG ma tę notatkę: CairoSVG może użyć lxml do parsowania pliku SVG, a tinycss plus cssselect do zastosowania CSS nie zawartego w atrybucie stylu tagów. Jeśli te pakiety nie są dostępne, CSS będzie obsługiwany tylko w atrybutach stylu. JEŚLI zainstalujesz pakiety tinycss i cssselect, może to rozwiązać twój problem. Zobacz sekcję Zależności tutaj: http://cairosvg.org/user_documentation/ – MonkeyWrench
@MonkeyWrench: jest to najlepsza wskazówka do tej pory, jeśli zależy Ci na tym, możesz zrobić odpowiedź i zbierz nagrodę. –