技术开发 频道

怎样将GIS图形复制到Windows剪贴板,粘贴到Word中


【IT168技术文档】

  复制、粘贴功能是一件很简单的事情,但怎样将GIS图形粘贴到word中呢?最简单的思路还是将GIS图形保存为Image形式,发送到剪贴板,再粘贴到Word。但如果Image格式采用栅格的格式,如BMP或JPEG,则粘贴后在Word中拉伸时,效果会受到影响,比较合适的格式是采用WMF 或EMF这种矢量的格式。将Visio格式复制到Word中时,可以看到就是这种效果,而且文字还是可以编辑的。好,下面我们就看看怎样实现这个功能。

  第一步当然是将图形复制为一个MetaFile对象:
public Metafile GetGeometryMetafile(ISymbol pSymbol, IGeometry pGeometry) { //先获取一个IDisplayTransformation对象 IDisplayTransformation pDisTrans = new DisplayTransformationClass(); IEnvelope pEnv = pGeometry.Envelope; Rectangle rect = new Rectangle(0, 0, 500, 500); tagRECT r; r.left = rect.Left; r.right = rect.Right; r.bottom = rect.Bottom; r.top = rect.Top; pDisTrans.set_DeviceFrame(ref r); pDisTrans.Bounds = pEnv; pDisTrans.Resolution = 72; pDisTrans.ReferenceScale = 1.0; pDisTrans.ScaleRatio = 1; //创建WMF MemoryStream ms = new MemoryStream(); Graphics g = CreateGraphics(); IntPtr hdc = g.GetHdc(); Metafile mf = new Metafile(ms, hdc, new Rectangle(0,0,500,500),MetafileFrameUnit.Pixel, EmfType.EmfPlusDual); g.ReleaseHdc(hdc); g.Dispose(); g = Graphics.FromImage(mf); g.FillRectangle(new SolidBrush(Color.White), new Rectangle(0, 0, 500, 500)); pSymbol.SetupDC((int)g.GetHdc(), pDisTrans); pSymbol.Draw(pGeometry); pSymbol.ResetDC(); g.ReleaseHdc(); g.DrawString("by watson", this.Font, new SolidBrush(Color.Blue), new PointF(20, 20)); g.Save(); g.Dispose(); return mf; }
0
相关文章