Sí, me gustaría también sugieren el uso de svglib y la reportlab library para esta tarea, aunque hay muy poca documentación de la biblioteca svglib. De hecho, me sugeriría hacer lo siguiente en su vista de 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
De esta manera no será necesario guardar un archivo temporal en el servidor para que el usuario sólo tiene que descargar localmente de todos modos. El ejemplo de svglib que se proporciona requiere proporcionar una ruta a un archivo ... pero ¿por qué no solo proporciona el archivo en sí?
He documentado los pasos que he tomado usando Django y la biblioteca SVG de Raphael here.
Esto es EXACTAMENTE mi problema, pero tengo otra limitación: ser compatible con Unicode (para textos no ingleses dentro de svg). – saeedgnu