我正在尝试在 Django 应用程序中使用 Python 从 SVG 输入文件生成 PDF。
我已经找到了 2 个可行的解决方案:cairo+rsvg 和 imagemagick,但它们都有一个问题:它们有一些我不想在服务器上安装的奇怪依赖项,例如 DBUS 和 GTK。
所以我要求另一种从 SVG 生成 PDF 的方法,而不必在服务器上安装所有这些依赖项。
原文由 Julian 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的,我还建议使用 svglib 和 reportlab 库 来完成这项任务,尽管 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 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
你考虑 过 svglib 吗?
它看起来很有前途,特别是因为 reportlab 是 Django 文档中的 特色 pdf 工具。