Допомога у написанні освітніх робіт...
Допоможемо швидко та з гарантією якості!

Документація з урахуванням 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.

Показати весь текст
Заповнити форму поточною роботою