我想在python中将html文件转换为pdf。
html文件有一个javascript图表。
首先,我使用了weasyprint和pdfkit模块,但我发现这些模块不支持javascript。
所以现在我正在使用wkhtmltopdf模块。它将大多数html代码转换为pdf,但javascript除外。是否可以在python中将包含JavaScript图表的html文件转换为PDF?
或者我应该使用另一个模块?
以下是未出现在pdf文件中的JavaScript代码。
<script type="text/javascript">
FusionCharts.ready(function(){
var fusioncharts = new FusionCharts({
type: 'hlineargauge',
renderAt: 'chart_container',
width: '350px',
height: '170px',
dataFormat: 'json',
dataSource: {
"chart": {
"theme": "fint",
"caption": "Chart A",
"lowerLimit": "0",
"upperLimit": "20",
"chartBottomMargin": "40",
"valueFontSize": "11",
"valueFontBold": "z0"
},
"colorRange": {
"color": [{
"minValue": "0",
"maxValue": "11.5",
"label": "Low",
"code" : "#FDB881",
}, {
"minValue": "11.5",
"maxValue": "12.5",
"label": "Typical",
"code" : "#F18B36",
}, {
"minValue": "12.5",
"maxValue": "20",
"label": "High",
"code" : "#D2660D",
}]
},
"pointers": {
"pointer": [{
"value": "8",
'borderColor':'#333333',
'borderThickness':'3',
'borderAlpha':'100',
'bgColor':'#FF0000'
}]
},
}
}
);
fusioncharts.render();
});
</script>
wkhtmltopdf版本是0.12.4,命令是
$ wkhtmltopdf --javascript-delay 5000 test.html test.pdf
答案 0 :(得分:2)
以下是上一个StackOverflow问题的示例。 How to convert webpage into PDF by using Python
此示例使用库pfdkit
import pdfkit
pdfkit.from_url('http://google.com', 'out.pdf')
如果它没有呈现图表,您可以尝试使用带有pdfkit的iFrame来获得所需的结果!
以下是使用WeasyPrint的示例 首先,安装weasyprint。
pip install weasyprint
然后运行示例
python
>>> pdf = weasyprint.HTML('http://www.google.com').write_pdf()
>>> len(pdf)
92059
>>> file('google.pdf', 'w').write(pdf)
这是第三个例子,因为我很有趣。 :)
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
app = QApplication(sys.argv)
web = QWebView()
web.load(QUrl("http://www.yahoo.com"))
printer = QPrinter()
printer.setPageSize(QPrinter.A4)
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setOutputFileName("fileOK.pdf")
def convertIt():
web.print_(printer)
print "Pdf generated"
QApplication.exit()
QObject.connect(web, SIGNAL("loadFinished(bool)"), convertIt)
sys.exit(app.exec_())