【问题标题】:Saving a webpage as PDF using Python?使用 Python 将网页保存为 PDF?
【发布时间】:2016-08-17 08:49:34
【问题描述】:

我正在尝试使用 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()

到目前为止,我已经测试/研究了几种方法,但似乎没有一种方法适用于我的情况。 请原谅我的编码逻辑。我不是python专家:x

那么我在这里做错了什么?

【问题讨论】:

  • 有点不对劲!文件不是网络浏览器元素。需要文件内的 html 元素作为对象。可以无限制地写成base64。
  • 感谢您的回复。但是你能进一步澄清吗?我不认为我明白你的意思。
  • 您的问题可能有点宽泛,因为每种导出格式都如此不同。您最好将问题限制为特定格式并从那里开始。
  • 是的,非常感谢。

标签: python xml pdf flask


【解决方案1】:

考虑使用流行的开源wkhtmltopdf,您只需传入 .html 文件和 .pdf 文件名即可在 Python 中从外部调用它。只需下载其可执行文件并使用它运行命令行。此外,您还可以指定页面大小 (-s A4) 和方向参数 (-O landscape)。此外,wkhtmltopdf 与 page-break-before: alwayspage-break-inside: avoid !important; 等页面渲染 CSS 配合使用效果很好。

以下是使用张贴的 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 文件

PDF 文件

【讨论】:

  • 非常感谢冻糕!我现在将对其进行测试。
猜你喜欢
  • 2018-10-26
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 2019-09-11
  • 1970-01-01
  • 2012-06-13
相关资源
最近更新 更多