andrewr
路人甲
路人甲
  • 注册日期2005-02-21
  • 发帖数32
  • QQ
  • 铜币244枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1721回复:4

[求助]Mxt文档能够保存多页的打印地图吗?(在线等候)

楼主#
更多 发布于:2006-10-19 14:54
<P>在某一流程里,有多页的地图需要打印(每页的内容都不一样),我可以把这一流程内的所有页的地图打印内容同时保存在同一个mxt文档里面吗?还是每一页的地图都对应保存为一个文档?还是有其他的做法?请大侠们指教!</P>
喜欢0 评分0
hsghxm
路人甲
路人甲
  • 注册日期2004-10-27
  • 发帖数517
  • QQ4604052
  • 铜币1枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2006-10-19 15:49
是可以的,就是常说的分幅打印了。一个mxt给分割成多块,保存着你所须打印的多页地图!
MSN:hsghxm@163.com QQ:4604052 (很少用,最好别加) Email:hsghxm@163.com 我的BOLG:http://www.gisempire.com/blog/user1/864/index.htm
举报 回复(0) 喜欢(0)     评分
andrewr
路人甲
路人甲
  • 注册日期2005-02-21
  • 发帖数32
  • QQ
  • 铜币244枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2006-10-19 17:32
谢谢,请问如何分割?
举报 回复(0) 喜欢(0)     评分
hsghxm
路人甲
路人甲
  • 注册日期2004-10-27
  • 发帖数517
  • QQ4604052
  • 铜币1枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2006-10-20 09:52
<P>这个说起来就比较麻烦了。大体是这样的,你当前打印的地图的envelope+当前的比例为计算值,然后按设置的打印比例跟当前地图打印的比例进行运算,得到要分割的块数m,再把envelope分割成m块。重点计算方法如下:</P>
<P>private  ArrayList  GetFarmerCol(IEnvelope curEnvelope,double width,double height)<BR>  {<BR>   ArrayList pEnvelopeList = new ArrayList();<BR>   double pPrintScale = m_FormPrinterPageSet.printScale;<BR>   //width单位为厘米,/100为米,/1000为公里,/100为经纬度(上海地区为北半球1度约100公里,赤道地区约130公里)<BR>   //---->既:纸张的长或宽除以10,000,000为经纬度<BR>   double pFrameWidth  = pPrintScale  * width / 10000000;<BR>   double pFrameHeight  = pPrintScale  * height / 10000000;   <BR>    <BR>   double xCol = curEnvelope.Width/pFrameWidth;<BR>   double xRow = curEnvelope.Height/pFrameHeight;<BR>   <BR>   int pCol =Convert.ToInt32(xCol);//不足一列的得按一列计算,行同理<BR>   if(pCol<xCol)<BR>    pCol++;</P>
<P>   int pRow =Convert.ToInt32(xRow);<BR>   if(pRow<xRow) <BR>    pRow++;<BR>   <BR>   //当只有一页或不足一页时候的情况(此时pCol and pRow ==1)<BR>   if(pCol==1 ;; pRow == 1)<BR>   {<BR>    pEnvelopeList.Add(m_CurEnvelope);<BR>   }<BR>   else//多页情况<BR>   {<BR>    for (int i=0; i<pCol ; i++)<BR>    {<BR>     double  pXMin = (curEnvelope.XMin )  + (i * pFrameWidth);<BR>     double  pXMax = (curEnvelope.XMin  ) +((i+1)* pFrameWidth);<BR>     for (int j = 0 ;j<pRow ; j++)<BR>     {<BR>      double  pYMin = (curEnvelope.YMin )+ (j * pFrameHeight  );<BR>      double  pYMax = (curEnvelope.YMin )+((j+1)* pFrameHeight  );<BR>      IEnvelope pNewEnve = new EnvelopeClass();<BR>      pNewEnve.PutCoords(pXMin,pYMin,pXMax,pYMax);     <BR>      pEnvelopeList.Add(pNewEnve);<BR>     }<BR>    }<BR>   }<BR>   return pEnvelopeList;</P>
<P>  } </P>
MSN:hsghxm@163.com QQ:4604052 (很少用,最好别加) Email:hsghxm@163.com 我的BOLG:http://www.gisempire.com/blog/user1/864/index.htm
举报 回复(0) 喜欢(0)     评分
andrewr
路人甲
路人甲
  • 注册日期2005-02-21
  • 发帖数32
  • QQ
  • 铜币244枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2006-10-20 15:27
<P>感谢</P>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部