Формат шаблона
Краткий справочник для тех, кто пишет свой файл .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 — возможно, он попадёт в галерею.