Este dilema se puede abordar de diferentes formas, por lo tanto te dejamos la respuesta más completa en nuestra opinión.
Solución:
Ayer logré usar svglib para agregar una imagen SVG como un Reportlab Flowable.
entonces este dibujo es una instancia de Reportlab Drawing, mira aquí:
from reportlab.graphics.shapes import Drawing
un dibujo de reportlab hereda Flowable:
from reportlab.platypus import Flowable
Aquí hay un ejemplo mínimo que también muestra cómo puede escalarlo correctamente (solo debe especificar la ruta y el factor):
from svglib.svglib import svg2rlg
drawing = svg2rlg(path)
sx = sy = factor
drawing.width, drawing.height = drawing.minWidth() * sx, drawing.height * sy
drawing.scale(sx, sy)
#if you want to see the box around the image
drawing._showBoundary = True
Como mencionó skidzo, puedes hacer esto totalmente con el svglib paquete, que puede encontrar aquí: https://pypi.python.org/pypi/svglib/
Según el sitio web, Svglib es una biblioteca de Python puro para leer archivos SVG y convertirlos (en un grado razonable) a otros formatos utilizando el kit de herramientas de código abierto ReportLab.
Puedes usar pepita para instalar svglib.
Aquí hay un script de ejemplo completo:
# svg_demo.py
from reportlab.graphics import renderPDF, renderPM
from reportlab.platypus import SimpleDocTemplate
from svglib.svglib import svg2rlg
def svg_demo(image_path, output_path):
drawing = svg2rlg(image_path)
renderPDF.drawToFile(drawing, output_path)
if __name__ == '__main__':
svg_demo('/path/to/image.svg', 'svg_demo.pdf')
valoraciones y comentarios
Eres capaz de añadir valor a nuestro contenido contribuyendo tu veteranía en las explicaciones.