==== 第二次100分提问 针式打印机走纸太多,如何解决? ====

时间:2022-03-22 09:04:20
程序中设置了纸张大小,如下,打印预览也是设置的大小,但在针式打印机上打印后纸张走出很长一段(连续纸),不知如何解决?

pageSetupDialog1.Document = printDocument1;
pageSetupDialog1.PageSettings.PaperSize = new System.Drawing.Printing.PaperSize("Bill", grp.Width-30, grp.Height);


-----------------------------------------------------------------------------------
原贴
http://community.csdn.net/Expert/TopicView.asp?id=4315567
解决一起结贴

19 个解决方案

#1


c#用pagesize解决不了设置纸张的问题,我的解决方法是先在系统中设置一个纸张,假如是aaa,然后通过编程遍历系统纸张,传给Document,这样就可以了!!具体代码网上查!!

#2


你的应该是网络打印机,你要在打印机所在的系统设置纸张大小。不能用程序控制纸张大小。如果是本地机的就可以。

#3


记得我以前用foxpro和VB做小票打印机打印POS小票的时候也遇到这个问题,经常走很长一段空白,很浪费纸张。
具体忘记是如何实现的了,反正我记得跟程序是没有关系的。
小票打印机有串口的、并口的,如果是串口的,需要在操作系统的串口设置里进行一些相关设置。
记得我当时也是弄了很久没搞定,后来打电话问打印机厂家的服务电话,他的回答给了一些灵感。

建议你尝试用其它语言写个简单的打印,首先要确认这种情况是不是程序所造成的

#4


SqlDataAdapter(小鸟):   我用的是本地打印机,如何用程序控制?

 glider21cn(随风飞翔):最好完全用程序完成,否则要详细告诉客户如何设置,如果换了操作人员,新来的不会操作,也是一件麻烦事

#5


好像在这里的纸张大小设置不太对

#6


private void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
this.printDocument1.DefaultPageSettings.PaperSize =new System.Drawing.Printing.PaperSize("Bill", 30,211);

}
这样试试看

#7


我之前做过这样一个程序,同一个程序,同样的设置。在两台打印机中打印,就是一台正常,一台不正常。到现在我也找不到原因。好在客户后来自己找两台打印机对换了。

#8


记得应该在打印机高级设置里面改一下进纸方式就可以了,有手工,连续等等,不同打印机也不一样

#9


我想这不是c#的问题,也不是c#能解决的问题。
应该去找打印机才对,与打印机的驱动等有很大关系。

#10


up

#11


在打印服务器中设了,打印机属性中也设了,都不管用啊,还有什么办法?

#12


本人遇到同样的问题,在VC++中同样的环境可以按照设置的纸张正确走纸。

#13


程序中设置的纸张大小必须是控制面板中打印机已的纸张,否则不行,
也就是说实际上自定义纸张是无效的,即使定义了,实际走纸是按控制面板中打印机默认纸张如“A4”

所以,楼如果走纸是固定大小的,可以进入控制面板定义一个纸张大小并设置为默认纸张就可,这样
在程序中自定义才有效调用这个自定义的默认纸张,否则必须调用API。

http://community.csdn.net/Expert/topic/4260/4260928.xml?temp=.717251

#14


对于非标准的纸型,我没有进行任何别的设置,
我发现 flygoldfish(长江支流) 的MisGoldPrinter
是可以正确走纸的,可惜flygoldfish(长江支流)
没有开放GolePrinter的这一部分代码,如果还有
哪位仁兄知道,望不吝赐教,非常感谢。

#15


www.webmis.com.cn

PrinterPageSetting 点击这里下载 源码 2005-04-18 打印页面设置、打印机设置、打印预览对话框 

这个就是啊


没有开放GoldPrinter的这一部分代码
http://www.webmis.com.cn/MisGoldPrinter.htm
 [开源学习版下载]
MIS金质打印通的源码

#16


study

#17


帮你顶

#18


兄弟,我这里有一个控件,是可以设置纸张大小的,你要不要,MSN留下,我们不能上QQ

#19


谢谢  flygoldfish(长江支流) ,你的程序PrintPageSetUp
给了我启发,并且解决了问题,在此与诸位共享:
  在定义PrintDocument时定义纸张是会一起冲突的,即:
   在PrintDocument中定义纸张可以模拟显示正确,但在打印
   时,总是按照A4走纸,而且屏蔽了打印时所做的打印设置。
   所以,你最好在打印时使用打印设置,象 flygoldfish(长江支流) 
   那样封装在PrintSettings中最好。举例如下:
  PrtMyPrintDocument pd = new PrtMyPrintDocument(my); //假定为默认打印机
  pd.DefaultPageSettings = this.PrtSetUp(pd);
  PrintPreviewDialog dlg = new PrintPreviewDialog() ;
  dlg.Document = pd;
  DialogResult result = dlg.ShowDialog();
  if (result == DialogResult.OK) 
  {
pd.Print();
  }
  其中PrtMyPrintDocument是我自己定义的PrintDocument继承类,由于一开始
定义了纸张,所以一直不能正确走纸,现在正常。
  this.PrtSetUp(pd)方法很简单,参考flygoldfish(长江支流)的代码如下:
  private PageSettings PrtSetUp(PrintDocument printDocument)
{
//声明返回值的PageSettings
PageSettings ps = new PageSettings();
//申明并实例化PageSetupDialog
PageSetupDialog psDlg = new PageSetupDialog();
try
{
//相关文档及文档页面默认设置
psDlg.Document = printDocument;
psDlg.PageSettings = printDocument.DefaultPageSettings;
//显示对话框
DialogResult result = psDlg.ShowDialog();
if (result == DialogResult.OK)
{
ps = psDlg.PageSettings;
printDocument.DefaultPageSettings = psDlg.PageSettings;
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString(),"出现打印错误");
}
finally
{
psDlg.Dispose();
psDlg = null;
}
return ps;
}
你完全可以定义自己的其他参数,再一次谢谢长江支流)!
希望以上对各位有用。

