CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

如何设置 自定义纸张

楼主blue_apple(蓝苹果)2004-05-04 11:51:24 在 .NET技术 / VB.NET 提问

我用下面的方法设置了自定义纸张,但打印时,打印机不能按   高度 300 的来分页,为了这  
   
  个我已两晚没睡好了,希望高手帮帮啦,,,  
   
                PrintDocument1.DefaultPageSettings.PaperSize   =   New   PaperSize("Custom   Paper   Size",   433,   300) 问题点数:0、回复次数:31Top

1 楼bitsbird(一瓢 在路上...)回复于 2004-05-04 12:15:20 得分 0

感谢您使用微软的产品。  
   
  您可以首先生成一个自定义的PageSize对象,然后赋给PrintDocument对象的DefaultPageSettings.PaperSize属性,这样可以达到自定义Page大小的目的。  
  我是这样实现的,您可以参考以下:  
  private   System.Drawing.Printing.PrintDocument   pd;  
  private   StreamReader   streamToPrint;  
   
  printFont   =   new   Font("Arial",   10);  
  streamToPrint   =   new   StreamReader   ("PrintMe.Txt");  
  PaperSize   pkCustomSize1   =   new   PaperSize("First   custom   size",   800,500);  
   
  pd.PrintPage   +=   new   PrintPageEventHandler(this.pd_PrintPage);  
  pd.DefaultPageSettings.PaperSize   =pkCustomSize1;//将自定义的Papersize赋给PrintDocument  
  pd.DefaultPageSettings.PaperSize.Height   =500;//您可以修改pagesize的大小  
  pd.DefaultPageSettings   .PaperSize   .Width   =800;  
   
  pd.Print();  
   
  private   void   pd_PrintPage(object   sender,   PrintPageEventArgs   ev)    
  {...}  
   
  关于PaperSize对象的构造方法您可以参看:  
  .NET   Framework   Class   Library        
   
  PaperSize   Constructor  
   
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdrawingprintingpapersizeclassctortopic.asp  
   
  - 微软全球技术中心   开发技术支持  
   
  本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款  
  (http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。  
  为了为您创建更好的讨论环境,请参加我们的用户满意度调查  
  (http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。  
  Top

2 楼blue_apple(蓝苹果)回复于 2004-05-04 13:03:15 得分 0

楼上,我用下面的语句  
  PrintDocument1.DefaultPageSettings.PaperSize   =   New   PaperSize("Custom   Paper   Size",   433,   300)   
  也可以自定义纸张,在 PrintPreviewDialog1 里也可以预览到,但打印时,我用的是连打  
   
  纸,打完第一张后,按正常来说,纸张移位应是 300, 但它不是,纸张移位是A4的高度,  
   
  这样的话,第二张就移位了。  
   
  用下面的语句  
  PrintDocument1.DefaultPageSettings.PaperSize   =   PrintDocument1.PrinterSettings.PaperSizes(PaperKind.A5)  
   
  纸张移位的移位是好正常,刚好是A5的高度。  
   
  你有没有试打印过呀,麻烦你试一下,如果OK的话,告诉我一声。  
   
  我用的打印机是:LQ1600KIII。Top

3 楼jhnhu(玩的就是技术)回复于 2004-05-04 13:20:37 得分 0

有时候用这种方法自定义打印  
   
  在打印机上设自定义纸张(打开"打印机和传真"窗口,文件->服务器属性->创件新格式,用尺量一下纸,把数据填进去。),把LQ1600的默认纸张设成自定义的。  
  直接用程序打就是了,换页的功能交给打印机驱动Top

4 楼blue_apple(蓝苹果)回复于 2004-05-04 13:51:25 得分 0

楼上,你的方法是OK的,我刚刚试过,先感谢,  
   
  用程序设置不行吗?,我想,是可以的,因为WORD2000里 有自定义纸张打印的。  
   
  麻烦大家帮帮忙啦,,在线等!!Top

5 楼blue_apple(蓝苹果)回复于 2004-05-04 17:47:09 得分 0

UPTop

6 楼jhnhu(玩的就是技术)回复于 2004-05-04 23:54:12 得分 0

word2000不是基于.net的,实现方法相对.net比较底层  
   
  .net的打印还没研究透,好象很多都是不可行的  
  比如我想把   边   设置为0(内容可以撑满整张纸)   ,好象是不行的,那个属性只能get,不能setTop

7 楼blue_apple(蓝苹果)回复于 2004-05-05 18:08:18 得分 0

我自己顶Top

8 楼wahahasnail(笑东笑西笑南笑北笑来笑去笑自己原来无知无识)回复于 2004-05-06 13:42:27 得分 0

up!Top

9 楼chinahth(淡若浮云)回复于 2004-05-06 17:12:53 得分 0

顶Top

10 楼blue_apple(蓝苹果)回复于 2004-05-08 20:35:09 得分 0

upTop

11 楼blue_apple(蓝苹果)回复于 2004-05-09 15:07:12 得分 0

没人理吗?Top

12 楼qqws(十年树木,百年树袋熊)回复于 2004-06-07 21:22:56 得分 0

这个难题难道没有人解决吗?Top

13 楼allanli(若尘)回复于 2004-06-07 22:14:01 得分 0

可以解决的,我公司现在用的打印类就可以实现自定义纸张打印.  
  不过必须动态添加纸张格式,也就是用程序完成'jhnhu(玩的就是技术)   '所说的步骤  
  Top

14 楼AntingZ(夕惕若)回复于 2004-06-07 23:21:32 得分 0

不知道水晶报表的打印可不可以自定义纸张?Top

15 楼jhnhu(玩的就是技术)回复于 2004-06-08 21:00:13 得分 0

水晶报表   for   .net  
  在设计界面上   右键   设计xx(菜单忘了)  
  然后选择打印机,选择在打印机上设置的自定义纸张,界面上的纸马上就变成自定义大小了  
   
  还是上面说的原理,把换页交给打印机Top

16 楼njhyh(小辉)回复于 2004-06-09 13:21:41 得分 0

Private   Sub   PrintDoc_PrintPage(ByVal   sender   As   Object,   ByVal   e   As   System.Drawing.Printing.PrintPageEventArgs)   Handles   PrintDoc.PrintPage  
                  '定义指向Graphics的指针  
                  Dim   g   As   Graphics  
                  '每页中可打印的文本行数  
                  Dim   linesPerPage   As   Long  
                  '记录打印的当前行  
                  Dim   Current   As   Long  
                  '当前的纵坐标  
                  Dim   y   As   Double  
                  '页的左边距  
                  Dim   left   As   Double  
                  '页的顶边距  
                  Dim   top   As   Double  
                  '要输出的文本  
                  Dim   strOutput   As   String  
                  '打印字体  
                  Dim   PrintFont   As   System.Drawing.Font  
                  '打印时使用的刷子  
                  Dim   brush   As   New   System.Drawing.SolidBrush(Color.Black)  
                  '当前活动的子窗体  
                  Dim   activeChild   As   Form   =   Me.ActiveMdiChild  
                  '子窗体中的RichTextBox控件  
                  Dim   theBox   As   RichTextBox  
   
                  '获得当前活动的子窗体  
                  activeChild   =   Me.ActiveMdiChild  
                  '获得子窗体的RichTextBox控件  
                  theBox   =   CType(activeChild.ActiveControl,   RichTextBox)  
                  '设置打印字体  
                  PrintFont   =   theBox.Font  
                  '获得Graphics对象  
                  g   =   e.Graphics  
                  '设置页面的左边距  
                  left   =   e.MarginBounds.Left  
                  '获得页面的上边距  
                  top   =   e.MarginBounds.Top  
                  '计算每页能打印的行数  
                  '顶端留出两行用于打印标题,底端留出两行用于打印注脚  
                  linesPerPage   =   e.MarginBounds.Height   /   PrintFont.GetHeight(g)   -   4  
                  '设置打印的起始位置  
                  y   =   top  
                  '输出标题  
                  g.DrawString(activeChild.Text,   PrintFont,   brush,   left,   y)  
                  '设置正文的输出位置  
                  y   =   top   +   2   *   PrintFont.GetHeight(g)  
                  '循环输出正文  
                  While   Current   <   linesPerPage  
                          '读取要输出的内容  
                          strOutput   =   line.ReadLine()  
                          '如果没有要打印的内容,则中止循环  
                          If   Not   strOutput   Is   Nothing   Then  
                                  '计算要输出的纵坐标位置  
                                  y   =   y   +   PrintFont.GetHeight(g)  
                                  '输出正文  
                                  g.DrawString(strOutput,   PrintFont,   brush,   left,   y)  
                          Else  
                                  Exit   While  
                          End   If  
                  End   While  
                  '设置注脚的输出位置  
                  y   =   e.MarginBounds.Bottom   -   PrintFont.GetHeight(g)  
                  '输出注脚  
                  g.DrawString("Footer",   PrintFont,   brush,   e.MarginBounds.Width   /   2,   y)  
                  '如果这一页没有打完正文,将HasMorePages属性设置为True,  
                  '这将再次激发PrintPage事件  
                  If   Not   strOutput   Is   Nothing   Then  
                          e.HasMorePages   =   True  
                  Else  
                          e.HasMorePages   =   False  
                  End   If  
          End   Sub  
  你试试???Top

17 楼jhnhu(玩的就是技术)回复于 2004-06-09 19:57:05 得分 0

njhyh(小辉)给的只不过是msdn中的代码罢了,和纸张没有任何关系Top

18 楼blue_apple(蓝苹果)回复于 2004-06-10 19:45:22 得分 0

94   没有提到换页Top

19 楼njhyh(小辉)回复于 2004-06-11 07:59:41 得分 0

呵呵!!upTop

20 楼qqws(十年树木,百年树袋熊)回复于 2004-06-14 08:41:12 得分 0

难道就没有办法解决自定义纸张了吗?WIN   API有没有什么设置纸张的函数啊Top

21 楼allanli(若尘)回复于 2004-06-14 10:15:29 得分 0

不是说了嘛!在现阶段的.NET版本是不能像word一样随便自定义纸张大小的(尽管你设置自定义纸张后预览可以正常显示,但打印时走纸还是没能按照预览纸张走纸,不过用些小技巧也可达到表面上可以),只能通过API动态添加我们需要的纸张格式,也就是'jhnhu(玩的就是技术)   '说的那几个步骤用代码实现就可以了.这个方法我们公司已经使用很久了,效果很好,只要打印机本身支持自定义纸张大小和你添加的纸张格式能够被你的打印机所支持(具体就是能够通过'jhnhu(玩的就是技术)   '的办法正常打印).这种办法有几个缺点,就是如果打印机是网络打印机的话,那么必须先在打印机所在机器先添加纸张格式(你可以先在那台电脑运行程序定义所有可能的打印纸格式),还有就是如果用户用到的纸张格式很多,那么就会在电脑添加了很多纸张格式了(不过可以通过动态添加动态删除的就可以做到word一样效果了)Top

22 楼blue_apple(蓝苹果)回复于 2004-06-16 20:35:38 得分 0

请问楼上 “动态添加动态删除”是怎样实现的呀,  
   
  还有,'jhnhu(玩的就是技术)   ' 说的那种方法 在win98是怎样设置的呀???Top

23 楼webmasterss(天涯解语花)回复于 2004-06-16 22:56:01 得分 0

最简单的就是在系统里设置服务器属性,定义新的纸张格式。  
  程序控制不是对所有型号和品牌的打印机都管用,可以调API或者你可以看看打印机说明书,过纸的时候直接发送给他16进制字串,控制过纸长度!Top

24 楼webmasterss(天涯解语花)回复于 2004-06-16 22:58:33 得分 0

再补充一下,调API不是对所有打印机都管用,我试过,但用直接给打印家发字串的方式肯定能成功!Top

25 楼blue_apple(蓝苹果)回复于 2004-06-17 14:34:06 得分 0

楼上,能不能给个例程呀?Top

26 楼blue_apple(蓝苹果)回复于 2004-09-02 16:27:50 得分 0

upTop

27 楼blue_apple(蓝苹果)回复于 2004-09-19 00:14:04 得分 0

upTop

28 楼wangjunhua22(wang)回复于 2004-09-19 18:14:31 得分 0

在操作系统中打印机-->属性--自定义纸张就0k了。  
  Top

29 楼blue_apple(蓝苹果)回复于 2004-09-20 21:32:02 得分 0

up,这个问题没有人能解决吗,.NET也太差了Top

30 楼hzfu007(幻影)回复于 2004-09-21 08:58:24 得分 0

帮你up一下。和你同感!Top

31 楼kikosisi(kikosisi)回复于 2004-09-21 10:37:10 得分 0

和打印机有关系,设置了吗?  
  打印机不同,打的效果也不同  
  Top

相关问题

  • 如何设置打印机的自定义纸张的大小。
  • 如何在NT4.0中设置自定义打印纸张?急!
  • 2000下如何自定义设置打印纸张?
  • 如何设置自定义纸张进行打印?
  • PB 自定义纸张设置
  • 请问如何设置DataReport的纸张大小,如A3,A4,自定义等 。
  • EXCEL编程高手:自定义纸张该如何设置?我的EPSON300K打印机不支持自定义纸张。
  • 如何在WIN2000中自定义纸张
  • win98下pb7.0如何自定义纸张?
  • windows 2000 下如何自定义纸张?

关键词

  • .net
  • 打印
  • 属性
  • 技术
  • microsoft
  • asp
  • 自定义
  • 纸张
  • papersizes
  • 打印机

得分解答快速导航

  • 帖主:blue_apple

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo