วิธีการแปลงไฟล์ .html เป็น pdf ด้วย wkhtmltopdf ร่วมกับ flask

แชร์ความรู้ภาษา Python ไพทอน การเขียนโปรแกรมภาษาไพทอน

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
jirawoot
PHP Super Hero Member
PHP Super Hero Member
โพสต์: 557
ลงทะเบียนเมื่อ: 17/06/2019 10:30 am

วิธีการแปลงไฟล์ .html เป็น pdf ด้วย wkhtmltopdf ร่วมกับ flask

โพสต์โดย jirawoot » 20/07/2019 11:48 am

วิธีการแปลงไฟล์ .html เป็น pdf ด้วย wkhtmltopdf ร่วมกับ flask
flask คือ เป็นตัวที่ใช้สำหรับการสร้างเว็บไซต์ ซึ่งสามารถใช้จัดการหน้าเว็บไซต์ wkhtmltopdf คือ เป็นโปรแกรมที่ใช้สำหรับการนำ HTML มาแปลงเป็น PDF นะครับ สำหรับคนที่กำลังหา วิธีการนำไฟล์ html มาแปลงเป็น pdf นะครับ ผมมีวิธีมาแชร์ แต่ที่จริงแล้ว ตัว wkhtmltopdf สามารถนำ linkurl ของหน้าเว็บไซต์มาแปลงได้เลยก็ได้ แต่วันนี้ผมจะมาแชร์ในการ upload file เข้ามาแปลงนะครับวิธีมีดังนี้นะครับ และมีในรูปแบบของ cURL อีกด้วยครับ

รูปแบบ curl มีคำสั่งดังนี้

โค้ด: เลือกทั้งหมด

curl -i -X POST -F fileupload=@[ชื่อไฟล์ html ] http://localhost:5000/upload

ชื่อไฟล์ ต้องมีอยู่ในตำแหน่งปัจจุบันนะครับ ถ้าตำเเหน่งอื่นต้องระบุ path ด้วย

ตัวอย่าง

โค้ด: เลือกทั้งหมด

curl -i -X POST -F fileupload=@google.html http://localhost:5000/upload


โค้ดไฟล์ที่จะ upload มาแปลงนะครับ

โค้ด: เลือกทั้งหมด

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>TEST</h3>
<h3>HTML</h3>
<h3>convert</h3>
<h3>PDF</h3>
</body>
</html>


โค้ด หน้า upload

โค้ด: เลือกทั้งหมด

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/upload" method="POST" enctype="multipart/form-data">
    <input type="file" name="fileupload"   placeholder="password" class="form-control" id="password" required><br>
    <input  type="submit" value="upload" class="btn btn-success">
</form>
</body>
</html>


ส่วนนี้จะโค้ดหน้า python

โค้ด: เลือกทั้งหมด

from flask import Flask, request,url_for, render_template, send_file
import os ,subprocess
UPLOAD_FOLDER = '/home/com001/PycharmProjects/test1/uploads'
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
@app.route('/')
def index():
        return render_template('home.html')
@app.route("/upload", methods=['POST'])
def uploaded():
    if request.method == 'POST':
        f = request.files['fileupload']
        f.save(os.path.join(app.config['UPLOAD_FOLDER'], f.filename))
        path_bin = 'wkhtmltopdf'
        str ='test.pdf'
        fileupload =os.path.join('uploads/', f.filename)
        path = os.path.join('pdf/', str)
        subprocess.call([path_bin,fileupload,path])
        path_sh = 'pdf/' + str
        response = send_file(path_sh)
        response.headers['Content-Type'] = 'application/pdf'
        response.headers['Content-Disposition'] = 'inline; filename=download.pdf'
        return response

if __name__ == '__main__':
    app.run(debug=True)


ในส่วน path ในโค้ด การเก็บไฟล์ที่เรา upload มาแปลงต้องแก้ไขตามเครื่องของคุณนะครับ

โค้ด: เลือกทั้งหมด

UPLOAD_FOLDER = '/home/com001/PycharmProjects/test1/uploads'


รูป directory file นะครับ
Selection_003.png
Selection_003.png (10.93 KiB) เปิดดู 57 ครั้ง

รูปหน้า upload
Selection_004.png
Selection_004.png (5.89 KiB) เปิดดู 57 ครั้ง

Selection_005.png
Selection_005.png (5.52 KiB) เปิดดู 57 ครั้ง

ผลในการแปลงนะครับ
Selection_006.png


อ้างอิง
http://www.gastonsanchez.com/visually-enforced/how-to/2017/11/10/Converting-HTML-files-to-PDF/
https://www.wkhtmltopdf.org/

ย้อนกลับไปยัง

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: 26 และ บุคคลทั่วไป 0 ท่าน