纸张的大小由DevMode结构的四个属性决定:
   dmPaperSize As Integer
   dmPaperLength As Integer
   dmPaperWidth As Integer
   dmFormName As String * CCHFORMNAME
其中dmFormName用于NT系统中指定打印纸张大小为预定义的某个纸张(Form),但是VB的 printer object不支持FormName属性,您可以通过API函数DocumentProperties修改DevMode结构的dmFormName属性实现自定义打印。
分两步做:
1. 先在打印机目录下,从File菜单下进入Server Properties对话框,在这里您可以手工添加自定义纸张,您也可以用API函数AddForm在程序中添加自定义纸张。
2. 在您的程序中,用API函数DocumentProperties获得当前打印机的设置并修改dmFormName为前面添加的自定义纸张。关于DevMode结构和DocumentProperties的使用可参考下面的例子。
Q282474 HOWTO: Print Using Custom Page Sizes on Windows NT/2000
http://support.microsoft.com/support/kb/articles/q282/4/74.asp
Q180645 FIX: Cannot Change Page Settings During Print Job
http://support.microsoft.com/support/kb/articles/q180/6/45.aspAPI函数的相关信息请参考:
AddForm
http://msdn.microsoft.com/library/en-us/gdi/prntspol_0prh.asp
DocumentProperties
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/prntspol_7k1f.asp

解决方案 »

  1.   

    haplake(飞翔的心)的思路是对的!可是具体实施细节好象还不是很清楚!微软的相关资料我也已经下载!!也参考了相关问题的解决之道。。总的来说,还没弄的十分明白!!
      

  2.   

    to:sexing(性)
    上面msdn上的例子可以解决你的问题
      

  3.   

    是的使用到几个Api函数,不明白先照着用,以后用多了就明白了,很多问题还是自己多想想,现在这里也说不清楚,要不然也就没意思了 :-)
      

  4.   

    haplake(飞翔的心) ( :你好!我用了API 试了一下!本想把例子中的Me.hwnd改成datareport.hwnd会行的,可是还不行!!我看还得你来指点一下!!
    因为对单一对象的纸张设定的改变并没有传递给datareport对象中打印纸张的改变!!惨!