使用Python将网页保存为PDF?

时间:2016-04-23 19:43:20

标签: python xml pdf flask

我尝试使用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

那我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

考虑使用流行的开源wkhtmltopdf,只需传入 .html 文件和 .pdf 文件名即可在Python中外部调用。只需下载其可执行文件并使用它运行命令行。另外,您可以指定页面大小(-s A4)和方向参数(-O landscape)。此外,wkhtmltopdf适用于页面呈现CSS,如page-break-before: alwayspage-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')

HTML文件 Web Page HTML

PDF文件 Web Page PDF