【注】:IPersistStream接口的类的对象进行保存和读取,如Element,Map等等,当然猜想IPersistStream能够实现读取Excel表,但还没结果。
如下用C#实现PageLayout保存和读取Dataframe 代码:
IActiveView pActiveView = null;
IPageLayout pPagelayout = null;
IPageLayoutControl pPageCtrl = null;
IMap pMap;
IGraphicsContainer pGraphicsContainer = null;
ITransform2D pTransform2D = null;//图形平移、缩放接口
pPageCtrl = axPageLayoutControl1.Object as IPageLayoutControl;
pPagelayout = pPageCtrl.PageLayout;
pActiveView = pPagelayout as IActiveView;
pMap = pActiveView.FocusMap;
pGraphicsContainer = pActiveView.GraphicsContainer;
IEnvelope pEnvBound = pMapFrame.Geometry.Envelope;
IMemoryBlobStream pMemoryBlobStream = null;
IElement pMapFrame = null;
IObjectStream pObjectStream = null;
IPersistStream pPersistStream = null;
IFrameElement pFrmElement = null;
IElementProperties pElementProperties = null;
//保存当前Dataframe至文件
sFramePath = "C://DataFrame.blb";
pFrmElement = pGraphicsContainer.FindFrame(pMap);
pMapFrame = pFrmElement as IElement;
pObjectStream = new ObjectStream();
pMemoryBlobStream = new MemoryBlobStream();
pPersistStream = pMapFrame as IPersistStream;
pObjectStream.Stream = pMemoryBlobStream;
pPersistStream.Save(pObjectStream, 1);
pMemoryBlobStream.SaveToFile(sFramePath);
//读取文件并在当前视图显示
pMemoryBlobStream = new MemoryBlobStream();
pObjectStream = new ObjectStream();
pMapFrame = new MapFrame();
pPersistStream = pMapFrame as IPersistStream;
pElementProperties = pMapFrame as IElementProperties;
pMemoryBlobStream.LoadFromFile(sFramePath);
pObjectStream.Stream = pMemoryBlobStream;
pPersistStream.Load(pObjectStream as IStream);
pElementProperties.Name = "Map1";
//平移、缩放MapFrame
IEnvelope pEnvSubMapFrm= pMapFrame.Geometry.Envelope;
doubled OffsetX = pEnvBound.XMin - pEnvSubMapFrm.XMin;
double dOffsetY = pEnvBound.YMin - pEnvSubMapFrm.YMin;
pTransform2D.Move(dOffsetX, dOffsetY);//平移
IPoint pPtOrigin = new ESRI.ArcGIS.Geometry.Point();
pPtOrigin.PutCoords(pEnvBound.XMin, pEnvBound.YMin);
dTmp = pEnvBound.Width / pEnvSubMapFrm.Width;
pTransform2D.Scale(pPtOrigin, dTmp, 1);//缩放:X方向缩放,Y方向不缩放
pMapFrame.Geometry = pTransform2D as IGeometry;
pGraphicsContainer.AddElement(pMapFrame , 0);
pGraphicsContainer.UpdateElement(pMapFrame );
IGraphicsContainerSelect pGraphicsContainerSelect = pGraphicsContainer as IGraphicsContainerSelect;
pGraphicsContainerSelect.UnselectElement(pMapFrame);
pActiveView.Refresh();