HtmlListener реализует в приложениях вывода отчетов значение по умолчанию для ListenerType - 5 (HTML вывод) и для программы Genhml.prg - формат HTML, как формат по умолчанию, для файлов отчета и этикеток (таблицы с расширением frx и lbx).

Категория Описание

Категория по умолчанию

Visual FoxPro Catalog\Foundation Classes\Output\Report Listeners

Класс

HtmlListener

Базовый класс

ReportListener

Библиотека классов

_REPORTLISTENER.vcx

Родительский класс

XmlDisplayListener (см. Фундаментальный Класс ReportListener XML Display-Style)

Замечание

HtmlListener усиливает возможности XmlListener, применяя XSLT трансформацию документа к базовому VFP XML формату автоматически по окончанию обработки отчета. Для дальнейшей информации по возможностям обработки XSLT в XmlListener, смотрите Фундаментальный класс ReportListener XML.

HtmlListener пополняет свойства и методы своего родительского класса - XmlDisplayListener. Он устанавливает расширение файла "HTM" и его свойство ApplyUserTransform равным .T. и дополняет к методам XmlListener метод getDefaultUserXslt, для обеспечения должной XSLT транформации документа для создания HTML.

Пользовательский XSLT документ указанный в HtmlListener содержит в себе все детали VFP-RDL вашего исходного отчета или раскладки, и воспроизводит такую же раскладку в HTML. Принтер пользователя может иметь отличные уставки размера бумаги, чем ваш принтер, для которого изображение отчета изначально было сформировано, и браузер пользователя может также добавить верний и нижний колотитулы и оставить край в раскладке страницы. В результате этого, вам не следует полагаться на этот формат, чтобы распечатать отчет с переводом страницы в нужном месте из браузера; это разработано в основном для отображения страницы на экране.

Подсказка:
Вы можете использовать RANGE оператор в команде REPORT FORM, для того чтобы предоставить HTML данные постранично, таким образом, отчет будет печататься из браузера корректно. Обратите внимание, что в HtmlListener, XSLT документ по умолчанию поддерживает оператор RANGE только для одиночных отчетов, а не для множественных отчетов, используя возможности NOPAGEEJECT. Без оператора RANGE, XSLT в HtmlListener по умолчанию поддерживает множественные отчеты, лишь помещенные в один HTML документ.

Если хотите, чтобы распечатывалась точная копия, то вы можете использовать метод OutputPage класса ReportListener для создания отдельных файлов для каждой страницы. Смотрите Объект Приемник Отчетов ReportListener для дальнейшей информации.

Однако, вы не ограничены в получении точной копии изначального дизайна отчета. Вы можете заменить штатную XSLT трансформацию какой-либо другой, которая вам подходит, разработать отдельный отчет для разных пользователей и печати на разных устройствах. Достаточно поместить ссылку на другой XSLT трансформацию документа в свойство XsltProcessorUser. Пример кода в Фундаментальный Класс ReportListener XML демонстрирует, как изменить содержание документа.

Пример

Данный пример устанавливает файл вывода для HtmlListener и точность числовых координат, а также, задает, чтобы все графические файлы, используемые в данном отчете, сохранялись в поддиректории той папки, в которой поместили файл сформированного отчета. Это - один из правильных подходов, если отчет будет в дальнейшем помещен на web server.

Примечание:
Данный пример разработан для использования в тиражируемых приложениях, поэтому он не содержит путь к FFC библиотеке классов. Если вы желаете запустить его как программу из командного окна, то раскомментируйте оператор SET PATH.

После отработки отчета, данный пример открывает формированный HTML файл в окне редактирования Visual FoxPro для проверки и затем показывает текушее содержание документа XsltProcessorUser в виде текстовых сообщений на экране Visual FoxPro для справки.

Подсказка:
При детальном рассмотрении содержимого XSLT документа, вы увидите, что свойство Stylesheet.xml все еще показывает докомпиляционное значение по умолчанию numberPrecision, 5, и значения по умолчанию всех других параметров в этом XSLT документе. Например, externalFileLocation - это парамерт в XSLT документе, и его значение вы определяете в примере, ".\images", не показан в содержимом Stylesheet.xml. Метод applyXSLT в классе XMLListener применяет runtime значение параметров к откопилированному Stylesheet экзимпляру, непосредственно перед тем как он применяет откомпилированный и  трансформированный документ в вашему исходному XML.

  Cкопировать Код
LOCAL oHtml
* SET PATH TO (HOME() + "FFC") ADDITIVE
oHtml = NEWOBJECT("HtmlListener","_reportlistener.vcx")
oHtml.targetFileName = "c:\temp\myOutput.htm"
* Следующие строки кода устанавливают точность координат
* наиболее характерных елементов раскладки в виде количества знаков после запятой
* (координаты XSLT указаны в дюймах).  
* Количество знаков после запятой установлено в XSLT равным 5,
* но здесь мы назначаем равным 6:
oHtml.xsltParameters = CREATEOBJECT("Collection")
oHtml.xsltParameters.Add(6,"numberPrecision")
* Нижеуказанная папка должно существовать до того, как 
* вы определите следующее свойство:
IF NOT DIRECTORY("c:\temp\images")
   MD c:\temp\images
ENDIF
* Определение папки с графическими файлами в виде   
* относительной ссылки обеспечивает должные 
* src атрибуты в данном HTML документе:
oHtml.externalFileLocation = ".\images"  
oHtml.copyImageFilesToExternalFileLocation = .T.
REPORT FORM ? OBJECT oHtml
MODIFY FILE (oHtml.targetFileName)
ACTI SCREEN
? oHtml.XsltProcessorUser.Stylesheet.Xml

Смотрите Также