打印时怎样控制打印的文档在页面上的合适位置?
如果打印的文档大于一页,怎样处理换页时让文档在和第一页合适的位置?

解决方案 »

  1.   

    如果不是用控件,你就要在ONPRINT中自己画了。
      

  2.   

    自己画时想必要用到Rect,这时你控制一下Rect的Top和bottom就可以了。
      

  3.   

    你可以建立一个打印区RECT,此区的宽度就是你每行信息的宽度,高度可以自已设。
    然后用DC的DrawText("xxxx",RECT,....)来画这行,这样你的行高就可以自已控制。每画完一行后,将此RECT的值向下移动一行,即Rect.top = rect.bottom,
    rect.bottom += 行高。
    当你发现移到最后rect.bottom大于可打印的区域就换页。
    如果想在每页的开头空一部分,则可将第一行的Rect.top值赋的大点
      

  4.   


    有控制换页的命令吗我是采用跟踪y坐标,当y大于一页高度时让y+100来定下一页开头空白宽度为100,这样第二页成功,而第三页就不行了
    为什么?
      

  5.   

    把代码贴出来 ,基本上给出了详细解释,还请各位高手指点到底那出错了,导致楼上所说出的错误! int position,tPosition;//position表示页的纵坐标 tPostition用来控制是否要换页
    tPosition=position=110;//留出110宽的空白页头
    int nPage=0;//nPage表示页数//////////////画出表格////////////while(!m_pRecordset->adoEOF)
    {  
    //判断边缘
    tPosition=tPosition+240;//因为下面每画表格position都要占用240宽度,因此先tPosition下移240

    if(tPosition>=2880)//2880是事先已经获取的页高,这里判断是否改换页了
    {   nPage++;//表示页数要增加一页了
        position=nPage*2880+110;//设置下一页开始打印的位置
        tPosition=110;//恢复tPosition

    }
    //写表头
    DrawTableHead(pDC,position);//再position处输出表头
    //写数据
    position=position+110;//由于写表头占用了110宽,所以position+110
    DrawData(pDC,position,m_pRecordset);//再在position处输出表单内容
    position=position+130;//输出内容占了130宽,position+130
    m_pRecordset->MoveNext();//记录下移
    }
      

  6.   

    我不太清楚你是否用的是MFC的打印机制,你上面的代码是在哪里调的,
    如果你是在OnPrint中画的,并且用DC的SetMaxPage设置过最大页,则系统会根据最大的页数重复调用OnPrint函数,因此你想换页只需让OnPrint返回即可。至于页数你即然知道了每行的高度、页的高度、报表头的高度、行数,我想应该可以算的出来。
      

  7.   

    自己搞定!原来是漏写了
    改为
    if(tPosition>=2880)//2880是事先已经获取的页高,这里判断是否改换页了
    {   nPage++;//表示页数要增加一页了
        position=nPage*2880+110;//设置下一页开始打印的位置
        tPosition=110+240;//!此处错了,少加了240

    }
    不过还是要谢谢vc_boy了