Формат шаблону

Короткий довідник для тих, хто пише власний файл .invoyatemplate.

Шаблон — це JSON-файл із розширенням .invoyatemplate. Він описує лише макет: які розділи має рахунок, у якому порядку і як вони виглядають. Дані підставляє Invoya, а всі підписи — «Кому виставлено», «Разом» — друкуються мовою, вибраною в застосунку.

Найпростіше почати з шаблону з галереї: завантажте його, змініть у будь-якому текстовому редакторі й відкрийте в Invoya — ви побачите результат, перш ніж додати шаблон.

Показано все, що може використовувати шаблон із "formatVersion": "1.3". Він працює в Invoya 1.3 і новіших версіях.

Файл

Ключі верхнього рівня.

КлючЗначенняЩо робить
formatобов’язково"invoya.invoice-template"Позначає файл як шаблон Invoya.
formatVersionобов’язково"1.3"Найстаріша версія Invoya, у якій працює шаблон, наприклад "1.3". Старіші версії файл не приймуть. Укажіть версію, у якій з’явився найновіший ключ або блок вашого шаблону, — вибір версії вище показує, що є в кожній.
idобов’язково"…"Унікальний ідентифікатор, наприклад com.yourname.paper. Якщо додати шаблон з ідентифікатором, який у вас уже є, вашу копію буде замінено.
nameобов’язково{ "en": "…", "de": "…", … }Назва в застосунку за кодом мови: en, de, ru, uk. en обов’язковий і використовується для всіх мов, яких немає в списку.
author"…"Хто створив шаблон.
page{ … }Розмір аркуша й поля. Див. нижче.
style{ … }Шрифт, розмір тексту й кольори. Див. нижче.
letterhead["business", …]за замовчуванням: []Ідентифікатори блоків, з яких складається ваша шапка. Застосунок показує їх як попередній перегляд у розділі «Дані компанії».
blocksобов’язково[ … ]Розділи рахунку згори донизу. Див. нижче.

page

Розміри — у пунктах: 1 pt — це 1/72 дюйма, аркуш A4 — 595 × 842 pt. Праве поле завжди дорівнює лівому.

КлючЗначенняЩо робить
size"a4"за замовчуванням: "a4"Аркуш. Поки що є лише A4.
margins.top72за замовчуванням: 72Відступ над першим блоком.
margins.left72за замовчуванням: 72Відступ ліворуч — і праворуч.
margins.bottom72за замовчуванням: 72Відступ під останнім рядком, після якого вміст переноситься на наступну сторінку.
margins.footer30за замовчуванням: 30Відстань від нижнього краю аркуша до нижнього колонтитула.

style

Усі ключі тут необов’язкові.

КлючЗначенняЩо робить
bodySize8.5за замовчуванням: 8Розмір тексту в пунктах.
font"sans" | "serif" | "mono" | "rounded" | "humanist"за замовчуванням: "sans"Шрифт за роллю: sans — Helvetica, serif — Times New Roman, mono — Courier, rounded — Avenir Next, humanist — Optima. Усі п’ять є на кожному Mac, iPhone та iPad, тож рахунок усюди виглядає однаково.
accent"#rrggbb"за замовчуванням: "#eff0f1"Колір заповненої смуги заголовка й шапки таблиці.
accentText"#rrggbb"за замовчуванням: "#000000"Колір тексту на акцентному кольорі. Темному акценту потрібен світлий текст.
logoHeight42Висота логотипа, коли він стоїть поруч із вашими даними. Без цього ключа логотип за висотою дорівнює блоку даних.

blocks

Блоки друкуються згори донизу в тому порядку, у якому їх перелічено. Кожен блок має type і може мати id — він потрібен лише для списку letterhead. Той самий тип можна використати кілька разів, особливо spacer.

"type": "business"

Дані вашої компанії з розділу «Дані компанії» та ваш логотип.

КлючЗначенняЩо робить
align"left" | "center" | "right"за замовчуванням: "right"З якого боку стоять дані.
logo"none" | "left" | "right" | "above" | "banner"за замовчуванням: "left"Де стоїть логотип. left і right ставлять його поруч із даними — це працює лише з протилежного від них боку; з того самого боку він переноситься над ними. above ставить його окремим рядком над даними, banner — великий логотип по центру над усім іншим.

"type": "spacer"

Порожнє місце.

КлючЗначенняЩо робить
heightобов’язково24У пунктах.

"type": "title"

Заголовок «Рахунок».

КлючЗначенняЩо робить
align"left" | "center" | "right"за замовчуванням: "center"Де він стоїть.
filledtrue | falseза замовчуванням: trueСтавить його на смугу акцентного кольору.

