如何在Python中将包含SVG的HTML文档转换为PDF文件
我需要修改一些Python代码,使用QPrinter将HTML转换为PDF。HTML包含一些PNG,但现在需要用SVG替换它们。我真的不知道怎么做。我天真地用等价的SVG替换了PNG,但是SVG没有出现在生成的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.
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。。。