Документація з урахуванням RTF-шаблону
Но цю ідилічну картину затьмарює кілька неприємних моментів. По-перше, недостатня гнучкість докладання — коли ви захочете перейти в інший редактор, доведеться писати код наново. По-друге, додаток працює лише серед пакета MS Office, і стоїть чималі гроші. Якщо додаток має працювати на 30-ти комп’ютерах підприємства, то розпорядження про них MS Office обійдеться приблизно 40 тис. гривень — не кожен… Читати ще >
Документація з урахуванням RTF-шаблону (реферат, курсова, диплом, контрольна)
Документация з урахуванням RTF-шаблона
Александр Харків, «Комиздат «.
Разработка прикладного ПО — це, як відомо, як написання коду програм, а й проектування друкованих документів і майже звітів. Практично всі інтегровані середовища мають у своєму складі генератори звітів, у тому чи іншою мірою які допомагають виконати завдання. Проте, попри явні гідності, використання генераторів звітів має низку вад. Вони зводяться, переважно, до неможливості вносити правки в сформований документ, і навіть змінювати шаблони звіту звичними засобами, наприклад звичайним текстовим редактором.
.
До того найпростішим і дуже застосовуваним рішенням уявлялося застосування механізму OLE. Наприклад, для комбінації Word і VisualBasic можлива така схема:
Создаем якийсь файл — шаблон документа. Там, де мусить бути «шапка «(дата, номер документи й ін.), використовуємо закладання, а більшості звіту створюємо таблицу-заготовку відповідної структури. Приклад такого шаблону наведено на рис. 1.
Пишем програму з допомогою об'єктної моделі Word:
" NumStr — у рядків отчете.
" NewData (5,NumStr) — масив з цими для заполнения.
" таблиці, заздалегідь наведеними до символьному виду.
" Itog — сума, наведена до символьному виду.
" Pth — шлях до вихідному файлу.
" Str_ndoc = «BS190 «.
" Str_name = «Петров І.І. «.
…
Dim objWord As Word.Application.
Dim objDoc As Word.Document.
Dim objTable As Word.Table.
" створюємо об'єкт Word.
Set objWord = New Word.Application.
" робимо її видимою — не обов’язково,.
" але занадто вже цікаво :).
objWord.Visible = True.
" відкриваємо файл шаблона.
Set objDoc = objWord.Documents.Open (Pth).
" робимо його активным.
objDoc.Activate.
" заповнюємо «шапку документа «- номер і получатель.
" - закладання «ndoc «і «name «соответственно.
objDoc.Bookmarks («ndoc »).Range.Text = Str_ndoc.
objDoc.Bookmarks («name »).Range.Text = Str_name.
" связывам об'єкт з таблицей.
Set objTable = objWord.ActiveDocument.Tables (1).
" виділяємо 2-у рядок таблиці в шаблоне.
objTable.Cell (2, 1).Range.Select.
" вставляємо потрібне у строк-1.
" (т.к. одна вже у шаблоне).
If NumStr > 0 Then objWord.Selection.InsertRows (NumStr — 1).
" кожної рядки у кожну комірку вставляємо нужные.
" дані з массива.
For і = 1 To NumStr.
For j = 1 To 5.
objTable.Cell (і + 1, j).Range.Text = NewData (j, i).
Next j.
Next і.
" проставляем суму «Усього «.
objTable.Cell (NumStr + 2, 5).Range.Text = Itog.
Запускаем її складі всього докладання й одержуємо результат (див. рис. 2).
Пользователь, отримавши звіт як doc-файла, може легко доповнити документ будь-які зміни, відправити її електронною поштою, роздрукувати — одне слово, розпорядитися на власний розсуд звичайній йому середовищі. Також легко може змінити й шаблон документа — на те дуже уміти працювати в текстовому редакторі.
Но цю ідилічну картину затьмарює кілька неприємних моментів. По-перше, недостатня гнучкість докладання — коли ви захочете перейти в інший редактор, доведеться писати код наново. По-друге, додаток працює лише серед пакета MS Office, і стоїть чималі гроші. Якщо додаток має працювати на 30-ти комп’ютерах підприємства, то розпорядження про них MS Office обійдеться приблизно 40 тис. гривень — не кожен бюджет витримає.
.
В той час існує низка безкоштовних і досить полнофункциональных офісних пакетів: OpenOffice, StarOffice, EasyOffice та інших. Більшість операцій, виконуваних звичайно з документами, їх можливостей предосить. Але чи можливий їх проста і ефективна інтеграція в прикладне програмне забезпечення?
Решением цієї проблеми може бути використання RTF-файлов. Цей формат, запропонований Microsoft як стандарт обмінюватись даними між текстовими редакторами, підтримується абсолютною більшістю офісних пакетів. Сама Microsoft використовує його як формату, у якому дані передаються через буфер обміну між різними додатками Windows.
Кратко про RTF
В форматі RTF задіяні лише коди, представлені символами з наборів ASCII, MAC і PC. Крім тексту, RTF-файл містить команди управління у читаних формі. Документ полягає з команд управління настроюванням програми читання. Ці команди можна розділити на управляючі слова управляючі символи.
Управляющее слово є послідовність символів з роздільником наприкінці. Наприклад, фрагмент:
…bkmkstart ndoc…
соответствует початку закладання ndoc.
Перед управляючим словом вводиться зворотна навкісна риса (). Як роздільників можна використовувати такі символи:
пробел, причому цей символ належить до управляючому слову;
цифра чи дефіс (<->). Після прочитання цих символів повинен слідувати параметр з роздільником. Як роздільника можна використовувати прогалину й інші символи (крім цифр і літер);
все символи, крім цифр і літер. Ці символи не ставляться до управляючому слову.
Для завдання керуючої послідовності в RTF-формате використовуються літери від До Z і зажадав від, а до z, і навіть цифри від 0 до 9. Національні символи до керуючої інформації не ставляться.
В ролі управляючих символів використовуються окремі літери. Перед кожним управляючим символом вводиться зворотна навкісна риса (). Наприклад, фрагмент:
…f1fs20…
устанавливает шрифт № 1 площею 20 одиниць.
Фрагмент RTF-файла наведено нижче. Структура його, як можна дивитися, нагадує структуру HTML-документа:
intblphmrgposy371dxfrtext180dfrmtxtx180dfrmtxty0nowrap.
aspalphaaspnumfaautoadjustrightrin0lin0f1fs20lang1049.
langfe1049cgridlangnp1049langfenp1049{lang1033langfe1049.
langnp1033 11cell 12cell 13cell} pard ql li0ri0widctlparintbl.
aspalphaaspnumfaautoadjustrightrin0lin0.
В RTF-формате є можливість об'єднувати окремі послідовності в групи з допомогою скобок:
{группа}.
Такие групи створюються, наприклад, в описах виносок, колонтитулів, закладок тощо.
Вот деякі управляючі слова символи, котрі мають безпосередній ставлення до темі нашої статті:
раr — кінець абзацу;
сеll — кінець шпальти;
row — кінець рядки (чи таблиці);
*bkmkstart <название закладання> *bkmkend — закладання. Приклад: {*bkmkstart ndoc} BS190{*bkmkend ndoc};
pard — встановлює стандартну надстройку для абзацу;
intbl … intbl — виділяє область таблиці;
" - прямий введення до тексту шестнадцатеричных чисел. За збереження кириличного тексту, він зазвичай зберігається у шестнадцатеричной формі, наприклад:
" d1 «f2 «f0 «її «ea «e0 («рядок »).
Поскольку нас цікавлять лише віддзеркалює певні завдання, знання наведених вище управляючих слів і символів предосить. Домовимося для простоти називати управляючі слова символи тегами.
А тепер розгляньмо алгоритми рішення з трьох основних завдань, які виникають за створенні документації.
Вставка рядки дома закладки Пример такий закладання:
…{*bkmkstart ndoc}<значение закладки>{*bkmkend ndoc}…
Для вирішення даної задачі можна запропонувати наступний алгоритм.
Читаем послідовно рядки вхідного файла (здебільшого рядок більше 255 символів).
Ищем в поточної рядку ярличок «bkmkstart » .
Если знаходимо, то виділяємо назва закладання і порівнюємо його з шуканої.
Если збігається, то записуємо строковую рядок даних після закриває дужки (}).
Алгоритм реалізований у вигляді функції In_Zakl1(pth As String, zakl As String, data As String), де pth — ім'я RTF-файла, zakl — ім'я закладання, data — рядок для додавання в файл.
Добавление рядків таблицу Предположим, нам потрібно знайти m-ю рядок в n-той таблиці і повторити їх у цієї таблиці p раз. Для пошуку початку рядки таблиці ми будемо використовувати ярличок intbl, а пошуку кінця — ярличок row. Кінець самої таблиці визначається по послідовності тегов row… pard…par.
Алгоритм вирішення цього завдання наступний.
Читаем послідовно рядки вхідного файла.
Ищем послідовність …row…pard…par…intbl… (необов'язково лише у рядку) (n-1) раз. Після цього ми знаходимось у початку потрібної таблиці.
Ищем етикетка row (m-1) раз. Після цього перебуваємо перед потрібної рядком таблиці.
Ищем наступний ярличок row і копіюємо вміст файла від (m-1)-го до m-го тега row (між row і intbl містяться настройки рядки, вони наші фінанси потрібні).
Вставляем після m-го тега row скопійовану нами подстроку p раз.
Следует відзначити, що недоліком запропонованого алгоритму і те, що може копіювати будь-яку рядок таблиці, крім першої. Але у більшості випадків перша рядок є «шапкою «документи й копіювати її не потрібно.
Алгоритм реалізований у вигляді функції In_TStr (pth As String, itbl As Integer, irow As Integer, kol As Integer), де pth — ім'я RTF-файла, itbl — номер таблиці, irow — номер рядки, kol — кількість повторів рядки.
Заполнение осередки таблицы
Представим, що потрібно знайти k-ю осередок в m-й рядку енну кількість таблиці і вставити у ній текстову рядок даних. Приклад таких осередків:
…{lang1033cgrid0<содержимое 1-ї ячейки>
cell<содержимое 2-ї ячейки>cell}…
Задача може бути розв’язана за таким алгоритмом.
Читаем послідовно рядки вхідного файла.
Ищем послідовність …row…pard…par…intbl… (необов'язково лише у рядку) (n-1) раз. Після цього ми перед потрібної нам таблицею.
Ищем ознака row (m-1) раз. Після цього ми знаходимось у початку потрібної рядки таблиці.
Ищем k-e входження тега cell.
Вставляем проти нього рядок даних.
Данный алгоритм реалізований у вигляді функції In_Tcell1(pth As String, itbl As Integer, irow As Integer, icell As Integer, ndata As String), де pth — ім'я RTF-файла, itbl — номер таблиці, irow — номер рядки, icell — номер осередки, data — рядок для занесення в осередок.
Программа на VisualBasic, демонструючи застосування такий технологій і функціонально ідентична програмі, наведеної у на початку цього статті, така:
" NumStr — у рядків отчете.
" NewData (5,NumStr) — масив з цими для заполнения.
" таблиці, заздалегідь наведеними до символьному виду.
" Itog — сума, наведена до символьному виду.
" pth — шлях до файлу.
" Str_ndoc = «BS190 «.
" Str_name = «Петров І.І. «.
Dim res As Boolean «результат виконання функцій.
" заповнюємо «шапку документа «- номер і получатель.
" - закладання «ndoc «і «name «відповідно.
res = In_Zakl1(pth, «ndoc », Str_ndoc).
res = In_Zakl1(pth, «name », Str_name).
" вставляємо потрібне у строк-1.
" (т.к. одна вже у шаблоне).
res = In_TStr (pth, 1, 2, NumStr — 1).
" кожної рядки у кожну комірку вставляем.
" потрібні дані з масиву.
For і = 1 To NumStr.
For j = 1 To 5.
res = In_Tcell1(pth, 1, і + 1, j, NewData (j, i)).
Next j.
Next і.
res = In_Tcell1(pth, 1, NumStr + 2, 5, Itog).
" проставляем суму «Усього «.
Заключение
Каковы переваги та недоліки запропонованої технології? Почати з достоїнств. По-перше, це як гнучка технологія на формування звітів — навіть якщо частина користувачів працює із OpenOffice, а частину з MS Office, програма створення звітних документів універсальна. По-друге, попри багаторазову перезапис файла шаблону під час роботи, цю програму працює швидше, ніж зв’язка OLE+Word. Тим більше що наведені вище алгоритми можуть вдосконалюватися. Одне з прикладів кардинального підвищення продуктивності приведено у листингах варіанти PascalDelphi. По-третє, користуючись вільним ПО, ви заощаджуєте гроші.
Теперь про проблеми. Основна їх — це недостатня стандартизація формату RTF. Виробники ПО, загалом дотримуючись єдиного стандарту, допускають кілька вільну трактування приватних моментів. Результат — проблеми з допомогою «чужих «RTF-файлов, підготовлених інших редакторах. Наприклад, MS Word зберігає графічні зображення всередині RTF-файла як послідовності шестнадцатеричных кодів, а OOWriter — як зовнішній файл.
Впрочем, ці проблеми вирішуються — треба лише докласти певних зусиль.
Список литературы
Для підготовки даної роботи було використані матеріали із сайту internet.