Bỏ qua, tới nội dung
Tài liệu APIv1

O3O DocBuilder và chuyển đổi

Ngôn ngữ kịch bản o3oscript

Tham chiếu o3oscript v1, kịch bản JSON khai báo để dựng văn bản, bảng tính và trình chiếu qua POST /v1/build: cấu trúc chung, đơn vị đo, meta, save, font, ràng buộc và lỗi; chi tiết từng thao tác nằm ở ba trang con.

Trong trang này

o3oscript là ngôn ngữ KHAI BÁO viết bằng JSON: bạn mô tả tài liệu muốn có chứ không viết lệnh. Không có biến, vòng lặp, điều kiện hay lời gọi hàm, nên kịch bản không thể chạy vô hạn hay chạm vào máy chủ. Vòng lặp và điều kiện nằm trong mã của bạn, nơi sinh ra JSON. Một kịch bản dựng đúng MỘT tài liệu thuộc một trong ba loại rồi lưu ra một hoặc nhiều định dạng.

JSONKhung nhỏ nhất của một kịch bản
{
  "o3oscript": 1,
  "type": "text",
  "meta": {
    "title": "Tên tài liệu"
  },
  "body": [
    {
      "type": "paragraph",
      "text": "Nội dung"
    }
  ],
  "save": [
    {
      "format": "docx"
    }
  ]
}

Cấu trúc chung#

Khoá ở gốc

  • o3oscriptintegerbắt buộc
    Phiên bản ngôn ngữ, luôn là 1.
  • typestringbắt buộc
    text (văn bản), sheet (bảng tính) hoặc slides (trình chiếu).
  • metaobjecttuỳ chọn
    Thuộc tính tài liệu, xem mục meta.
  • savearray, 1–5 phần tửbắt buộc
    Các tệp cần lưu, xem mục save.
  • pageobjecttuỳ chọn
    Chỉ text. Khổ giấy và lề.
  • styleobjecttuỳ chọn
    Chỉ text. Kiểu chữ mặc định.
  • headerobjecttuỳ chọn
    Chỉ text. Đầu trang.
  • footerobjecttuỳ chọn
    Chỉ text. Chân trang.
  • bodyarray, 1–20.000 khốituỳ chọn
    Bắt buộc khi type = text. Các khối nội dung theo thứ tự.
  • sheetsarray, 1–50 trang tínhtuỳ chọn
    Bắt buộc khi type = sheet.
  • slide_sizestringtuỳ chọnMặc định: 16:9
    Chỉ slides. 16:9 hoặc 4:3.
  • slide_styleobjecttuỳ chọn
    Chỉ slides. Kiểu chung của mọi trang chiếu.
  • slidesarray, 1–500 trang chiếutuỳ chọn
    Bắt buộc khi type = slides.

Ba loại tài liệu#

typeKhoá nội dungĐịnh dạng lưuTham chiếu
textpage, style, header, footer, bodydocx, odt, pdfo3oscript cho văn bản
sheetsheetsxlsx, ods, pdfo3oscript cho bảng tính
slidesslide_size, slide_style, slidespptx, odp, pdfo3oscript cho trình chiếu

Đơn vị đo#

  • Mọi độ dài (lề, khoảng cách, bề rộng, chiều cao, toạ độ) tính bằng milimét.
  • Cỡ chữ và độ dày viền tính bằng point (pt).
  • Màu là chuỗi #RRGGBB, ví dụ #1D55B8.
  • Giãn dòng tính theo phần trăm: 100 là dòng đơn, 150 là một dòng rưỡi.
  • Bề rộng cột của bảng văn bản là số TƯƠNG ĐỐI: các cột chia bề rộng bảng theo tỷ lệ.

Thuộc tính tài liệu: meta#

Đối tượng meta

  • titlestring, ≤ 255tuỳ chọn
    Tiêu đề tài liệu.
  • subjectstring, ≤ 255tuỳ chọn
    Chủ đề.
  • authorstring, ≤ 255tuỳ chọn
    Tác giả.
  • keywordsarray, ≤ 32 chuỗi, mỗi chuỗi ≤ 64tuỳ chọn
    Từ khoá.
  • descriptionstring, ≤ 2000tuỳ chọn
    Mô tả.
  • langstringtuỳ chọnMặc định: vi-VN
    Ngôn ngữ của tài liệu, dạng vi hoặc vi-VN; ảnh hưởng kiểm tra chính tả và ngắt từ.
