RTFReport EXAMPLE
Изменения в 3.0b2. Отлавливались чужие ошибки во время исполнения
и поэтому изменен алгоритм, проверка на ошибки вынесена в отдельную ROUTINE.
Изменен люфт плавания элемента в строке по вертикали. Раньше было -2..+2 для
всех единиц измерений. Теперь сделано: для "миллиметров" -2..+2;
для "1/1000 inces" -50..+50; для "Points" -7..+7; для "Dialog" -4..+4.
Изменен метод вычисления размеров ширины колонок в HTML таблице.
Теперь изначально эти размеры переводятся в проценты, что более грубо,
но в результате исчезли досадные неточности из-за вычислений.
Описание расширения шаблонов RTFReport v3.0 beta 2.
Шаблоны являются свободно распространяемыми.
Назначение: Печать отчетов в файл формата RTF и/или HTML.
Шаблон не использует ни дополнительных библиотек ни других
каких либо программных ресурсов - только среда Кларион и все.
При подключении этого Extension к стандартному Report
отчет генерится не на принтер, а в файл (документ) RTF
или HTML. При этом получается не картинка, как следовало ожидать,
а полноценный документ (RTF) для дальнейшего редактирования или
распечатки, но уже в текстовом редакторе типа Microsoft Word.
Аналогично и файл HTML используется по назначению.
Кроме обычного текста в документе можно получить таблицу,
рамки таблицы можно настроить как для всей таблицы, так и
для отдельных (RTF) ячеек. В таблице HTML можно настроить объединение
ячеек в колонке, а в строке объединение ячеек вычисляется шаблоном.
При генерации в HTML используются все цветовые настройки элементов,
а также есть специфичные для HTML настройки цветов.
Кроме этого, для тонкой настройки, разработчик может отметить
поле и вписывать в это поле элементы языка HTML.
Кроме основного Report в шаблоне разработана поддержка
шаблонов UnivReport - CPCS(v5.15) Creative PC Solutions.
Но не реализовано для CPCS:
EXTENSION:
- CPCSDynaLabels, 'CPCS Dynamic Label Generator'
- CPCSFastDMprint,'Fast DotMatrix Printing support'
CODE:
- StoreBinary,'Store Binary BLOB/MEMO'
- CPCSReportColumns,'CPCS Columnar Report'
- ExitReportLoop,'Exit from the File I/O Loop of a Report'
CONTROL:
- TextBoxPrinter,'Print a TextBox with Overflow'
Скопируйте файлы RTFRpt.tpl, RTFRptAb.tpl и RTFGpRep.tpw
в каталог TEMPLATE. RTFCp.clw скопируйте в каталог LIBSRC.
Подключите шаблоны средствами Clarion в Temlate Registry.
Если вы пользовались предыдущей версией шаблонов то
перерегистрируйте шаблоны (unregister и register).
Для использования шаблонов в вашем проекте необходимо
в Global Extensions, подключить extension RtfReportDef.
Для создания/проектирования отчета используется стандартный форматер отчетов "Report" из основного набора шаблонов. К процедуре, использующей шаблон Report, подключите Extension: RtfReport.
В Global Extensions настройте CharSet, Code Page, Default Suffix. CharSet и Code Page необходимо настроить обязательно, это необходимо для того чтобы, в полученном документе, текст выглядел нормально а не непонятными иероглифами. Default Suffix - возможно потребуется вам, для того чтобы во все используемые шрифты добавлялся суффикс, к примеру "Cyr". Например: если у вас в свойствах элемента или отчета используется шрифт "Arial", то в полученном документе будет вписан Arial Cyr. Эти значения хранятся в глобальных переменных: RtfFontDefaultCharSet, RtfFontDefaultCodePage, RtfFontDefaultPostPosition соответственно. При необходимости можно изменять эти значения во время исполнения программы.
RTF File Name, HTML File Name - впишите сюда имя файла или Переменную,
для имени полученного документа.
View Procedure - сами догадаетесь.
HTML (Закладка) - Настройки специфичные для HTML документа.
(Глобальные цвета и картинка для подложки)
Page (Закладка) - Список используемых структур и их настройки.
Для каждой структуры можно указать, сколько строк нужно занести
в таблицу, а также некоторые настройки этой таблицы
отдельно для RTF и HTML. Количество строк - это то количество
строк, которое видно во время визуального форматирования отчета.
Количество строк в таблицу указывается диапазоном с N по N.
Printed Lines Per Page - количество строк на странице.
если равно 0 то переход на новую страницу не будет формироваться
принудительно. Во время исполнения это значение храниться в локальной
переменной RtfLinesPerPage, а счетчик строк в переменной
RtfLinesPerPageCount. При желании можно манипулировать этими значениями.
Для того, чтобы, к примеру, какую либо страницу сделать короче или
длиннее, или вообще убрать принудительное разделение на страницы.
Кроме этого вы можете использовать какой-нибудь элемент строкового
типа и в необходимый момент вписать в него обычный код перехода
на новую страницу - <12> но в этом случае не будут сформированы
PageFooter и PageHeader.
Fields (Закладка) - Список используемых элементов и их настройки.
Некоторые индивидуальные настройки элементов:
Для RTF настраивается наличие и толщина каждой линии ячейки в таблице.
Для HTML можно указать, что за корректность значения в этом элементе
отвечает разработчик. Такой элемент не будет обрабатываться функцией
AnsiToHTML(). И здесь же можно указать, сколько ячеек в столбце
должен использовать этот элемент (RowSpan). Но это значение не должно быть
больше чем количество строк, попадающих в таблицу начиная с этого
элемента и ниже. ** То есть, если в структуре 5 строк. В таблицу
вы указали со 2 по 4. Элемент расположен в 3 строке. То этот
элемент может занять не более 2 ячеек в столбце. **
Значения меньше 2 не имеют смысла (1 и 0 игнорируются).
Ignore Left Position - игнорировать значение левой позиции у крайнего левого элемента в строке. Например: Крайний левый элемент расположен на расстоянии 8мм от левого поля листа. Но если "Ignore Left Position" будет равно 10, то строка, в полученном документе, не будет сдвинута от левого поля листа. Но если элемент расположить на расстоянии 11мм то и в полученном документе строка будет сдвинута на 11мм от левого поля листа. Это относится и к строкам формируемой таблицы. В связи с чем нужно выравнивать левую позицию у левых элементов строк попадающих в таблицу.
При генерации игнорируется все пользовательское хозяйство кроме Control элементов типа STRING. т.е. графические примитивы, тексты, Check Box и прочее не обрабатываются. Цвет для RTF игнорируется.
При генерации текста программы, шаблон использует свойства структур и элементов
доступных на этапе генерации программы. А это то что видно в Source Report.
Самыми важными для генерации являются значения AT(N,N,N,N) как в настройках
Report так и в настройках структур и элементов. Здесь не должно быть
отрицательных значений, к примеру, AT(-10,,50,60) говорит о том, что в
визуальном форматере отчета съехала какая-то структура, элемент, или
разметка страницы. Для элементов недопустимы свойства AT(X,Y,,)
хотя X и Y могут иметь нулевые значения, но длина и высота должны быть указаны
обязательно. Шаблон использует все эти значения как для определения
последовательности вывода в файл, так и для определении позиции
элемента в документе и формирования дополнительных пространств
между строками или параграфами. Если, например, в строке из
5ти элементов 3й расположить чуть ниже остальных то в документе
он окажется на следующей строке. Поэтому элементы в одной строке
выравнивайте по низу.
Не менее важны идентификация структур и элементов
по их свойствам USE. Уже на этапе настроек вы это почувствуете
если эти свойства не будут прописаны.
Если строка не будет помещена в таблицу
то в полученном документе (RTF) она будет выровнена, так как указано
в свойствах крайнего правого элемента (Это свойство документа).
Если вы желаете чтобы в таблице колонки по вертикали не были вразброс
то выравнивайте элементы по правому краю.
При формировании документа изымаются все лишние пробелы
где бы они ни находились. При разработке шаблона предприняты
усилия к тому, чтобы строки, попадающие в таблицу, склеивались
в единую таблицу. В связи чем, вам, при необходимости,
не сразу удастся сделать так, чтобы таблица получилась разорванной.
Да и для обычных строк предусмотрен люфт, после превышения которого,
формируется дополнительное пространство между строками.
Это из-за того, что размеры визуального элемента могут очень
сильно отличаться от полученного набора символов в документе.
Не забывайте что формируемый документ (RTF) может содержать верхний
колонтитул. И номер страницы должен быть в колонтитуле -
там его место. А Word сам пронумерует и перенумерует.
Для этого в PageHeader разместите String (где либо вверху чтобы
попало в колонтитул) в свойствах этого элемента поставьте галочку
на "Variable String" а "Total Type" = "Page No" и достаточно.
Манипулировать значением этого элемента не нужно.
В HTML колонтитул используется для свойства TITLE документа.
И еще, не забывайте, что в результате получиться документ.
То есть, нам иногда мешает привычка, использовать имеющиеся возможности.
К примеру, на одной строке можно разместить штук 40 элементов
с форматом @s255, а в результате, в документе, может получиться
несколько десятков строк.
-------
Мною шаблон испытан на версиях Clarion 5 и 5.5 Возможно будет работать и на более старых версиях но необходимо чтобы в LIBSRC\EQUATES.CLW были определены CHARSET:...
Прошу прошения за доставленные неудобства. Но в глобальных настройках (Global -> Extension) настройте еще раз "Default Code Page"
Если вы обнаружите ошибки, пишите мне или в списки рассылки (ClaList,Clarion)
или конференции. Если у вас что-то не получается, будет жаль если вы
только из-за этого забросите шаблон - лучше спросите, не стесняйтесь,
и лучше если через списки рассылки. Вполне допускаю что некоторые
очевидные для меня вещи могут быть для вас совершенно непонятны.
К шаблонам приложен небольшой пример использования RTFReport,
посмотрите его, он простенький, но использует почти все средства шаблона.
(для демонстрации печати в HTML заимствована база данных Products.tps
и набор GIF картинок из примера "Invoice" поставляющегося с Кларионом.
Скопируйте файлы *.gif в каталог GIF)
-------------------
***
Владимир Дегтяренко
vlad@v-ufal.chel.su (рабочий)
vhome@v-ufal.chel.su (домашний)