Да, я бы также предложил использовать svglib и reportlab library для этой задачи, хотя документации библиотеки svglib очень мало. Я бы на самом деле предложил сделать следующее в вашем представлении Django:
from svglib.svglib import SvgRenderer
from reportlab.graphics import renderPDF
import xml.dom.minidom
@csrf_exempt
def export_svg(request):
# Get data from client side via POST variables
svg = request.POST.get("svg")
doc = xml.dom.minidom.parseString(svg.encode( "utf-8" ))
svg = doc.documentElement
# Create new instance of SvgRenderer class
svgRenderer = SvgRenderer()
svgRenderer.render(svg)
drawing = svgRenderer.finish()
# Instead of outputting to a file, we simple return
# the data and let the user download to their machine
pdf = renderPDF.drawToString(drawing)
response = HttpResponse(mimetype='application/pdf')
response.write(pdf)
# If one were to remove the 'attachment; ' from this line
# it would simple invoke the browsers default PDF plugin
response["Content-Disposition"]= "attachment; filename=converted.pdf"
return response
Таким образом, вам никогда не нужно сохранять временный файл на сервере, чтобы пользователь мог в любом случае просто загрузить его локально. Приведенный пример svglib требует указания пути к файлу ... но почему бы просто не указать сам файл?
Я задокументировал шаги, которые я предпринял, используя Django и библиотеку Raphael SVG здесь .