JSONmeta
{
  "meta": {
    "title": "Hợp đồng cung cấp dịch vụ",
    "subject": "Hợp đồng số HD-2026-091",
    "author": "Phòng Pháp chế",
    "keywords": [
      "hợp đồng",
      "dịch vụ"
    ],
    "description": "Bản dựng tự động từ hệ thống quản lý hợp đồng.",
    "lang": "vi-VN"
  }
}

Tệp cần lưu: save#

Mỗi phần tử của save

  • formatstringbắt buộc
    Một trong docx, odt, pdf, xlsx, ods, pptx, odp, và phải hợp với type (xem bảng ba loại tài liệu).
  • filenamestring, 1–255tuỳ chọnMặc định: tai-lieu.<format>
    Tên tệp kết quả. Không chứa / \ : * ? " < > | hay ký tự điều khiển.
  • pdfabooleantuỳ chọnMặc định: false
    Chỉ có nghĩa khi format = pdf: xuất PDF/A-2b.
JSONLưu một bản docx và một bản PDF/A
{
  "save": [
    {
      "format": "docx",
      "filename": "hop-dong.docx"
    },
    {
      "format": "pdf",
      "filename": "hop-dong.pdf",
      "pdfa": true
    }
  ]
}

Font#

Tên font dài 1 tới 64 ký tự. Image DocBuilder v1 có: Liberation Sans, Liberation Serif, Liberation Mono, Carlito, Caladea, DejaVu Sans, Noto Sans, Noto Serif. Font không có thì LibreOffice tự thay bằng font gần nhất. Liberation Serif, Liberation Sans và Carlito có cùng số đo chữ với Times New Roman, Arial và Calibri, nên tài liệu dùng các font đó thường giữ được bố cục.

Kịch bản mẫu#

TệptypeĐơn vịNội dungXem
bao-gia.jsontext28Báo giá bản quyền: đầu và chân trang, bảng, danh sách lồng, ngắt trang.Văn bản
bang-luong.jsonsheet34Bảng lương hai trang tính: công thức, tham chiếu chéo trang tính, ngày, định dạng số.Bảng tính
gioi-thieu.jsonslides12Ba trang chiếu: trang bìa, gạch đầu dòng nhiều cấp, ảnh nhúng base64, ghi chú.Trình chiếu

Cả ba kịch bản đều hợp lệ theo lược đồ và dùng được ngay với POST /v1/build. Cách đếm đơn vị kịch bản nằm ở trang Dựng tài liệu.

Ràng buộc kiểm lúc chạy#

  • Mọi hàng của một bảng văn bản phải có cùng số ô với header hoặc columns.
  • Danh sách lồng tối đa 3 cấp.
  • Tên trang tính không được trùng nhau.
  • Ảnh base64 phải giải mã được và không quá 10 MB.
  • Ảnh theo url chịu quy tắc chống SSRF như mọi URL khác mà DocBuilder tự tải.

Đọc lỗi kịch bản#

Lỗi kịch bản chỉ vị trí bằng JSON Pointer: /body/2/level là khoá level của phần tử thứ ba trong body (đánh số từ 0). script_invalid liệt kê mọi chỗ sai lược đồ trong detail.errors; script_error chỉ một chỗ trong detail.path; script_too_large báo detail.unitsdetail.limit.

422Ví dụ script_invalid.
{
  "error": {
    "code": "script_invalid",
    "message": "Kịch bản không hợp lệ.",
    "detail": {
      "errors": [
        {
          "path": "/body/2/level",
          "message": "7 lớn hơn giá trị tối đa 6"
        }
      ]
    },
    "request_id": "req_0123456789abcdef"
  }
}

Lược đồ JSON Schema#

Lược đồ chính thức là JSON Schema draft-07, $id https://office.o3o.vn/api/schema/o3oscript-v1.schema.json, có sẵn trong image DocBuilder ở /app/o3oscript-v1.schema.json. Cách kiểm kịch bản ở phía bạn bằng Python hoặc JavaScript: xem Dựng tài liệu.

Sắp có#

Sắp có

Chưa có trong o3oscript v1 (khoá lạ bị lược đồ từ chối): biểu đồ, gộp ô trong bảng văn bản, mục lục tự động, chú thích cuối trang, kiểu chữ đặt tên, bảng tổng hợp (pivot), định dạng có điều kiện, hiệu ứng chuyển trang chiếu, mẫu trang chiếu tuỳ biến, tham chiếu trang tính kiểu dấu chấm than của Excel.

Tham chiếu theo loại tài liệu#