2016-04-23 178 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