Bỏ qua để đến nội dung

Auto-convert PDF (.docx → .pdf)

Sau khi render .docx từ template, convert sang PDF để:

  • Gửi KH (PDF không sửa được, giữ format perfect)
  • Ký điện tử (roadmap Q4 2026)
  • In / archive lâu dài

Parkone dùng LibreOffice CLI (open source, free) để convert.

odoo:19 base image không có LibreOffice. Extend Dockerfile:

FROM odoo:19
USER root
RUN apt-get update && apt-get install -y --no-install-recommends \
libreoffice \
fonts-liberation \
fonts-open-sans \
fonts-noto-cjk \
&& rm -rf /var/lib/apt/lists/*
USER odoo

Add vào deploy/Dockerfile.odoo cùng với docxtpl:

FROM odoo:19
USER root
RUN pip install --break-system-packages --no-cache-dir docxtpl && \
apt-get update && apt-get install -y --no-install-recommends \
libreoffice \
fonts-liberation fonts-open-sans fonts-noto-cjk && \
rm -rf /var/lib/apt/lists/*
USER odoo
Terminal window
docker compose --env-file deploy/managed.env \
-f deploy/docker-compose.managed.yml build odoo
docker compose --env-file deploy/managed.env \
-f deploy/docker-compose.managed.yml up -d odoo
Terminal window
docker exec parkone-odoo which libreoffice
docker exec parkone-odoo libreoffice --headless --version
# → LibreOffice 7.x.x

File .docx attached vào record.

Nút bên cạnh attachment. Wizard mini:

  • Filename: default replace .docx.pdf
  • Quality: Standard / High (Standard = balance size/quality)
Terminal window
libreoffice --headless \
--convert-to pdf:writer_pdf_Export \
--outdir /tmp/pdf-convert-<uuid> \
/tmp/pdf-convert-<uuid>/input.docx

Mất 2-5 giây cho doc 10 trang. 20+ trang có thể 10-15s.

  • Đọc file PDF từ /tmp/pdf-convert-<uuid>/output.pdf
  • Save vào ir.attachment link với record
  • Original .docx giữ nguyên (không xoá)

Record giờ có 2 attachments: .docx + .pdf.

--convert-to pdf
  • Font embedded
  • Images JPEG 75% quality
  • File size ~200-500 KB per doc 10 trang
  • Print quality OK
  • Screen readable

Default. Dùng cho HĐ / Báo giá thông thường.

Add watermark “DRAFT” hoặc “CONFIDENTIAL”:

  1. Trong template .docx original — Insert → Watermark trong Word
  2. Save template
  3. Render → PDF sẽ có watermark

Watermark áp cho toàn document, không per-page selective.

  1. Wizard convert → tick “Password protect”
  2. Nhập password (min 6 chars)
  3. Convert command:
    --convert-to 'pdf:writer_pdf_Export:{"Password":"<pw>"}'
  4. PDF output cần password để mở

Gửi password cho KH qua kênh khác (SMS / Zalo) — không email cùng file.

Q4 2026: tích hợp VnEID / DocuSign để ký PDF điện tử tự động.

Hiện tại Đại phải:

  • Download PDF
  • Ký giấy → scan
  • Upload lại

Hoặc dùng external service (DocuSign) — attach signed PDF vào record.

Convert nhiều .docx cùng lúc:

  1. Filter list attachments trên record → tick nhiều .docx
  2. Menu Action → “Convert all to PDF”
  3. Backend loop convert từng file
  4. Output: N PDFs attached

Mất N × 3 seconds. Async — Đại có thể làm việc khác trong lúc chờ.

Sau khi convert, click PDF attachment → mở inline preview trong browser (Odoo built-in PDF viewer):

  • Zoom / pan
  • Page navigation
  • Download

Không cần external app.

Nếu template dùng font Việt (Times New Roman, Arial, Be Vietnam Pro):

  • Verify font install trong container: docker exec parkone-odoo fc-list | grep -i "Vietnam"
  • Nếu miss → install custom font (xem OnlyOffice → Font support)

Font missing → PDF render fallback → dấu hỏi chấm ♀ thay vì tiếng Việt.

Doc sizeConvert time
5 pages, text-only1-2s
10 pages, few images3-5s
20 pages, many images8-15s
50 pages, tables + images20-40s

Nếu > 40s → xem xét async job (Odoo cron) thay vì on-click.

Cho doc lớn (50+ trang):

  1. Wizard convert với option “Background job”
  2. Odoo tạo queue.job (needs queue_job module)
  3. Return immediately, notify user “Đang convert, sẽ ping khi xong”
  4. Worker convert async
  5. Khi xong → notification pop-up + attach PDF

Cần Admin install queue_job module + config worker.

  • Verify .docx mở được trong Word bình thường
  • Verify font install
  • Test manual: docker exec parkone-odoo libreoffice --headless --convert-to pdf /tmp/test.docx
  • Convert với Standard (default), không High
  • Compress ảnh trong .docx trước convert
  • Nếu vẫn lớn — Google Drive link thay attach
  • Word template có Heading 1/2/3 styles
  • Convert command auto-generate bookmarks (default LibreOffice behavior)
  • Container timeout default 60s
  • Increase: env LIBREOFFICE_CONVERT_TIMEOUT=180
  • Or async convert (xem trên)
Chia sẻ: