
Рамка, яка не злітає: як автоматизувати основний напис в текстовому документі TechEditor
- Перегляди: 1388
Якщо зображення, яке ви бачите нижче, викликає у вас відчуття дежавю — вітаю, ви не помилилися адресою. В цьому матеріалі ми розглянемо, як раз і назавжди позбутися проблем з рамками, основними написами та іншою графічною інформацією в текстових документах.
Привіт! Мене звати Віталій, а ви на ресурсі для інженерів Dystlab.
Рамка, основний напис, штамп
Оформлення документації в сфері науки і техніки підпорядковується правилам, озвученим зокрема в Національному стандарті України ДСТУ Б А.2.4-4:2009 "Основні вимоги до проектної та робочої документації". Згідно пункту 6.27 цього ДСТУ,
кожен аркуш графічного та текстового документа повинен мати основний напис та додаткові графи до нього
Основний напис — таблиця, яка містить мінімально необхідну інформацію про проект. В ній вказується, хто є безпосереднім виконавцем проекту, хто здійснює нормоконтроль, хто затверджує проект та ін. Додаткові графи — також таблиці, які додаються за необхідності і можуть бути орієнтовані вертикально.
В народі, основний напис спрощено називають штампом. Це не зовсім коректно, але іноді ми також будемо дозволяти собі цей термін.
Форми основних написів
Існує кілька варіантів основного напису і додаткових граф.
Титульний аркуш містить розгорнуту інформацію про проект. Якщо діяти за формою 5 згаданого ДСТУ, то основний напис тут має вигляд найбільшої таблиці. Наступні аркуші оформлюються "спокійніше" і відрізняються від титульного значно меншим штампом (форма 6):
В чому проблема зі штампом?
Якщо ви працюєте в CAD або BIM-програмі, основний напис накреслити елементарно. Натомість, створення цього, здавалось би, простого елемента в текстовому редакторі може перетворити життя інженера на пекло.
Секції аркушу
Основна проблема полягає в тому, що більшість офісних пакетів мають дуже обмежений функціонал для роботи з графікою. Як правило, аркуш в MS Word, WPS Office, Google Docs складається з трьох основних секцій:
- верхній колонтитул (header)
- основна частина
- нижній колонтитул (footer)
Отже, користувачі працюють в цих трьох розділах. Кожен намагається зробити це якнайкраще. Хтось розміщує рамку і основний напис монолітом, в якості фонового зображення. Хтось розділяє штамп на окремі блоки і розкидує їх по колонтитулах. Хтось підходить до цієї задачі через вбудовані таблиці, тобто штатними засобами редактора.
Ці підходи мають право на існування, але є один спільний недолік: в тій чи іншій мірі, всі вони прив'язані до тексту.
Куди текст, туди й рисунок
З точки зору програмної реалізації, рисунок мало чим відрізняється від інших елементів (наприклад, таблиць або формул).
За стандартними налаштуваннями, рисунок додається до поточного рядку і має доволі обмежені можливості. Він прив'язується до абзацу і переміщується разом з ним, вгору чи вниз. Якщо мова іде про ілюстрації, які супроводжують технічний звіт, то це OK, але якщо ми говоримо про рамку документа чи основний напис — це, скоріше, проблема.
Вільно перемістити рисунок ліворуч або праворуч нам ще важче, оскільки аркуш лімітований полями. Плюс, на поведінку сильно впливає вирівнювання. Та навіть якщо нам вдалося відправити рисунок на задній план документу і він зайняв бажане положення — це ще не гарантія, що він так само буде відображатися на інших аркушах (а тим паче, в інших програмах).
Все це тому, що ми наповнюємо аркуш різними елементами, а не рисуємо на ньому в явній системі координат, як це реалізовано в графічних редакторах.
Проблеми з експортом і імпортом
Наступна проблема — імпортовані документи.
Наприклад, ви створюєте документ в Microsoft Word, зберігаєте його в "doc" чи "docx" і пересилаєте колезі. Ваш колега відкриває файл в Open Office і бачить хибну картинку, адже налаштування полів, відступів, інтервалів в одній програмі можуть відрізнятися від аналогічних опцій в іншій. Під словом "відрізнятися" я маю на увазі те, як саме програма зчитує і інтерпретує інформацію в файлах. Це дуже розповсюджена практика, яка не дає нам спокою вже багато років.
Проблеми автоматизації
Ще однією, але, на мій погляд, не останньою, є проблема автоматизації.
Якщо ми формуємо основний напис і додаткові графи рисунками, то мусимо заздалегідь вписати туди відповідні реквізити. Якщо ці елементи створювались через вбудовані таблиці, то ми можемо вписати їх вручну, і навіть потім редагувати. Але в обох випадках це не є автоматизацією, адже відсутня можливість керувати цією інформацією централізовано.
До того ж, створені таким чином об'єкти навряд чи коректно відреагують на зміну орієнтації або розмірів аркушу. Уявіть, як впаде продуктивність роботи, якщо вручну вносити зміни в такі документи.
Підсумки по проблемам
Отже, в сухому залишку маємо наступні проблеми з оформленням текстової документації в традиційних офісних програмах:
- рисунки прив'язані до тексту
- різні програми по-різному працюють з графікою
- відсутня автоматизація
Як автоматизувати основний напис в TechEditor
Розробляючи TechEditor, ми урахували всі наведені проблеми.
Кожен аркуш звіту в ТехЕдіторі є окремою площиною, на якій можна рисувати. Поділ на секції в цьому підході ігнорується, площина для рисування охоплює весь простір аркушу. Наразі доступні функції для нанесення ліній, прямокутників, кіл, а також растрові зображення з зовнішніх файлів і текстові вставки (в тому числі, вертикальні чи під кутом). Звісно, користувач має змогу контролювати товщину ліній, колір, шрифт та інші атрибути.
Цей інструментарій можна порівняти з невеличкою вбудованою CAD-системою. Давайте розглянемо, як це працює.
Скриптова автоматизація
Нагадаю, що в TechEditor звіт (Report) є загальною назвою для всіх текстових документів. Під час запуску, програма автоматично створює один порожній звіт.
Щоб почати рисувати на аркушах звіту, скористайтеся командою Drawing Automation на стрічці інструментів Background and Graphics:
На екрані з'явиться спеціальний скриптовий редактор. Наразі він порожній (точніше, не містить жодних команд з рисування). Щоб нарисувати стандартну рамку з полями 20, 5, 5, 5 мм, додайте між операторними скобками begin..end наступну команду:
begin
Report.DrawRectangle(20, 5, 210-5, 297-5);
end.
Натисніть Execute і переконайтеся, що на аркуші з'явилася рамка. Команда DrawRectangle працює дуже просто: в якості параметрів в неї передаються дві пари координат, які характеризують початок і кінець діагоналі прямокутника. Відлік ведеться від лівого верхнього кута аркуша.
Додамо команду, яка рисуватиме контур основного напису. Оскільки рамка аркушу має бути нарисована основними лініями, то на початку скрипту розмістимо ще одну команду, яка збільшує товщину контуру:
begin
Report.PenWidth := 3;
Report.DrawRectangle(20, 5, 210-5, 297-5);
Report.DrawRectangle(20, 297-5, 20+185, 297-5-40);
end.
Натисніть Execute.
Наразі результат є, але він не має нас задовільнити, адже основний напис на титульному аркуші і всіх наступних мають відрізнятися. Додамо до нашого скрипту відповідні команди:
begin
Report.PenWidth := 3;
Report.DrawRectangle(20, 5, 210-5, 297-5);
Report.PageNo := 1;
Report.DrawRectangle(20, 297-5, 20+185, 297-5-40);
for Page := 2 to Report.PageCount do
begin
Report.PageNo := Page;
Report.DrawRectangle(20, 297-5, 20+185, 297-5-15);
end;
end.
Як ви здогадалися, команда Report.PageNo вказує, на якому саме аркуші виконувати наступні команди. Спочатку ми рисуємо рамку на всіх аркушах. Потім рисуємо контур основного напису, а далі в циклі for проходимо по інших аркушах і рисуємо на них контур спрощеного штампу:
Що станеться з рамкою, якщо змінити формат сторінки?
Важливо, як графічна інформація реагуватиме на зміни формату.
Припустимо, нам потрібно змінити орієнтацію аркуша з портретної на альбомну, а також змінити загальний розмір з А4 на А3. Швидко це можна зробити через вкладку стрічки інструментів View, група Page Format. Після зміни розмірів, натисніть F5 для оновлення звіту:
Це знову не зовсім те, що ми хотіли бачити. Справа в тому, що ми прописали в командах так звані "жорсткі" координати. Ми оперували суто числами і фігури лишилися прив'язаними до початку системи координат (лівий верхній кут аркушу).
Більш адаптивний, інтелектуальний підхід — врахувати розміри аркушу за допомогою команд Report.PageWidth (ширина аркуша, в мм) і Report.PageHeight (висота аркуша, в мм):
uses Classes, Graphics, Dialogs;
var
Page: Integer;
w, h: Double;
begin
Report.PenWidth := 3;
w := Report.PageWidth;
h := Report.PageHeight;
Report.DrawRectangle(20, 5, w-5, h-5);
Report.PageNo := 1;
Report.DrawRectangle(w-5-185, h-5, w-5, h-5-40);
for Page := 2 to Report.PageCount do
begin
Report.PageNo := Page;
Report.DrawRectangle(w-5-185, h-5, w-5, h-5-15);
end;
end.
Якщо зараз виконати цей скрипт, то рамка відповідатиме розмірам аркуша А3, а основний напис "притиснеться" до правого боку, як і має бути:
Такий скрипт спрацює на будь-яких форматах і за будь-якої орієнтації аркушів. Не забувайте оновлювати звіт клавішею F5, коли змінюєте розміри або орієнтацію звіту.
Більше інформації про скриптову автоматизацію ви знайдете в нашій Базі знань. Повний перелік команд для рисування є тут.
Традиційний підхід до вставки зображень
В звітах TechEditor ви можете використовувати й традиційний підхід до вставки зображень. Це має сенс, якщо всі сторінки вашого документу містять однотипне оформлення (наприклад, тільки рамку). В такому випадку, достатньо підготувати фонове зображення в якомусь графічному редакторі і вставити його в звіт командою Background (шукайте її на стрічці інструментів Background and Graphics).
Всі зображення (нарисовані або додані через Background) розміщується в TechEditor на задньому плані. То ж поверх них ви можете друкувати звичайний текст, не хвилюючись, що вони кудись зсунуться.
Готовий шаблон звіту зі стандартними рамками
Вище ми зробили лише перші кроки на шляху до автоматизації звіту. Ви можете продовжити оформлювати цей документ власноруч; я рекомендую зробити це принаймні один раз, для опанування цієї потужної та ефективної технології.
Проте, Dystlab мають в каталозі подібний шаблон з повністю автоматизованою рамкою, основним написом і додатковими графами. В цьому документі автоматизована також нумерація аркушів і позиціонування тексту:
Ви можете завантажити цей шаблон безкоштовно і використовувати або в навчальних цілях, або для роботи:
Сподіваюся, наведена інформація переконала вас, що перехід на TechEditor з інших офісних програм — більш ніж виправданий. Ми не зупиняємось і розвиваємо це середовище щодня.
Також нагадаю, що ми готові допомогти вам у вирішенні ваших інженерних задач, будь-якої складності. Приєднуйтесь до нас в соцмережах і пабліках, щоб бути в курсі новин. Хай щастить!

Віталій Артьомов
Керівник і співзасновник Dystlab, екс-доцент кафедри мостів ДНУЗТ, розробник TechEditor, к.т.н.
Спеціалізуюся на інженерних розрахунках, статичному і динамічному аналізі будівель і споруд, автоматизації обчислень, розробці проектної документації. Консультую дизайнерів, інженерів, архітекторів та проектні компанії України, Азії, Європи, Канади, США, Австралії, тощо. Знаюся на нормах проектування України (ДБН, ДСТУ), Європи (Eurocode), Канади (OBC, CSA).
Готовий проконсультувати і допомогти вам у роботі або бізнесі:
- +380504576819 (WhatsApp)
- Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її.