代码改变世界

利用XML生成Word

2008-10-21 20:23  key_sky  阅读(4105)  评论(0编辑  收藏  举报

      传统生成word文档,一般是调用DCOM对象,来输出word,输出结果会比较慢,并且设计到对word操作的权限十分让人头疼。这里通过自己的摸索利用xml模板来输出word。

      准备工作:定义个xml模板,将需要根据用户不同输出的特定的内容不同来定义模板。例如。并将xml文档放在指定的目录上。

       代码段:主要对常规用的图片,字段和表格来根据实际情况来编辑。这里主要对图片和字段进行修改。

 

Code
protected void Button1_Click(object sender, EventArgs e)
{
//取出所有需求的数据
string famc = "螺杆泵举升施工设计";
string faxx = "select falx,jh,sjrq,sjdw,sjr,byc1,byc2 from des_fanganxx where famc='" + famc + "'";
DataSet DSfaxx
= DataHandle.ExecuteSQL(faxx);
string fajcsj = "select * from des_fanganjcsj where famc='" + famc + "'";
DataSet DSjcsj
= DataHandle.ExecuteSQL(fajcsj);
string rgjd = DSjcsj.Tables[0].Rows[0]["rgjd"].ToString().Trim();
string fafcsj = "select cenghao,yczsh,pzl from des_fanganfcsj where famc='" + famc + "'";
DataSet DSfcsj
= DataHandle.ExecuteSQL(fafcsj);
string fagysj = "select * from des_fangangysj where famc='" + famc + "'";
DataSet DSgysj
= DataHandle.ExecuteSQL(fagysj);
string fagzsj = "select * from des_fangangzsj where famc='" + famc + "'";
DataSet DSgzsj
= DataHandle.ExecuteSQL(fagzsj);
string fasbqc = "select *,convert(numeric(10,0),sbsl) as sbsl1 from des_fangansbqc where famc='" + famc + "'";
DataSet DSsbqc
= DataHandle.ExecuteSQL(fasbqc);
string fagybz = "select * from des_fangangybzh where famc='" + famc + "' order by sx";
DataSet DSgybz
= DataHandle.ExecuteSQL(fagybz);
string fajsyq = "select * from des_fanganjsyq where famc='" + famc + "' order by sx";
DataSet DSjsyq
= DataHandle.ExecuteSQL(fajsyq);
FileInfo DotFileInfo
= new FileInfo(Server.MapPath("xmlmodels/" + Session["yonghuid"].ToString().Trim() + ".xml"));
if (!DotFileInfo.Exists)
{
FileInfo MasDot
= new FileInfo(Server.MapPath("xmlmodels/model&gysj.xml"));
MasDot.CopyTo(Server.MapPath(
"xmlmodels/" + Session["yonghuid"].ToString().Trim() + ".xml"));
}
StreamReader sr
= new StreamReader(Server.MapPath("xmlmodels/" + Session["yonghuid"].ToString().Trim() + ".xml"),
 System.Text.Encoding.UTF8);
string str=sr.ReadToEnd();
sr.Close();
sr.Dispose();
if (str.Contains("t_jh"))
{
str
= str.Replace("t_jh", DSfaxx.Tables[0].Rows[0]["jh"].ToString().Trim()).Replace("t_gysj", DSfaxx.Tables[0].Rows[0]
["falx"].ToString().Trim()).Replace("t_dw", DSfaxx.Tables[0].Rows[0]["sjdw"].ToString().Trim()).Replace("t_sjr", DSfaxx.Tables[0].
Rows[0]["sjr"].ToString().Trim()).Replace("t_rq", DSfaxx.Tables[0].Rows[0]["sjrq"].ToString().Trim()).Replace("t_ord", DSfaxx.
Tables[0].Rows[0]["byc1"].ToString().Trim()).Replace("t_csxm", DSfaxx.Tables[0].Rows[0]["byc2"].ToString().Trim()).
Replace("t_ceyl", DSjcsj.Tables[0].Rows[0]["ycydjkyl"].ToString().Trim()).Replace("t_zsyl", DSjcsj.Tables[0].Rows[0]["mqjkzsyl"].
ToString().Trim()).Replace("t_dcyl", DSjcsj.Tables[0].Rows[0]["dcyl"].ToString().Trim()).Replace("t_sjjkzsyl", DSjcsj.Tables[0]
.Rows[0]["sjjkzsyl"].ToString().Trim()).Replace("t_rgjd", DSjcsj.Tables[0].Rows[0]["rgjd"].ToString().Trim()).Replace("t_zsl", DSjcsj.
Tables[0].Rows[0]["mqzsl"].ToString().Trim()).Replace("t_ygnj", DSjcsj.Tables[0].Rows[0]["ygnj"].ToString().Trim()).Replace("t_fzqk",
 DSjcsj.Tables[0].Rows[0]["jxfzqk"].ToString().Trim()).Replace("t_szjk", DSjcsj.Tables[0].Rows[0]["scjk"].ToString().Trim()).Replace
("t_bz", DSjcsj.Tables[0].Rows[0]["bz"].ToString().Trim()).Replace("t_szfx", DSjcsj.Tables[0].Rows[0]["szfxzl"].ToString().Trim())
.Replace("t_gyzl", DSgysj.Tables[0].Rows[0]["gyzl"].ToString().Trim()).Replace("t_zsfs", DSgysj.Tables[0].Rows[0]["zsfs"].
ToString().Trim()).Replace("t_kctgjgwz", DSgysj.Tables[0].Rows[0]["kctgjgwz"].ToString().Trim()).Replace("t_fgqkdw", DSgysj.
Tables[0].Rows[0]["fgqkdwz"].ToString().Trim());
}
//System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(Server.MapPath("xmlmodels/" + Session["yonghuid"].
ToString().Trim() + ".bmp"));

