如何在Python中将包含SVG的HTML文档转换为PDF文件

如何在Python中将包含SVG的HTML文档转换为PDF文件,python,html,pdf,svg,qprinter,Python,Html,Pdf,Svg,Qprinter,我需要修改一些Python代码,使用QPrinter将HTML转换为PDF。HTML包含一些PNG,但现在需要用SVG替换它们。我真的不知道怎么做。我天真地用等价的SVG替换了PNG,但是SVG没有出现在生成的PDF中。更具体地说,是这样的 from PyQt4.QtGui import QTextDocument, QPrinter, QApplication import sys app = QApplication(sys.argv) doc = QTextDocument() doc.

我需要修改一些Python代码,使用QPrinter将HTML转换为PDF。HTML包含一些PNG,但现在需要用SVG替换它们。我真的不知道怎么做。我天真地用等价的SVG替换了PNG,但是SVG没有出现在生成的PDF中。更具体地说,是这样的

from PyQt4.QtGui import QTextDocument, QPrinter, QApplication
import sys

app = QApplication(sys.argv)
doc = QTextDocument()
doc.setHtml('''
<html>
     <body>
        <h1>Circle</h1>
            <p><img src="circle.svg"/></p>
     </body>
</html>
 ''')
printer = QPrinter()
printer.setOutputFileName("circle.pdf")
printer.setOutputFormat(QPrinter.PdfFormat)
doc.print_(printer)
从PyQt4.QtGui导入QTextDocument、QPrinter、QApplication
导入系统
app=QApplication(sys.argv)
doc=QTextDocument()
doc.setHtml(“”)
圆圈

''') 打印机=QPrinter() printer.setOutputFileName(“circle.pdf”) printer.setOutputFormat(QPrinter.PdfFormat) 文件打印(打印机)
其中circle.svg由

<svg xmlns="http://www.w3.org/2000/svg">
    <circle cx="50" cy="50" r="40" fill="orange" /> 
</svg>

似乎不起作用,而用等效的PNG替换SVG会生成完美的PDF。有人知道如何解决这个问题吗

我最终使用了pdfkit(请参阅),遵循此处给出的说明:。Python代码现在如下所示:

import base64
import os
import pdfkit
with open("circle.svg") as f:
    data=f.read()
    encoded_string = base64.b64encode(data.encode('utf-8'))
    b64 = encoded_string.decode('utf-8')
    html = '''
    <html>
        <body>
            <h1>Circle</h1>
                <p><img alt="" src="data:image/svg+xml;base64,''' + b64 + '''" /></p>
        </body>
    </html>
    '''
    pdfkit.from_string(html, "circle.pdf")
导入base64
导入操作系统
导入pdfkit
将open(“circle.svg”)作为f:
data=f.read()
encoded_string=base64.b64encode(data.encode('utf-8'))
b64=编码的字符串。解码('utf-8')
html=“”
圆圈

''' pdfkit.from_string(html,“circle.pdf”)
将SVG修改为:

<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
    <circle cx="50" cy="50" r="40" fill="orange" /> 
</svg>


我想在不使用其他库的情况下修复代码仍然是可能的,但是这个解决方案对我来说是可行的。

我们仍在努力寻找一个很好的解决方案,但欢迎希望为JS和其他开发做出贡献的人提供帮助。下个星期我们将把所有的东西都搬到Github,但是你可以看看这里。在末尾包含SVG。。。