VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 754|回复: 8

[求助]vb.net不通过浏览水晶报表直接打印

[复制链接]

2

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-1-11 17:00:01 | 显示全部楼层 |阅读模式
我现在有一个小程序,想使用vb.net来实现不通过浏览水晶报表就可以直接打印。也就是说,我输入一条信息,然后按“打印”按钮,就可以直接打印,打印的规格也要设置好。比如:打印汽车票这类的,我只要输入目的站,以及票数,就直接将票打印出来。能给一些参考意见吗?以前的做的,一般导到水晶报表再打印。现在就是直接打印,急,谢谢了!!
回复

使用道具 举报

2

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-1-15 22:36:02 | 显示全部楼层
是不是也先通过水晶报表,只不过不让水晶报表显示出来??望各位高手指点!!
回复

使用道具 举报

2

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-1-18 12:27:01 | 显示全部楼层
用PrintDocument控件,能实现在操作界面上只要按“打印”键,打印机就能工作,把票据打印出来吗?
回复

使用道具 举报

1

主题

12

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-1-25 22:00:01 | 显示全部楼层
可以,PrintDocument控件的printpage 事件
中写打印代码

调用 printdocument.print()就可以打印了
回复

使用道具 举报

2

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-2-1 15:36:02 | 显示全部楼层
它需要和printDialog控件一块用吧
你帮我看一下下面的代码:
public void StartPrint(Stream streamToPrint,string streamType)
                {

                        this.streamToPrint=streamToPrint;
                        this.streamType=streamType;
                        // Allow the user to choose the page range he or she would
                        // like to print.
                        System.Windows.Forms.PrintDialog PrintDialog1=new PrintDialog ();//创建一个PrintDialog的实例。
                        PrintDialog1.AllowSomePages = true;

                        // Show the help button.
                        PrintDialog1.ShowHelp = true;

                        // Set the Document property to the PrintDocument for
                        // which the PrintPage Event has been handled. To display the
                        // dialog, either this property or the PrinterSettings property
                        // must be set
                        PrintDialog1.Document = docToPrint;//把PrintDialog的Document属性设为上面配置好的PrintDocument的实例

                        DialogResult result = PrintDialog1.ShowDialog();//调用PrintDialog的ShowDialog函数显示打印对话框

                        // If the result is OK then print the document.
                        if (result==DialogResult.OK)
                        {
                                docToPrint.Print();//开始打印
                        }

                }

                // The PrintDialog will print the document
                // by handling the document’s PrintPage event.
                private void docToPrint_PrintPage(object sender,
                        System.Drawing.Printing.PrintPageEventArgs e)//设置打印机开始打印的事件处理函数
                {

                        // Insert code to render the page here.
                        // This code will be called when the control is drawn.

                        // The following code will render a simple
                        // message on the printed document
                        switch(this.streamType)
                        {
                                case "txt":
                                        string text = null;
                                        System.Drawing.Font printFont = new System.Drawing.Font
                                                ("Arial", 35, System.Drawing.FontStyle.Regular);

                                        // Draw the content.
                                        System.IO.StreamReader streamReader=new StreamReader(this.streamToPrint);
                                        text=streamReader.ReadToEnd();
                                        e.Graphics.DrawString(text,printFont,System.Drawing.Brushes.Black,e.MarginBounds.X,e.MarginBounds.Y);
                                        break;
                                case "image":
                                        System.Drawing.Image image=System.Drawing.Image.FromStream(this.streamToPrint);
                                        int x=e.MarginBounds.X;
                                        int y=e.MarginBounds.Y;
                                        int width=image.Width;
                                        int height=image.Height;
                                        if((width/e.MarginBounds.Width)>(height/e.MarginBounds.Height))
                                        {
                                                width=e.MarginBounds.Width;
                                                height=image.Height*e.MarginBounds.Width/image.Width;
                                        }
                                        else
                                        {
                                                height=e.MarginBounds.Height;
                                                width=image.Width*e.MarginBounds.Height/image.Height;
                                        }
                                        System.Drawing.Rectangle destRect=new System.Drawing.Rectangle(x,y,width,height);
                                        e.Graphics.DrawImage(image,destRect,0,0,image.Width,image.Height,System.Drawing.GraphicsUnit.Pixel);
                                        break;
                                default:
                                        break;
                        }

最后怎么来触发它
我用一个命令按钮,我学“打开对话框”的代码:
用printDialog1.ShowDialog ();
不行
请帮忙,谢谢
回复

使用道具 举报

1

主题

12

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-2-6 19:15:01 | 显示全部楼层
PrintDocument 的 printpage 方法


Private Sub print1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles print1.PrintPage

            e.Graphics.DrawString(“要输出的字符串”)


    End Sub


DrawArc 已重载。绘制一段弧线,它表示由一对坐标、宽度和高度指定的椭圆部分。
DrawBezier 已重载。绘制由 4 个 Point 结构定义的贝塞尔样条。
DrawBeziers 已重载。从 Point 结构的数组绘制一系列贝塞尔样条。
DrawClosedCurve 已重载。绘制由 Point 结构的数组定义的闭合基数样条。
DrawCurve 已重载。绘制经过一组指定的 Point 结构的基数样条。
DrawEllipse 已重载。绘制一个由边框(该边框由一对坐标、高度和宽度指定)定义的椭圆。
DrawIcon 已重载。在指定坐标处绘制由指定的 Icon 对象表示的图像。
DrawIconUnstretched 绘制指定的 Icon 对象表示的图像,而不缩放该图像。
DrawImage 已重载。在指定位置并且按原始大小绘制指定的 Image 对象。
DrawImageUnscaled 已重载。在坐标对所指定的位置并且按其原始大小绘制指定的 Image 对象。
DrawLine 已重载。绘制一条连接由坐标对指定的两个点的线条。
DrawLines 已重载。绘制一系列连接一组 Point 结构的线段。
DrawPath 绘制 GraphicsPath 对象。
DrawPie 已重载。绘制一个扇形,该扇形由一个坐标对、宽度和高度以及两条射线所指定的椭圆定义。
DrawPolygon 已重载。绘制由一组 Point 结构定义的多边形。
DrawRectangle 已重载。绘制由坐标对、宽度和高度指定的矩形。
DrawRectangles 已重载。绘制一系列由 Rectangle 结构指定的矩形。
DrawString 已重载。在指定位置并且用指定的 Brush 和 Font 对象绘制指定的文本字符串。
回复

使用道具 举报

2

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-2-9 20:45:01 | 显示全部楼层
那我想指定位置,来打印某些字段,如:车票上的目的站、座位号、票价,该怎么处理,谢谢了!!
回复

使用道具 举报

2

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-7-1 10:30:01 | 显示全部楼层
e.Graphics.DrawString(“要输出的字符串”)
上面这句会提示:没有可访问的"DrawString"接受此数目的参数,因此重载决策失败。
不清楚,又要麻烦你了!!
回复

使用道具 举报

0

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-8-3 20:00:01 | 显示全部楼层
rpt1.PrintToPrinter(1,false,1,9999)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表