1. wkhtmltopdf คืออะไร?
wkhtmltopdf เป็นเครื่องมือโอเพ่นซอร์สที่ใช้สำหรับแปลง HTML เป็น PDF โดยอาศัย WebKit engine ซึ่งเป็น engine เดียวกับที่ใช้ในเบราว์เซอร์ เช่น Safari จึงสามารถแสดงผล HTML และ CSS ได้แม่นยำมาก
Odoo นำ wkhtmltopdf มาใช้ผ่านโมดูล report เพื่อสร้าง PDF จาก QWeb template (เทมเพลต HTML ที่ใช้ใน Odoo)
2. การติดตั้ง wkhtmltopdf
การใช้งาน Odoo เพื่อสร้าง PDF จำเป็นต้องติดตั้ง wkhtmltopdf บนเซิร์ฟเวอร์ก่อน:
โค้ด: เลือกทั้งหมด
sudo apt install wkhtmltopdf
โค้ด: เลือกทั้งหมด
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.6/wkhtmltox_0.12.6-1.bionic_amd64.deb
sudo apt install ./wkhtmltox_0.12.6-1.bionic_amd64.deb
3. การสร้าง PDF Report Template
Odoo ใช้ QWeb เป็นภาษาหลักในการออกแบบเทมเพลตรายงาน ตัวอย่างเช่น:
โค้ด: เลือกทั้งหมด
<t t-name="my_module.report_sample">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="doc">
<div class="page">
<h2>รายงาน: <t t-esc="doc.name"/></h2>
<p>วันที่: <t t-esc="doc.date"/></p>
</div>
</t>
</t>
</t>
- <t t-name>: ชื่อเทมเพลต
- <t t-call="web.html_container">: เรียก layout มาตรฐานของ Odoo
- <t t-foreach>: วนลูปข้อมูลแต่ละเอกสาร
- <div class="page">: แต่ละหน้าของ PDF
ในไฟล์ XML ของโมดูล ต้องสร้าง report record:
โค้ด: เลือกทั้งหมด
<report
id="sample_report"
string="Sample Report"
model="your.model"
report_type="qweb-pdf"
name="my_module.report_sample"
file="my_module.report_sample"
print_report_name="(object.name or 'Sample') + ' Report'"/>
หลังจากติดตั้งโมดูลและกำหนดรายงานแล้ว ปุ่ม Print Report จะปรากฏในโมเดลที่กำหนด และสามารถกดเพื่อดาวน์โหลด PDF ได้ทันที
6. การตกแต่งรายงาน
- ใช้ CSS: สามารถเขียน CSS ในเทมเพลตได้ เช่น
โค้ด: เลือกทั้งหมด
<style>
h2 {
color: #0055A4;
border-bottom: 1px solid #000;
}
table th {
background-color: #eee;
}
</style>
- แทรกภาพโลโก้:
โค้ด: เลือกทั้งหมด
<img t-att-src="'/web/image/res.company/' + str(doc.company_id.id) + '/logo'" width="150"/>
โค้ด: เลือกทั้งหมด
<span class="page">หน้า <span class="pageNumber"/> จาก <span class="totalPages"/></span>
- แสดงผล HTML ได้แม่นยำ: รองรับ CSS/HTML ในระดับสูง ทำให้สามารถออกแบบสไตล์มืออาชีพ
- รองรับหลายภาษา: ใช้ฟอนต์ภาษาไทย ญี่ปุ่น หรืออารบิก ได้ตามที่ติดตั้ง
- แทรกภาพ โลโก้ และตารางได้ง่าย
- สามารถเรียกใช้งานแบบ dynamic จากฐานข้อมูลแบบอัตโนมัติ
- สั่งพิมพ์หลายหน้า หรือออกรายงานแบบกลุ่มได้
- ควรใช้ wkhtmltopdf เวอร์ชันที่ Odoo แนะนำเท่านั้น
- ตรวจสอบการติดตั้งฟอนต์ โดยเฉพาะหากใช้ภาษาไทย ต้องติดตั้งฟอนต์เช่น TH Sarabun New
- ใช้คำสั่ง debug เช่น odoo-bin --dev=all เพื่อดู template render
- หากใช้ Docker ควร map wkhtmltopdf และฟอนต์ให้ถูกต้อง
- สร้าง base template ของรายงาน เพื่อให้สามารถ reuse โครงสร้างได้ง่ายในหลายโมดูล
- ทดสอบรายงานกับข้อมูลจริงก่อน deploy production
- ใบเสนอราคา (Quotation): ออกแบบให้ดูเรียบร้อย มีโลโก้บริษัท ตารางรายการสินค้า รวมภาษี และลายเซ็น
- รายงานภาษี (Tax Summary): ดึงข้อมูลภาษีตามเดือน สร้างเป็นรายงานสรุปสำหรับส่งสรรพากร
- ใบเสร็จรับเงิน: แสดงยอดที่รับชำระพร้อม QR Code และเลขอ้างอิง
การสร้างรายงาน PDF ใน Odoo ด้วย wkhtmltopdf เป็นหนึ่งในความสามารถที่สำคัญและยืดหยุ่นมากที่สุดในระบบ ERP ช่วยให้ธุรกิจสามารถจัดทำรายงานที่เป็นมืออาชีพ และส่งมอบข้อมูลที่ถูกต้องแก่ลูกค้า ผู้บริหาร และหน่วยงานต่าง ๆ ได้อย่างมีประสิทธิภาพ ไม่ว่าจะเป็นใบเสนอราคา ใบกำกับภาษี หรือรายงานวิเคราะห์ภายใน การออกแบบเทมเพลตด้วย QWeb และใช้งาน wkhtmltopdf อย่างถูกต้อง จะช่วยให้ระบบรายงานขององค์กรคุณมีประสิทธิภาพสูง และตอบโจทย์ความต้องการทางธุรกิจได้อย่างแท้จริง
อ้างอิง
https://www.odoo.com/documentation/16.0/developer/reference/reports.html
https://github.com/wkhtmltopdf/wkhtmltopdf
https://www.odoo.com/forum/help-1/tag/wkhtmltopdf-774