#1


c#用pagesize解决不了设置纸张的问题,我的解决方法是先在系统中设置一个纸张,假如是aaa,然后通过编程遍历系统纸张,传给Document,这样就可以了!!具体代码网上查!!

#2


你的应该是网络打印机,你要在打印机所在的系统设置纸张大小。不能用程序控制纸张大小。如果是本地机的就可以。

#3


记得我以前用foxpro和VB做小票打印机打印POS小票的时候也遇到这个问题,经常走很长一段空白,很浪费纸张。
具体忘记是如何实现的了,反正我记得跟程序是没有关系的。
小票打印机有串口的、并口的,如果是串口的,需要在操作系统的串口设置里进行一些相关设置。
记得我当时也是弄了很久没搞定,后来打电话问打印机厂家的服务电话,他的回答给了一些灵感。

建议你尝试用其它语言写个简单的打印,首先要确认这种情况是不是程序所造成的

#4


SqlDataAdapter(小鸟):   我用的是本地打印机,如何用程序控制?

 glider21cn(随风飞翔):最好完全用程序完成,否则要详细告诉客户如何设置,如果换了操作人员,新来的不会操作,也是一件麻烦事

#5


好像在这里的纸张大小设置不太对

#6


private void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
this.printDocument1.DefaultPageSettings.PaperSize =new System.Drawing.Printing.PaperSize("Bill", 30,211);

}
这样试试看

#7


我之前做过这样一个程序,同一个程序,同样的设置。在两台打印机中打印,就是一台正常,一台不正常。到现在我也找不到原因。好在客户后来自己找两台打印机对换了。

#8


记得应该在打印机高级设置里面改一下进纸方式就可以了,有手工,连续等等,不同打印机也不一样

#9


我想这不是c#的问题,也不是c#能解决的问题。
应该去找打印机才对,与打印机的驱动等有很大关系。

#10


up

#11


在打印服务器中设了,打印机属性中也设了,都不管用啊,还有什么办法?

#12


本人遇到同样的问题,在VC++中同样的环境可以按照设置的纸张正确走纸。

#13


程序中设置的纸张大小必须是控制面板中打印机已的纸张,否则不行,
也就是说实际上自定义纸张是无效的,即使定义了,实际走纸是按控制面板中打印机默认纸张如“A4”

所以,楼如果走纸是固定大小的,可以进入控制面板定义一个纸张大小并设置为默认纸张就可,这样
在程序中自定义才有效调用这个自定义的默认纸张,否则必须调用API。

http://community.csdn.net/Expert/topic/4260/4260928.xml?temp=.717251

#14


对于非标准的纸型,我没有进行任何别的设置,
我发现 flygoldfish(长江支流) 的MisGoldPrinter
是可以正确走纸的,可惜flygoldfish(长江支流)
没有开放GolePrinter的这一部分代码,如果还有
哪位仁兄知道,望不吝赐教,非常感谢。

#15


www.webmis.com.cn

PrinterPageSetting 点击这里下载 源码 2005-04-18 打印页面设置、打印机设置、打印预览对话框 

这个就是啊


没有开放GoldPrinter的这一部分代码
http://www.webmis.com.cn/MisGoldPrinter.htm
 [开源学习版下载]
MIS金质打印通的源码

#16


study

#17


帮你顶

#18


兄弟,我这里有一个控件,是可以设置纸张大小的,你要不要,MSN留下,我们不能上QQ

#19


谢谢  flygoldfish(长江支流) ,你的程序PrintPageSetUp
给了我启发,并且解决了问题,在此与诸位共享:
  在定义PrintDocument时定义纸张是会一起冲突的,即:
   在PrintDocument中定义纸张可以模拟显示正确,但在打印
   时,总是按照A4走纸,而且屏蔽了打印时所做的打印设置。
   所以,你最好在打印时使用打印设置,象 flygoldfish(长江支流) 
   那样封装在PrintSettings中最好。举例如下:
  PrtMyPrintDocument pd = new PrtMyPrintDocument(my); //假定为默认打印机
  pd.DefaultPageSettings = this.PrtSetUp(pd);
  PrintPreviewDialog dlg = new PrintPreviewDialog() ;
  dlg.Document = pd;
  DialogResult result = dlg.ShowDialog();
  if (result == DialogResult.OK) 
  {
pd.Print();
  }
  其中PrtMyPrintDocument是我自己定义的PrintDocument继承类,由于一开始
定义了纸张,所以一直不能正确走纸,现在正常。
  this.PrtSetUp(pd)方法很简单,参考flygoldfish(长江支流)的代码如下:
  private PageSettings PrtSetUp(PrintDocument printDocument)
{
//声明返回值的PageSettings
PageSettings ps = new PageSettings();
//申明并实例化PageSetupDialog
PageSetupDialog psDlg = new PageSetupDialog();
try
{
//相关文档及文档页面默认设置
psDlg.Document = printDocument;
psDlg.PageSettings = printDocument.DefaultPageSettings;
//显示对话框
DialogResult result = psDlg.ShowDialog();
if (result == DialogResult.OK)
{
ps = psDlg.PageSettings;
printDocument.DefaultPageSettings = psDlg.PageSettings;
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString(),"出现打印错误");
}
finally
{
psDlg.Dispose();
psDlg = null;
}
return ps;
}
你完全可以定义自己的其他参数,再一次谢谢长江支流)!
希望以上对各位有用。

#20