string bmpData = save_bitmap(rgjd);
//using (MemoryStream ms = new MemoryStream())
//{
// //bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
// bmpData = Convert.ToBase64String(ms.ToArray());
//}
//int iHeigth = bmp.Height;
//int iWidth = bmp.Width;
int iHeigth = 500;
int iWidth = 450;
bmpData
= @"</w:t><w:pict><w:binData w:name='wordml://02000001.jpg'>" + bmpData + "</w:binData><v:shape
style='width:" + iWidth.ToString() + "px;height:" + iHeigth.ToString() + "px'>
<v:imagedata src='wordml://02000001.jpg' o:title='00'/></v:shape></w:pict><w:t>";
if (str.Contains("t_pic"))
{
str
= str.Replace("t_pic", bmpData);
}
string cellsData = string.Empty;
for (int i = 0; i < DSgybz.Tables[0].Rows.Count; i++)
{
cellsData
+= @"" + DSgybz.Tables[0].Rows[i]["sx"].ToString().Trim() + "." + DSgybz.Tables[0].Rows[i]["bzhnr"].
ToString().Trim() + "</w:t></w:r></w:p><w:p><w:pPr><w:rPr><w:rFonts w:fareast='黑体'/><w:sz w:val='28'/></w:rPr>
</w:pPr><w:r><w:rPr><w:rFonts w:fareast='黑体' w:hint='fareast'/><wx:font wx:val='黑体'/><w:sz w:val='28'/></w:rPr><w:t>";
}
if (str.Contains("t_gybz"))
{
str
= str.Replace("t_gybz", cellsData);
}
string jsyqData = string.Empty;
for (int i = 0; i < DSjsyq.Tables[0].Rows.Count; i++)
{
jsyqData
+= @"" + DSjsyq.Tables[0].Rows[i]["sx"].ToString().Trim() + "." + DSjsyq.Tables[0].Rows[i]["jsyqnr"].ToString()
.Trim() + "</w:t></w:r></w:p><w:p><w:pPr><w:rPr><w:rFonts w:fareast='黑体'/><w:sz w:val='28'/></w:rPr></w:pPr><w:r><w:rPr>
<w:rFonts w:fareast='黑体' w:hint='fareast'/><wx:font wx:val='黑体'/><w:sz w:val='28'/></w:rPr><w:t>";
}
if (str.Contains("t_yq"))
{
str
= str.Replace("t_yq", jsyqData);
}
string fcsjData = string.Empty;
for (int i = 0; i < DSfcsj.Tables[0].Rows.Count; i++)
{
fcsjData
+= @"" + DSfcsj.Tables[0].Rows[i]["yczsh"].ToString().Trim() + "</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w='2160' w:type='dxa'/><w:shd w:val='clear' w:color='auto' w:fill='auto'/><w:vAlign w:val='center'/></w:tcPr><w:p><w:pPr><w:jc 
w:val='center'/><w:rPr><w:rFonts w:ascii='黑体' w:fareast='黑体' w:h-ansi='宋体'/><wx:font wx:val='黑体'/><w:sz w:val='24'/><w:sz-cs
 w:val='24'/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii='黑体' w:fareast='黑体' w:h-ansi='宋体' w:hint='fareast'/><wx:font
 wx:val='黑体'/><w:sz w:val='24'/><w:sz-cs w:val='24'/></w:rPr><w:t>" + DSfcsj.Tables[0].Rows[i]["pzl"].ToString().Trim() + "
</w:t></w:r></w:p></w:tc></w:tr><w:tr><w:trPr><w:trHeight w:val='453'/></w:trPr><w:tc><w:tcPr><w:tcW w:w='1017' w:type='dxa'/>
<w:gridSpan w:val='2'/><w:vmerge/><w:shd w:val='clear' w:color='auto' w:fill='auto'/><w:vAlign w:val='center'/></w:tcPr><w:p><w:pPr>
<w:jc w:val='center'/><w:rPr><w:rFonts w:ascii='黑体' w:fareast='黑体' w:h-ansi='宋体'/><wx:font wx:val='黑体'/><w:sz w:val='24'/><w:sz-cs
 w:val='24'/></w:rPr></w:pPr></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w='2160' w:type='dxa'/><w:tcBorders><w:bottom w:val='single' 
w:sz='4' wx:bdrwidth='10' w:space='0' w:color='auto'/></w:tcBorders><w:vAlign w:val='center'/></w:tcPr><w:p><w:pPr><w:jc w:val=
'center'/><w:rPr><w:rFonts w:ascii='黑体' w:fareast='黑体' w:h-ansi='宋体'/><wx:font wx:val='黑体'/><w:sz w:val='24'/><w:sz-cs 
w:val='24'/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii='黑体' w:fareast='黑体' w:h-ansi='宋体' w:hint='fareast'/><wx:font wx:
val='黑体'/><w:sz w:val='24'/><w:sz-cs w:val='24'/></w:rPr><w:t>";
}
if (str.Contains("t_zs"))
{
str
= str.Replace("t_zs", fcsjData);
}
string sbqcData = string.Empty;
for (int i = 0; i < DSsbqc.Tables[0].Rows.Count; i++)
{
sbqcData
+= @"" + Convert.ToString(i + 1) + "</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w='2146' w:type='dxa'/>
</w:tcPr><w:p><w:pPr><w:rPr><w:sz w:val='28'/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint='fareast'/><wx:font wx:val='宋体'/>
<w:sz w:val='28'/></w:rPr><w:t>" + DSsbqc.Tables[0].Rows[i]["sbgg"].ToString().Trim() + DSsbqc.Tables[0].Rows[i]["sbmc"]
.ToString().Trim() + "</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w='2146' w:type='dxa'/></w:tcPr><w:p><w:pPr><w:rPr>
<w:sz w:val='28'/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint='fareast'/><wx:font wx:val='宋体'/><w:sz w:val='28'/></w:rPr>
<w:t>" + DSsbqc.Tables[0].Rows[i]["sbsl1"].ToString().Trim() + DSsbqc.Tables[0].Rows[i]["sbdw"].ToString().Trim() 
+ "</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w='2147' w:type='dxa'/></w:tcPr><w:p><w:pPr><w:rPr><w:sz w:val='28'/>
</w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint='fareast'/><wx:font wx:val='宋体'/><w:sz w:val='28'/></w:rPr><w:t>" + DSsbqc.
Tables[0].Rows[i]["tgdw"].ToString().Trim() + "</w:t></w:r></w:p></w:tc></w:tr><w:tr><w:tc><w:tcPr><w:tcW w:w='2146' w:type='dxa'/>
</w:tcPr><w:p><w:pPr><w:rPr><w:sz w:val='28'/></w:rPr></w:pPr><w:r><w:rPr><w:sz w:val='28'/></w:rPr><w:t>";
}
if (str.Contains("t_sbxh"))
{
str
= str.Replace("t_sbxh", sbqcData);
}
Response.ClearHeaders();
Response.ClearContent();
Response.Clear();


