Convertir SVG con CSS incrustado a PDF en Python

Estoy tratando de generar una imagen PDF a partir de una imagen SVG usando Python. He probado tanto CairoSVG como svglib . El problema es que, en ambos casos, los PDF generados no tienen ninguno de los estilos CSS incrustados aplicados.

Aquí hay un archivo SVG simple que debe representar un rectángulo azul con un borde negro:

        

Cuando se renderiza un PDF de este SVG utilizando CairoSVG, la imagen PDF se representa como un rectángulo negro. Al usar svglib, no se aplica ningún trazo o estilo al rectángulo, por lo que no es visible. ¿Alguien sabe de una manera de convertir un SVG con estilos CSS a una imagen PDF en Python?

(Con la ayuda de @MonkeyWrench, ya que no publicó una respuesta).

Según la documentación ,

CairoSVG puede usar lxml para analizar el archivo SVG, y tinycss plus cssselect para aplicar CSS no incluido en el atributo de estilo de las tags. Si estos paquetes no están disponibles, CSS solo será compatible con los atributos de estilo.

Para empezar, instalé todas las dependencias,

 $ pip3 install cairosvg lxml tinycss cssselect 

Luego creé image.svg con los siguientes contenidos:

         

Finalmente, ejecuté cairosvg.

 $ cairosvg image.svg -o image.pdf 

Y efectivamente, era un rectángulo azul.

azul

¿Has intentado usar el atributo de estilo en su lugar?

    

En última instancia, es lo mismo que ya tiene, pero quizás CairoSVG omita los elementos de estilo en su HTML.

Yo sugeriría usar PhantomJS .

Básicamente es un WebKit sin cabeza, manejado por Javascript.

Busque en el script rasterize.js .

Puede tomar las coordenadas y exportar (rasterizar) esa sección como una imagen. Entonces puedes usar básicamente cualquier generador de PDF, incrustando la imagen. Alternativamente, puede usar otro script para generar el archivo PDF con PhantomJS.