Visual FoxPro 9.0
报表监听器 HTML 基本类
请参阅 示例
全部折叠 全部展开
HtmlListener 为报表输出应用程序的 ListenerType 5 (HTML 输出)提供了默认的处理方法。此外,Genhml.prg 默认实现了将报表和标签文件(frx 和 lbx 表)转换成一个 HTML 输出。
种类 Reporting
默认目录 Visual FoxPro Catalog\Foundation Classes\Output\Report Listeners
类 HtmlListener
基类 ReportListener
类库 _REPORTLISTENER.vcx
父类 XmlDisplayListener (报表监听器 XML 显示样式基本类)
说明
HtmlListener 利用 XmlListener 的能力在报表运行结束时自动将一个 XSLT 转换文档转换成基本的 VFP Report XML 文档格式。关于 XmlListener 的 XSLT 处理能力,请参见 报表监听器 XML 基本类。
HtmlListener 没有在它的父类 XmlDisplayListener 基础上添加任何附加的属性或方法。它只设置输出文件的扩展名为 "HTM",并将它的 ApplyUserTransform 属性设为 .T.,同时增强了 XmlListener 的内部方法 getDefaultUserXslt,用来为 HTML 输出提供一个适当的 XSLT 转换文档。
包含在 HtmlListener 中的定制 XSLT 文档通过读取原始报表或布局信息的 VFP-RDL 来处理所有的细节,并在 HTML 中重新生成它们的布局。运行时的用户打印机可能与报表的原始绘制环境存在不同的可打印页尺寸,并且在用户的浏览器中可能还存在附加的题头,脚注,以及边框。因此,你在浏览器中确定的页分断位置应该不依赖于打印格式下的换页位置;主要是要按显示页来设计。
提示:
你可以在 REPORT FORM 命令中使用 RANGE 子句来产生一个按页提供的 HTML 数据,这样它可以适当的显示在浏览器中。注意 HtmlListener 的默认 XSLT 文档只支持单报表情况下的 RANGE 子句,不支持在多报表情况下使用 NOPAGEEJECT。如果没有 RANGE,HtmlListener 的默认 XSLT 支持将多个报表输出到一个 HTML 文档中。
如果你需要一个精确的可打印页副本,你可以使用报表监听器类的 OutputPage 方法为单独的报表页提供一个图像文件来达到这个目的。详细信息请参见 ReportListener 对象。
但是,并没有限制你忠实的再现原始的报表设计。你可以使用任何其它你认为合适的原始数据绘制方法来替换默认的 XSLT 转换,为不同目标设备上的不同用户定制一个单一结果的报表。简单的在 XsltProcessorUser 属性中存储一个指向其它 XSLT 转换文档的引用。在 报表监听器 XML 基本类 中有段简单的代码为你演示了如何改变文档的内容。
示例
这个例子设置 HtmlListener 的目标输出文件以及坐标的数值精度,同时指定了报表中任何被绘制的图像文件将被复制到的子目录(相对于它的输出文件)。如果要在网络服务器上发布报表,这是一种合适的途径。
注意:
这个例子是为用于一个发布后的应用程序而设计的,所以它没有包含 FFC 类库的路径。如果你希望将它作为一个命令行程序来运行,请去掉 SET PATH 语句行的注释。
在报表运行之后,这个示例在一个 Visual FoxPro 编辑窗口中打开这个 HTML 输出文件给你检验,然后它在 Visual FoxPro 屏幕中以文本方法显示当前的 XsltProcessorUser 文档内容给你参考。
提示:
如果认真的检查这个 XSLT 文档的内容,你会发现 theStylesheet.xml 属性仍然是 numberPrecision 的默认预编码值 5。XSLT 文档中的所有其它参数也是默认值。例如,externalFileLocation 是 XSLT 文档中的一个参数,并且你指派的值是 ".\images",但没有在 Stylesheet.xml 中出现。XMLListener 的 applyXSLT 方法使用参数的运行时值为被编译的样式单赋值,但在此之前它使用编译过的转换文档用于你的 XML 源。
复制代码
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
* 指派图像目录作为一个相关引用
* 确保在 HTML 文档中有适当的源属性:
oHtml.externalFileLocation = ".\images"
oHtml.copyImageFilesToExternalFileLocation = .T.
REPORT FORM ? OBJECT oHtml
MODIFY FILE (oHtml.targetFileName)
ACTI SCREEN
? oHtml.XsltProcessorUser.Stylesheet.Xml