img
00:00
imgDRKB online - Документация на основе RTF-шаблона
imgimgimg
  Общие вопросы
  Delphi IDE, компиллятор, отладчик, редактор
  Язык программирования Дельфи
  VCL
  Системные функции и WinAPI
  Базы данных
  Работа с файловой системой
  Репортинг, работа с принтером
  Работа с сетью, интернетом, протоколами
  Работа с графикой и мультимедиа
  Математика, алгоритмы
  Форматы файлов, данных. Конвертация форматов
  ANSI ---> ASCII
  BMP ---> AVI (для TAnimate)
  BMP ---> EMF
  BMP ---> DIB
  BMP ---> ICO
  BMP ---> JPG
  BMP --> EMF (Enhanced Metafile)
  BMP ---> RTF
  BMP ---> WMF
  CUR ---> BMP
  ICO ---> BMP
  JPG ---> BMP
  TIF ---> PDF
  TXT ---> GIF
  DOC ---> HTML
  WMF ---> BMP
  RTF-->HTML
  HTML --> RTF
  DFM -->TXT, TXT --> DFM
  Win1251 <-> Koi8r
  Как инсталлировать INF файл?
  Как конвертировать WideString в String?
  Как определить графический формат файла (не используя расширение)?
  Как прочитать MP3 ID3-Tag?
  Как прочитать заголовок wav файла?
  Информация о AVI файле (разбор заголовка AVI)
  Как работать с DWG файлами (AutoCAD)?
  Как работать с GIF файлами?
  Как работать с PDF файлами?
  Как разрезать wav файл?
  Как узнать размер картинки для JPG, GIF и PNG файлов?
  Компонент для работы с PCX файлами
  Пример работы чтения и сохранении wav-файлов
  Работа с TGA файлами
  Формат wave файла
  Декомпилляция звукового файла формата Wave и получение звуковых данных
  Flash SWF --> EXE
  Преобразование иконок в Gliph-ы
  Документация на основе RTF-шаблона
  "Дедушка RTF" еще послужит
  ActiveX, COM, DCOM, MIDAS, CORBA, интерфейсы, OLE, DDE
  Разработка приложений
  Kylix
  Delphi.Net
  Развлечения
  
  [drkb=4010] Комментариев: 0 
Документация на основе RTF-шаблона
Документация на основе RTF-шаблона
Разработка прикладного ПО - это, как известно, не только написание кода программ, но и проектирование печатных документов и отчетов. Практически все интегрированные среды имеют в своем составе генераторы отчетов, в той или иной степени помогающие решить эту задачу. Однако, несмотря на явные достоинства, использование генераторов отчетов имеет ряд недостатков. Они сводятся, главным образом, к невозможности вносить правки в сформированный документ, а также изменять шаблоны отчета привычными средствами, например обычным текстовым редактором.

До последнего времени самым простым и широко применяемым решением представлялось применение механизма OLE. Например, для комбинации Word и VisualBasic возможна такая схема:
delphi
' 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 i = 1 To NumStr
For j = 1 To 5
objTable.Cell (i + 1, j).Range.Text = NewData (j, i)
j
i
' проставляем сумму 'Всего'
objTable.Cell (NumStr + 2, 5).Range.Text = Itog



delphi
' 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 i = 1 To NumStr
For j = 1 To 5
res = In_Tcell1(pth, 1, i + 1, j, NewData (j, i))
j
i
res = In_Tcell1(pth, 1, NumStr + 2, 5, Itog) ' проставляем сумму 'Всего'


Заключение
Каковы преимущества и недостатки предложенной технологии? Начнем с достоинств. Во-первых, это более гибкая технология для формирования отчетов - даже если часть пользователей работает с OpenOffice, а часть с MS Office, программа создания отчетных документов универсальна. Во-вторых, несмотря на многоразовую перезапись файла шаблона во время работы, эта программа работает быстрее, чем связка OLE+Word. Тем более что приведенные выше алгоритмы могут совершенствоваться. Один из примеров кардинального повышения производительности приведен в листингах варианта для PascalDelphi. В-третьих, пользуясь свободным ПО, вы экономите деньги.
Теперь о проблемах. Основная из них - это недостаточная стандартизация формата RTF. Производители ПО, в целом придерживаясь единого стандарта, допускают несколько свободную трактовку частных моментов. Результат - проблемы с использованием "чужих" RTF-файлов, подготовленных в других редакторах. Например, MS Word сохраняет графические изображения внутри RTF-файла в виде последовательности шестнадцатеричных кодов, а OOWriter - как внешний файл.
Впрочем, эти проблемы решаются - стоит только приложить некоторые усилия.


2004.05.14 Автор: Александр Харьков
http://www.cpp.com.ua

@Drkb::04310
Количество статей: 4366
 
Вход
Имя:
Пароль:
Запомнить
Регистрация Забыли пароль?
Мини-чат :)
Необходима регистрация
Архив мини-чата
23-05-2020 16:32
SturmVladik
Всем приффки :-)
08-05-2020 06:21
DartKane
Сюда бы ещё добавить либо виджет записки, либо ярлык на рабочем столе)
01-05-2020 08:45
DartKane
Я так понимаю - DeskClock 3 развиваться не будет?
01-05-2020 08:32
DartKane
Однако драсте)
30-04-2020 22:20
antonn
Безобразие! smiley
29-04-2020 17:55
Programmer
3 месяца и 10 дней сюда никто не писал...
19-01-2020 10:47
Programmer
уже подросток
19-01-2020 10:47
Programmer
13 лет этому сайту
19-01-2020 10:45
Programmer
уже 2020
14-01-2020 05:12
Xyu
Кароч дарова
Статистика
 СегодняВсего
Посетителей2652287270
Запросов2629330326085
Online
Пользователей0
Гостей36
imgimgimgimg
 
img
     00:00