iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
Odoo

用 Odoo 打造數位轉型引擎:從基礎建置到跨領域應用系列 第 16

Day 16:Odoo 報表與 QWeb PDF 輸出

  • 分享至 

  • xImage
  •  

在企業日常營運中,報表(Reports)是不可或缺的一部分,例如:發票、訂單、出貨單、財務報表等。Odoo 透過 QWeb 模板系統,提供了強大且彈性的 PDF 報表輸出功能。今天我們將介紹 Odoo 報表的架構,並實作一個簡單的 PDF 報表。


1. Odoo 報表架構

Odoo 的報表主要由三個部分組成:

  1. 報表定義 (Report Action):指定報表對應的模型與模板。
  2. QWeb 模板:以 XML/QWeb 語法定義報表的樣式與內容。
  3. PDF 輸出引擎:由 wkhtmltopdf 工具將 HTML/QWeb 轉換為 PDF。

2. 定義報表動作

在模組中新增 report.xml,定義報表名稱與對應模型。

<odoo>
  <report
    id="report_library_book"
    model="library.book"
    string="Library Book Report"
    report_type="qweb-pdf"
    name="library.report_library_book_template"
    file="library.report_library_book_template"
  />
</odoo>
  • model:指定報表對應的模型。
  • report_type="qweb-pdf":輸出格式為 PDF。
  • namefile:對應到 QWeb 模板的 ID。

3. 建立 QWeb 報表模板

views/report_library_book.xml 中定義模板:

<odoo>
  <template id="report_library_book_template">
    <t t-call="web.html_container">
      <t t-foreach="docs" t-as="book">
        <div class="page">
          <h2>書籍報表</h2>
          <p><strong>書名:</strong> <span t-field="book.name"/></p>
          <p><strong>作者:</strong> <span t-field="book.author"/></p>
          <p><strong>出版日期:</strong> <span t-field="book.published_date"/></p>
        </div>
      </t>
    </t>
  </template>
</odoo>
  • docs:代表報表所綁定的紀錄集合。
  • t-field:直接渲染模型的欄位值。
  • div.page:表示每一筆紀錄都會輸出在一頁 PDF 中。

4. 呼叫報表

完成設定後,進入 Library → Books,選擇一本書,點選「列印 → Library Book Report」,即可下載 PDF 報表。

輸出的 PDF 檔案會自動套用模板格式,並由 wkhtmltopdf 工具渲染成正式文件。


5. 報表進階技巧

  • 自訂樣式:可在模板中加入 CSS。
  • 多語系支援:配合 Odoo i18n 機制,自動翻譯報表內容。
  • 公司資訊:可透過 res.company 自動帶入公司 Logo 與聯絡資訊。
  • 合併輸出:一次選擇多筆紀錄,Odoo 會自動合併成一個 PDF。

小結

Odoo 的 QWeb 報表提供了完整的 PDF 輸出功能,適用於各種商業文件:

  • Report Action:定義報表入口。
  • QWeb 模板:控制內容與樣式。
  • wkhtmltopdf:將 HTML 轉換為正式 PDF。

在下一篇文章中,我將介紹 Odoo 工作流自動化(Workflow 與 Business Process Management),讓流程能更智慧地流轉。


上一篇
Day 15:Odoo 自動化流程(Server Actions 與 Scheduled Actions)
系列文
用 Odoo 打造數位轉型引擎:從基礎建置到跨領域應用16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言