最近有需求是:如何用C#写好一个HTML文件。
本文例子是摄影测量空间后方交会程序报表的设计。
1、VTemplate下载使用
在下面网站上下载到VTemplate.Engine.dll 。C#引用导入。开头加上using VTemplate.Engine;
2、HTML模板制作
下面我所做的是简单空间后方交会报表的设计。用到HTML标签语言,下面有一些讲解。
<html>
<head>
<title> 报表 </title>
</head>
<body>
<p>
<h1 align="center"><font color="red">空间后方交会结果报表</font></h1>
<!--报表时间 -->
<a href="spacerendezvous_report.html">spacerendezvous_report.html</a>
<!--原始数据表 -->
<h1><font size="4" color="red">原始数据表:</font></h1>
<table style="width:80%;" bordercolor="#000000" align="center">
<tbody>
<tr>
<td>
点序号
</td>
<td>
地面点座标X
</td>
<td>
地面点座标Y
</td>
<td>
地面点座标z
</td>
<td>
像点座标x
</td>
<td>
像点座标y
</td>
</tr>
<vt:foreach from="$SpaceRendezvous_OriData" item="ControlPoint" index="i">
<tr>
<td>
{$:ControlPoint.Num}
</td>
<td>
{$:ControlPoint.gcpX}米
</td>
<td>
{$:ControlPoint.gcpY}米
</td>
<td>
{$:ControlPoint.gcpZ}米
</td>
<td>
{$:ControlPoint.x}毫米
</td>
<td>
{$:ControlPoint.y}毫米
</td>
</tr>
</vt:foreach>
</tbody>
</table>
<br />
<!--迭代过程 -->
<h1><font size="4" color="red">迭代过程:</font></h1>
<vt:foreach from="$SpaceRendezvous_Tempdata" item="SpaceRendezvous_Tempdata" index="i">
<table style="width:80%;" bordercolor="#000000" align="center">
<tbody>
<tr>
<td>
Xs
</td>
<td>
Ys
</td>
<td>
Zs
</td>
<td>
fai
</td>
<td>
omi
</td>
<td>
ka
</td>
</tr>
<tr>
<td>
{$:SpaceRendezvous_Tempdata.Xs}米
</td>
<td>
{$:SpaceRendezvous_Tempdata.Ys}米
</td>
<td>
{$:SpaceRendezvous_Tempdata.Zs}米
</td>
<td>
{$:SpaceRendezvous_Tempdata.fai}rad
</td>
<td>
{$:SpaceRendezvous_Tempdata.omi}rad
</td>
<td>
{$:SpaceRendezvous_Tempdata.ka}rad
</td>
</tr>
<p align="left"><font size="3">第{$:i}次迭代计算的外方位元素:</p>
</vt:foreach>
</tbody>
</table>
<!--最终结果 -->
<h1><font size="4" color="red">最终结果:</font></h1>
<!-- <vt:foreach from="$SpaceRendezvous_ResultData" item="SpaceRendezvous_Results" index="i"> -->
<table style="width:80%;" bordercolor="#000000" align="center">
<tbody>
<tr>
<td>
Xs
</td>
<td>
Ys
</td>
<td>
Zs
</td>
<td>
fai
</td>
<td>
omi
</td>
<td>
ka
</td>
<td>
m0
</td>
</tr>
<tr>
<td>
{$:SpaceRendezvous_Results.Xs}米
</td>
<td>
{$:SpaceRendezvous_Results.Ys}米
</td>
<td>
{$:SpaceRendezvous_Results.Zs}米
</td>
<td>
{$:SpaceRendezvous_Results.fai}rad
</td>
<td>
{$:SpaceRendezvous_Results.omi}rad
</td>
<td>
{$:SpaceRendezvous_Results.ka}rad
</td>
<td>
{$:SpaceRendezvous_Results.m0}
</td>
</tr>
<!-- </vt:foreach> -->
</tbody>
</table>
</p>
</body>
</html>
上述代码生成的结果如下图所示:
VTemplate使用的地方是在地面点座标通过C#导入到HTML。并通过VTemplate的语法规则显示出来。在使用迭代循环的时候,采用的语法则是使用<vt:foreach from="$SpaceRendezvous_Tempdata" item="SpaceRendezvous_Tempdata" index="i"> 迭代内容 </vt:foreach> 语法规则。其中的SpaceRendezvous_Tempdata 则是C#中的类。具体HTML语法可以在网上逐步学习HTML的教程一点一点添加学习。
3、C#接口控制
在C#接口处,需要定义SpaceRendezvous_Tempdata类元素:
class SpaceRendezvous_Tempdata
{
public double Xs { get; set; }
public double Ys { get; set; }
public double Zs { get; set; }
public double fai { get; set; }
public double omi { get; set; }
public double ka { get; set; }
public double dXs { get; set; }
public double dYs { get; set; }
public double dZs { get; set; }
public double dfai { get; set; }
public double domi { get; set; }
public double dka { get; set; }
}
并在输出的位置用上代码:
TemplateDocument SpaceRendezvous_document = new TemplateDocument(System.Windows.Forms.Application.StartupPath + "\\SpaceRendezvous_Report.html", Encoding.UTF8, TemplateDocumentConfig.Default);
SpaceRendezvous_document.Variables.SetValue("SpaceRendezvous_OriData", SpaceRendezvous_ControlPoints);
SpaceRendezvous_document.Variables.SetValue("SpaceRendezvous_Tempdata", SpaceRendezvous_Tempdata);
SpaceRendezvous_document.Variables.SetValue("SpaceRendezvous_ResultData", SpaceRendezvous_Results);
SpaceRendezvous_document.RenderTo(System.Windows.Forms.Application.StartupPath + "\\后方交会报表.html", Encoding.UTF8);
其中SpaceRendezvous_ControlPoints、SpaceRendezvous_Tempdata、SpaceRendezvous_Results分别是
List<SpaceRendezvous_OriData>、List<SpaceRendezvous_Tempdata>、List<SpaceRendezvous_ResultData>类型。点位可以自己通过List.Add()函数设置添加。SpaceRendezvous_document.RenderTo(String Path,, Encoding.UTF8)输出即可。
4、结果显示
5、总结
如果想利用C#做一个HTML文件。首先我们要自己能做一个(利用HTML语言设计出)的理想文件。里面的数据则是我们需要从C#导入到HTML模板中,数据导入操作等过程则是需要我们VTemplate库文件。下面需要解决的是我们如何要用VTemplate的语法规则将C#数据导入到HTML模板。那么就需要看具体的需求,如果需要用到迭代(比如我的需求是体现多次迭代的过程),则所用的VTemplate的HTML语法为<vt:foreach from="$SpaceRendezvous_Tempdata" item="SpaceRendezvous_Tempdata" index="i"> 迭代内容 </vt:foreach> (不再赘述)。具体则需要看自己的需求,在网上搜索更多的VTemplate的HTML模板设计语法规则。本文章是入门帖,就写到这里。