Report thẻ thành viên hai bài trước in ra rất đẹp — nhưng nó tự động dùng A4 dọc, khổ mặc định của công ty. Nếu bạn muốn in tấm thẻ trên A5 nằm ngang, hay một khổ tự do cho tem/nhãn, với lề riêng, thì cần khai một report.paperformat rồi gán cho report. Bài này đổi report sang A5 ngang và đo khổ trang PDF để chứng minh nó thật sự đổi.
Khai khổ giấy và gán vào report
report.paperformat là một model lưu mọi thông số vật lý của trang in: khổ, hướng, lề, DPI. Khai một bản ghi rồi trỏ report tới nó qua paperformat_id:

Hình 1: report.paperformat với format="A5", orientation="Landscape", các lề (mm) và dpi. Report trỏ tới nó bằng paperformat_id. Nếu format="custom", khai thêm page_width/page_height (mm) cho khổ tự do — hợp cho tem, nhãn dán kích thước lạ.
Bản in ra đúng A5 ngang
Gán xong, render report cho thẻ VIP-0001. Trang PDF giờ nằm ngang:

Hình 2: Trang PDF thật ở khổ A5 nằm ngang — rõ ràng rộng hơn cao (khác hẳn A4 dọc). Cùng nội dung template (bảng lịch sử, tổng cộng 120) nhưng trải trên một tờ ngang. Chân trang có "Page 1/1".
Đo khổ trang — bằng chứng thật
Để chắc chắn paperformat đã áp (chứ không phải nhìn nhầm), tôi render PDF rồi đo kích thước trang bằng PyPDF2:

Hình 3: Đo MediaBox trang PDF: 595 × 420 pt = 210 × 148 mm — đúng A5 nằm ngang. So với A4 dọc mặc định (595 × 842 pt): chiều cao đổi từ 842 xuống 420. Con số không nói dối: paperformat đã đổi khổ trang thật.
Lưu ý quan trọng: chỉ áp cho PDF
Đây là điểm dễ vấp: paperformat chỉ áp cho bản PDF, không ảnh hưởng bản HTML. Nếu bạn xem qua /report/html/<name>/<id> (cách soi nhanh ở bài trước), trang vẫn hiện như cũ — vì đó là HTML trong trình duyệt, không có khái niệm "khổ giấy". Chỉ khi render PDF (_render_qweb_pdf hay bấm In), wkhtmltopdf mới đọc paperformat để đặt kích thước trang. Đừng hoảng khi thấy HTML không đổi.
Vài lưu ý khác
- Không gán
paperformat_id→ report dùng khổ mặc định của công ty (res.company.paperformat_id, thường A4). Muốn đổi mặc định cho mọi report thì sửa ở công ty. format="custom"mở rapage_width/page_height(mm) cho khổ bất kỳ — tem sản phẩm, nhãn dán, thẻ nhựa...dpiảnh hưởng độ nét và kích thước file; 90 là đủ cho tài liệu thường, tăng lên nếu in ảnh chất lượng cao.header_spacinglà khoảng cách giữa header và nội dung — chỉnh khi header bị đè hay hở quá.
Ba ý mang về
report.paperformatkhai thông số vật lý của trang in (format,orientation, cácmargin_*,dpi); gán cho report bằngpaperformat_id.format="custom"+page_width/page_heightcho khổ tự do.- paperformat CHỈ áp cho PDF — bản HTML (
/report/html) không đổi theo nó; đừng nhầm khi soi nhanh bằng HTML. - Không gán thì dùng khổ mặc định công ty (thường A4); đo bằng chứng qua
MediaBoxcủa PDF — đã xác nhận A5 ngang 595×420 pt so với A4 dọc 595×842 pt.
Report giờ đúng khổ, đúng nội dung. Bài sau đụng tới việc thực tế nhất: Phần sau về kế thừa report có sẵn — cách chèn thêm nội dung của bạn vào một mẫu in chuẩn của Odoo (hoá đơn, phiếu...) mà không viết lại từ đầu.