Формат шаблону
Короткий довідник для тих, хто пише власний файл .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.top | 72за замовчуванням: 72 | Відступ над першим блоком. |
margins.left | 72за замовчуванням: 72 | Відступ ліворуч — і праворуч. |
margins.bottom | 72за замовчуванням: 72 | Відступ під останнім рядком, після якого вміст переноситься на наступну сторінку. |
margins.footer | 30за замовчуванням: 30 | Відстань від нижнього краю аркуша до нижнього колонтитула. |
style
Усі ключі тут необов’язкові.
| Ключ | Значення | Що робить |
|---|---|---|
bodySize | 8.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" | Колір тексту на акцентному кольорі. Темному акценту потрібен світлий текст. |
logoHeight | 42 | Висота логотипа, коли він стоїть поруч із вашими даними. Без цього ключа логотип за висотою дорівнює блоку даних. |
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" | Де він стоїть. |
filled | true | 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"] | Які стовпці показувати і в якому порядку: номер рядка, опис, одиниця, кількість, ставка, сума. |
borders | true | 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 — можливо, він потрапить до галереї.