Django、svglib 和图像

1 投票
2 回答
1242 浏览
提问于 2025-04-16 11:41

我正在使用svglib这个库来在Django中渲染我的SVG文件(这些文件是从模板生成的)。在渲染的时候,似乎这个库在处理图片路径时出现了问题。我想知道有没有人实现过这个,或者知道更好的方法把包含图片的SVG转换成PDF?

编辑:我的视图代码:

def certificate_image(response, id, output):
    ...
    ...
    data = certificate_template.render(c)

    if output == 'pdf':   
        doc = xml.dom.minidom.parseString(data)
        svg = doc.documentElement

        svgRenderer = SvgRenderer()
        svgRenderer.render(svg)
        drawing = svgRenderer.finish()
        buffer = StringIO()
        renderPDF.drawToFile(drawing, buffer)
        response = HttpResponse(mimetype='application/pdf')
        response['Content-Disposition'] = 'attachment; filename=certificate.pdf'
        pdf = buffer.getvalue()
        buffer.close()
        response.write(pdf)

    return response    

2 个回答

0

我没有用过svglib,但有很多很棒的命令行工具可以把SVG格式转换成PDF格式。比如,Inkscape就有完整的命令行接口,可以在没有图形界面的情况下运行。想了解更多信息,可以查看它的手册页。还有一个不错的工具是Batik SVG Rasterizer,这个工具是用Java写的,也可以通过命令行来运行。最后,ImageMagick(命令行中的“convert”工具)也支持将SVG转换成其他的光栅和矢量格式。

你可能能猜到接下来要说什么。你可以使用Python的os.system函数来调用这些命令行工具,把结果保存到一个文件里,或者对于支持的工具,可以直接输出到标准输出(stdout),然后再把结果读入一个缓冲区。接下来就可以像现在这样使用这个缓冲区。

0

关于把SVG转换成HTML,这要看你要转换的SVG是什么,有时候转换后的结果是一样的。
如果你觉得这有用或者有任何问题,随时告诉我。

你可以去工具的说明页面,那里也有这个工具。

http://irunmywebsite.com/raphael/svgsource.php

撰写回答