2016-04-23 207 views
0

我试图保存/使用python使用Python将网页保存为PDF?

我已经生成的,包含了一些计算结果,并伴随有一个“导出为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

有点不对劲!文件不是网页浏览器元素。需要文件内的html元素作为对象。可以作为base64编写,没有任何限制。 – dsgdfg

+0

谢谢你的回复。但你能否进一步澄清?我不认为我明白你的意思。 – vana

+0

您的问题可能有点宽泛,因为每个导出格式都如此不同。你可能会更好地限制你的问题到一个特定的格式,并从那里开始。 – dirn

回答

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') 

HTML文件 Web Page HTML

PDF文件 Web Page PDF

+0

非常感谢你Parfait!我现在正在测试它。 – vana