Response.Buffer
= true;
Response.Expires
= -1;
Response.ContentType
= "application/octet-stream";
Response.AddHeader(
"Content-Disposition", "attachment;filename=ConstructionDesign.doc");
Response.Write(str);

Response.Flush();
Response.Close();
Response.End();
}
private string save_bitmap(string strrgjd)
{
string bmpData = string.Empty;
int ChartHeight = 500;
int ChartWidth = 450;
double jdsd = 0;
string famc;
//famc = Server.UrlDecode(Request.QueryString["famc"]);
famc = "螺杆泵举升施工设计";
string GetgzSql = "select * from des_fangangzsj where famc='" + famc.Trim() + "' order by sbwz,sbmc";
DataSet DSgz
= DataHandle.ExecuteSQL(GetgzSql);
jdsd
= Convert.ToDouble(strrgjd.Trim());
Bitmap image
= new Bitmap(ChartWidth, ChartHeight);
Graphics Canvas;
Canvas
= Graphics.FromImage(image);
Canvas.Clear(Color.White);
try
{
Canvas.Clear(Color.White);
Font font1
= new Font("宋体", 9);
Brush brush
= new SolidBrush(Color.Blue);
Brush brush2
= new SolidBrush(Color.Black);
Pen pen2
= new Pen(Color.Black, 1);
Pen pen
= new Pen(Color.Blue, 3);
Pen pen3
= new Pen(Color.Blue, 1);
//外围左边第一条线
Canvas.DrawLine(pen, 110, 40, 110, ChartHeight - 100);
//外围右边最后一条线
Canvas.DrawLine(pen, 230, 40, 230, ChartHeight - 100);
//顶上线
Canvas.DrawLine(pen2, 10, 40, 330, 40);
//底部线
Canvas.DrawLine(pen2, 110, ChartHeight - 100, 230, ChartHeight - 100);
//人工井底区域,需要输入参数井底深度,将深度与图长550进行比例尺度,根据工具的深度对各个工具进行位置定位
for (int i = 1; i < 13; i++)
{
Canvas.DrawLine(pen2,
110 + (i - 1) * 10, ChartHeight - 100, (110 + 10 * i), ChartHeight - 110);
Canvas.DrawLine(pen2,
110 + (i - 1) * 10, ChartHeight - 110, (110 + 10 * i), ChartHeight - 100);
}
Canvas.DrawLine(pen3,
230, ChartHeight - 110, 340, ChartHeight - 110);
Canvas.DrawString(
"人工井底:" + jdsd + "m", font1, brush2, 240, ChartHeight - 110);
//循环生成工具说明
bool boolexist = false;
if (DSgz.Tables[0].Rows.Count != 0)
{
#region 绘制工具说明,并考虑数值相差小于30的时候,左右排开
if (DSgz.Tables[0].Rows[0]["sbmc"].ToString().Trim() != "油管")
{
Canvas.DrawLine(pen3,
230, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[0]["sbwz"]
.ToString().Trim()) / jdsd), 340, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[0]["sbwz"].ToString().
Trim()) / jdsd));
Canvas.DrawString(DSgz.Tables[
0].Rows[0]["sbmc"].ToString().Trim() + ":" + DSgz.Tables[0].Rows[0]["sbxh"].ToString().Trim()
 + DSgz.Tables[0].Rows[0]["sbwz"].ToString().Trim() + "m", font1, brush2, 240, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble
(DSgz.Tables[0].Rows[0]["sbwz"].ToString().Trim()) / jdsd));
}
else
{
Canvas.DrawLine(pen3,
10, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[0]["sbwz"].
ToString().Trim()) / jdsd), 150, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[0]["sbwz"].ToString().
Trim()) / jdsd));
Canvas.DrawString(DSgz.Tables[
0].Rows[0]["sbmc"].ToString().Trim() + ":" + DSgz.Tables[0].Rows[0]["sbxh"].ToString().Trim()
+ DSgz.Tables[0].Rows[0]["sbwz"].ToString().Trim() + "m", font1, brush2, 0, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble
(DSgz.Tables[0].Rows[0]["sbwz"].ToString().Trim()) / jdsd));
Canvas.DrawLine(pen2,
150, 40, 150, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[0]
["sbwz"].ToString().Trim()) / jdsd));
Canvas.DrawLine(pen2,
190, 40, 190, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[0]
["sbwz"].ToString().Trim()) / jdsd));
}
for (int i = 1; i < DSgz.Tables[0].Rows.Count; i++)
{
if (DSgz.Tables[0].Rows[i]["sbmc"].ToString().Trim() == "油管")
{
Canvas.DrawLine(pen3,
10, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"]
.ToString().Trim()) / jdsd), 150, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString().
Trim()) / jdsd));
Canvas.DrawString(DSgz.Tables[
0].Rows[i]["sbmc"].ToString().Trim() + ":" + DSgz.Tables[0].Rows[i]["sbxh"].ToString().Trim()
+ DSgz.Tables[0].Rows[i]["sbwz"].ToString().Trim() + "m", font1, brush2, 0, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble
(DSgz.Tables[0].Rows[i]["sbwz"].ToString().Trim()) / jdsd));
Canvas.DrawLine(pen2,
150, 40, 150, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]
["sbwz"].ToString().Trim()) / jdsd));
Canvas.DrawLine(pen2,
190, 40, 190, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]
["sbwz"].ToString().Trim()) / jdsd));
}
else
{
boolexist
= false;
for (int j = 0; j < i; j++)
{

if (DSgz.Tables[0].Rows[j]["sbmc"].ToString().Trim() != "油管")
{
if (Math.Abs(Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString().Trim()) - Convert.ToDouble(DSgz.Tables[0].
Rows[j]["sbwz"].ToString().Trim())) < 30)
{
boolexist
= true;
break;
}
}
}
if (!boolexist)
{
Canvas.DrawLine(pen3,
230, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].
ToString().Trim()) / jdsd), 340, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString().Trim()) / jdsd));
Canvas.DrawString(DSgz.Tables[
0].Rows[i]["sbmc"].ToString().Trim() + ":" + DSgz.Tables[0].Rows[i]["sbxh"].ToString().Trim()
+ DSgz.Tables[0].Rows[i]["sbwz"].ToString().Trim() 
+ "m", font1, brush2, 240, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString().Trim()) / jdsd));
}
else
{
Canvas.DrawLine(pen3,
10, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].
ToString().Trim()) / jdsd), 110, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString().Trim()) / jdsd));
Canvas.DrawString(DSgz.Tables[
0].Rows[i]["sbmc"].ToString().Trim() + ":" + DSgz.Tables[0].Rows[i]["sbxh"].ToString().Trim()
 + DSgz.Tables[0].Rows[i]["sbwz"].ToString().Trim() + "m", font1, brush2, 0, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.
Tables[0].Rows[i]["sbwz"].ToString().Trim()) / jdsd));
}
}
}
#endregion
#region 绘制工具标识
for (int i = 0; i < DSgz.Tables[0].Rows.Count; i++)
{
//温控开关区域,输入开关的深度,与图长550,井底深度进行比例尺度计算
if (DSgz.Tables[0].Rows[i]["sbmc"].ToString().Trim() == "温控开关")
{
Canvas.DrawLine(pen2,
160, Convert.ToSingle(30 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].
ToString().Trim()) / jdsd), 180, Convert.ToSingle(30 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString().
Trim()) / jdsd));
Canvas.DrawLine(pen2,
170, Convert.ToSingle(30 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"]
.ToString().Trim()) / jdsd), 170, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString().
Trim()) / jdsd));
Canvas.DrawLine(pen2,
146, Convert.ToSingle(30 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"]
.ToString().Trim()) / jdsd), 146, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString().
Trim()) / jdsd));
Canvas.DrawLine(pen2,
194, Convert.ToSingle(30 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"]
.ToString().Trim()) / jdsd), 194, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString().
Trim()) / jdsd));
Canvas.DrawLine(pen2,
146, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"]
.ToString().Trim()) / jdsd), 194, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString()
.Trim()) / jdsd));
}
//扶正器区域,输入深度,与图长550,井底深度进行比例尺度计算
if (DSgz.Tables[0].Rows[i]["sbmc"].ToString().Trim() == "扶正器")
{
Canvas.DrawLine(pen2,
130, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"]
.ToString().Trim()) / jdsd + 5 - 2), 150, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString()
.Trim()) / jdsd));
Canvas.DrawLine(pen2,
130, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"]
.ToString().Trim()) / jdsd + 5 + 2), 150, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString()
.Trim()) / jdsd + 10));
Canvas.DrawLine(pen2,
210, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"]
.ToString().Trim()) / jdsd + 5 - 2), 190, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString()
.Trim()) / jdsd));
Canvas.DrawLine(pen2,
210, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"]
.ToString().Trim()) / jdsd + 5 + 2), 190, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString()
.Trim()) / jdsd + 10));
Canvas.DrawLine(pen2,
130, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"]
.ToString().Trim()) / jdsd + 5 - 2), 130, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString()
.Trim()) / jdsd + 5 + 2));
Canvas.DrawLine(pen2,
210, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"]
.ToString().Trim()) / jdsd + 5 - 2), 210, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].ToString()
.Trim()) / jdsd + 5 + 2));
}
//砂面区域,输入深度,与图长550,井底深度进行比例尺度计算
if (DSgz.Tables[0].Rows[i]["sbmc"].ToString().Trim() == "砂面区域")
{
for (int j = 1; j < 13; j++)
{
Canvas.DrawLine(pen2,
110 + (j - 1) * 10, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]
["sbwz"].ToString().Trim()) / jdsd), 110 + 10 * j, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"].
ToString().Trim()) / jdsd + 10));
}
}
//封隔器区域,输入深度,与图长550,井底深度进行尺度计算
if (DSgz.Tables[0].Rows[i]["sbmc"].ToString().Trim() == "封隔器")
{
Canvas.FillRectangle(brush2,
110, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"]
.ToString().Trim()) / jdsd), 40, 10);
Canvas.FillRectangle(brush2,
190, Convert.ToSingle(40 + (ChartHeight - 100) * Convert.ToDouble(DSgz.Tables[0].Rows[i]["sbwz"]
.ToString().Trim()) / jdsd), 40, 10);
}

}
#endregion
}
System.IO.MemoryStream ms
= new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
bmpData
= Convert.ToBase64String(ms.ToArray());

//string path = Server.MapPath("xmlmodels") + @"\" + Session["yonghuid"].ToString().Trim() + ".bmp";
//image.Save(path);
}
catch (Exception ms)
{
Response.Write(ms.Message);
}
return bmpData;
}

 

输出的word

并且文档相应的字段已经替换。word输出不需要在服务器上安装office,并且速度比DCOM快很多。