"type": "invoiceMeta"

Номер рахунку й дати.

КлючЗначенняЩо робить
align"left" | "center" | "right"за замовчуванням: "right"З якого боку вони стоять.
fields["number", "invoiceDate", "dueDate"]Які рядки показувати і в якому порядку.

"type": "client"

Кому виставлено рахунок.

КлючЗначенняЩо робить
caption"billTo"Додає над клієнтом рядок «Кому виставлено». Без цього ключа підпису немає.

"type": "items"

Таблиця позицій рахунку — єдиний блок, що переноситься на наступну сторінку, якщо рахунок довгий.

КлючЗначенняЩо робить
columns["index", "description", "unit", "qty", "rate", "amount"]Які стовпці показувати і в якому порядку: номер рядка, опис, одиниця, кількість, ставка, сума.
borderstrue | falseза замовчуванням: trueМалює лінії таблиці.

"type": "totals"

Суми під таблицею.

КлючЗначенняЩо робить
align"left" | "center" | "right"за замовчуванням: "right"З якого боку вони стоять.
lines["subtotal", "discount", "taxes", "total"]Які рядки показувати і в якому порядку.

"type": "terms"

Умови договору. Друкуються, лише якщо вони в договорі є.

Без параметрів.

"type": "payment"

Ваші банківські реквізити.

КлючЗначенняЩо робить
qr"auto" | "never"за замовчуванням: "auto"auto додає платіжний QR-код SEPA, якщо рахунок у євро, ваш IBAN дійсний і ввімкнено параметр «Друкувати QR на рахунках у євро». never його не друкує.

"type": "footer"

Друкується внизу кожної сторінки, хоч би де стояв у списку. Кожен шаблон має містити такий блок із текстом нижнього рядка.

КлючЗначенняЩо робить
left"pageXofN"pageXofN друкує ліворуч «Сторінка 1 з 2» — лише якщо рахунок має більше однієї сторінки.
centerобов’язково"footerText"footerText друкує по центру текст нижнього рядка рахунку: «Створено в Invoya app» або власний текст із Налаштування → «Шаблон рахунку» → «Нижній рядок».

Що застосунок не прийме

  • Тип блока або значення, яких немає на цій сторінці. Invoya відхилить увесь файл, а не надрукує пів рахунку.
  • Шаблон без блока footer з "center": "footerText". Кожен рахунок друкує текст нижнього рядка, тож у шаблоні для нього має бути місце.
  • formatVersion, новішу за застосунок. Оновіть Invoya й відкрийте файл знову.
  • Файл, більший за 16 КБ.

Корисно знати

  • Кольори записуються як #rrggbb. Колір, який не вдалося прочитати, друкується чорним.
  • Шаблон не може містити власних шрифтів, зображень чи тексту: шрифт — один із п’яти вище, логотип — той, що задано в застосунку, а всі підписи беруться із застосунку.

Приклад

«Класичний» — шаблон, з якого починається кожне встановлення:

{
  "format": "invoya.invoice-template",
  "formatVersion": "1.3",
  "id": "app.invoya.classic",
  "name": {
    "en": "Classic",
    "de": "Klassisch",
    "ru": "Классический",
    "uk": "Класичний"
  },
  "author": "Invoya",
  "page": {
    "size": "a4",
    "margins": { "top": 72, "left": 72, "bottom": 72, "footer": 30 }
  },
  "style": { "bodySize": 8 },
  "letterhead": ["business"],
  "blocks": [
    { "id": "business", "type": "business", "align": "right", "logo": "left" },
    { "type": "spacer", "height": 30 },
    { "id": "title", "type": "title", "align": "center", "filled": true },
    { "id": "meta", "type": "invoiceMeta", "align": "right",
      "fields": ["number", "invoiceDate", "dueDate"] },
    { "id": "client", "type": "client", "caption": "billTo" },
    { "type": "spacer", "height": 30 },
    { "id": "items", "type": "items",
      "columns": ["index", "description", "unit", "qty", "rate", "amount"],
      "borders": true },
    { "type": "spacer", "height": 10 },
    { "id": "totals", "type": "totals", "align": "right",
      "lines": ["subtotal", "discount", "taxes", "total"] },
    { "id": "terms", "type": "terms" },
    { "id": "payment", "type": "payment", "qr": "auto" },
    { "id": "footer", "type": "footer", "left": "pageXofN", "center": "footerText" }
  ]
}

Надішліть його нам

Створили шаблон, який вам подобається? Надішліть файл на support@invoya.app — можливо, він потрапить до галереї.