我尝试使用python
保存/导出完整的网页结果为PDF我已经生成了一个网页,其中包含一些计算结果和一个评论部分,其中附有"导出为PDF"按钮。
到目前为止我所做的如下:
from flask import Flask, session, redirect, url_for, escape, request, Response
app = Flask(__name__)
@app.route('/result', methods=['GET', 'POST'])
def viewResult():
if request.method == 'POST':
if 'export' in request.form:
x = "XMLXMLXMLXML"
request.headers['Content-Type: application/pdf']
request.headers["Content-Disposition: attachment; filename='x.pdf'"]
return x
return ''
else:
global result
result = 'xml'
html = ''
html += '<html>'
html += '<body>'
html += '<p>Result</p>'
html += '<a href="http://127.0.0.1:5000/">Back</a>'
html += '<div>'
html += '<b>Result:</b>'
html += '<textarea name="result" readonly>' + result + '</textarea>'
html += '<form method="POST">'
html += '<br>'
html += '<textarea name="content" placeholder="Enter a comment"></textarea>'
html += '<p></p>'
html += '<input type="submit" name="export" value="Save">'
html += '</form>'
html += '</div>'
html += '</body>'
html += '</html>'
return html
if __name__ == "__main__":
app.run()
到目前为止,我已经测试/研究了几种方法,但似乎没有一种方法能够在我的情况下运行。 请原谅我的编码逻辑。我不是蟒蛇专家:x
那我在这里做错了什么?
答案 0 :(得分:1)
考虑使用流行的开源wkhtmltopdf,只需传入 .html 文件和 .pdf 文件名即可在Python中外部调用。只需下载其可执行文件并使用它运行命令行。另外,您可以指定页面大小(-s A4
)和方向参数(-O landscape
)。此外,wkhtmltopdf适用于页面呈现CSS,如page-break-before: always
,page-break-inside: avoid !important;
等。
以下是使用发布的html字符串截屏的示例。将该方法集成到您应用的代码库中。
import os
...
result = 'xml'
html = ''
html += '<html>'
html += '<body>'
html += '<p>Result</p>'
html += '<a href="http://127.0.0.1:5000/">Back</a>'
html += '<div>'
html += '<b>Result:</b>'
html += '<textarea name="result" readonly>' + result + '</textarea>'
html += '<form method="POST">'
html += '<br>'
html += '<textarea name="content" placeholder="Enter a comment"></textarea>'
html += '<p></p>'
html += '<input type="submit" name="export" value="Save">'
html += '</form>'
html += '</div>'
html += '</body>'
html += '</html>'
# OUTPUT HTML PAGE
file = open('WebPage.html', 'w')
file.write(html)
file.close()
# OUTPUT PDF PAGE
os.system('/path/to/wkhtmltopdf /path/to/WebPage.html /path/to/WebPage.pdf')