jro*_*ler 12 python svg pdf-generation
我正在尝试使用Python从SVG图像生成PDF图像.我试过CairoSVG和svglib.问题是,在这两种情况下,生成的PDF都没有应用任何嵌入的CSS样式.
这是一个简单的SVG文件,它应该呈现一个带有黑色边框的蓝色矩形:
<?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>
Run Code Online (Sandbox Code Playgroud)
使用CairoSVG渲染此SVG的PDF时,PDF图像将呈现为黑色矩形.使用svglib时,没有应用于矩形的笔触或样式,因此它不可见.是否有人知道在CSS中将带CSS样式的SVG转换为PDF图像的方法?
Jam*_*Lim 10
(在@MonkeyWrench的帮助下,因为他没有发布答案.)
根据文件,
CairoSVG可以使用lxml来解析SVG文件,并使用tinycss和cssselect来应用不包含在标签的style属性中的CSS.如果这些包不可用,则仅在样式属性中支持CSS.
首先,我安装了所有依赖项,
$ pip3 install cairosvg lxml tinycss cssselect
Run Code Online (Sandbox Code Playgroud)
然后我创建image.svg
了以下内容:
<?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>
Run Code Online (Sandbox Code Playgroud)
最后,我执行了cairosvg
$ cairosvg image.svg -o image.pdf
Run Code Online (Sandbox Code Playgroud)
果然,这是一个蓝色的矩形.
归档时间: |
|
查看次数: |
2022 次 |
最近记录: |