RDLC不预览打印——超市小票

RDLC不预览打印——超市小票

当然,写到这,肯定是能打印了

如果要做到超市小票的打印有以下几个问题:

1.小票需要在后台打印

2.小票没有分页,或者说,小票的长度是0,或者是无限长

后台打印就要用到微软的那篇文章了,http://msdn.microsoft.com/zh-cn/library/ms252172(VS.80).aspx#Y120

这篇文章好是好,并且在网上很多版本,但是这段代码是有问题的

?
private void PrintPage( object sender, PrintPageEventArgs ev)
    {
        Metafile pageImage =
          new Metafile(m_streams[m_currentPageIndex]);
       <span style= "color: #ff0000;" > ev.Graphics.DrawImage(pageImage, 0, 0);</span>
 
        m_currentPageIndex++;
        ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
    }

  这段代码,注意红色那句,通过PrintPageEventArgs 把通过stream生成的PageImage画出来的一步,(PrintPageEventArgs 的属性是对应的所设置打印机的属性,例如:设定A4纸,则PageBounds就是A4纸的大小

?
<span style= "color: #ff0000;" > ev.Graphics.DrawImage(pageImage, 0, 0);</span>

这句话的原型应该是

public void DrawImage(	Image image,	 x,	 y)
在0,0位置把pageImage输出出来,可事实上根本不行,并且输出的字体大小,格式都很糟糕,无法控制。
后来看这段代码的VB代码里面却是

ev.Graphics.DrawImage(pageImage, ev.PageBounds)

我也依葫芦画瓢的换成了ev.PageBounds(是PageBounds不是MarginBounds否则又要出问题效果很好,并且把报表应该有的样式输出来了,解决了上面提到的问题1.

同时通过页面设置把 Margins都设置成零,问题2也能解决了。

还有一个问题就是打印的时候,会弹出一个框,提示”正在打印“,这个问题

StandardPrintController spc=new StandardPrintController(); pdoc.PrintController=spc;

通过上面的代码就能去掉(StandardPrintController 指定一个打印控制器,它向打印机发送信息。)

还是非常感谢这个文章的内容。

下面这篇则是比较全,并且在 ev.Graphics.DrawImage(pageImage, 0, 0);做了修改

至此,应该就能打印出一个漂亮的报表了,并且速度还行。

演练:在不预览的情况下打印本地报表

http://msdn.microsoft.com/zh-cn/library/ms252091(v=VS.90)#Y720


你可能感兴趣的:(Stream,image,vb,报表,微软)