从 SVG 输入生成 PDF

新手上路,请多包涵

我正在尝试在 Django 应用程序中使用 Python 从 SVG 输入文件生成 PDF。

我已经找到了 2 个可行的解决方案:cairo+rsvg 和 imagemagick,但它们都有一个问题:它们有一些我不想在服务器上安装的奇怪依赖项,例如 DBUS 和 GTK。

所以我要求另一种从 SVG 生成 PDF 的方法,而不必在服务器上安装所有这些依赖项。

原文由 Julian 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 510
2 个回答

你考虑 过 svglib 吗?

它看起来很有前途,特别是因为 reportlab 是 Django 文档中的 特色 pdf 工具

 from svglib.svglib import svg2rlg
from reportlab.graphics import renderPDF

drawing = svg2rlg("file.svg")
renderPDF.drawToFile(drawing, "file.pdf")

原文由 arie 发布,翻译遵循 CC BY-SA 4.0 许可协议

是的,我还建议使用 svglibreportlab 库 来完成这项任务,尽管 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 库采取的步骤。

原文由 simoes 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