欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

C#实现自定义打印文字和图片的示例代码

时间:2022-06-09 09:20:23|栏目:.NET代码|点击:

C#中打印其实就是自己绘图+调用系统打印函数,于是便有了以下操作

1.调用打印机设置

如果你想在打印前设置打印机属性(或者切换打印机),请务必添加这段代码,否则电脑会直接按照预设的设置进行打印(打印机都没法选)

//打印机设置
PrintDialog printDialog = new PrintDialog();
printDialog.Document = ptDoc;
printDialog.ShowDialog();

ptDoc就是打印的文件内容,会在后面解释

2.关联文档

等于我们需要新建一个空白的画布,然后把我们需要的文字,图片,线条依次摆上去

PrintDocument ptDoc = new PrintDocument();
ptDoc.DocumentName = "测试文件";//在队列中显示的名字
ptDoc.PrintPage += PtDoc_PrintPage;//关联内容生成方法

3.绘制内容

本次测试的内容分为:横排文字,竖排文字,图片,具体内容和位置可以通过修改参数进行调整

        private void PtDoc_PrintPage(object sender, PrintPageEventArgs e)
        {
            e.Graphics.Clear(Color.White);
            // 开始绘制文档
            // 默认为横排文字
            e.Graphics.DrawString("标题:打印测试",
                                    new Font(new FontFamily("宋体"), 40, FontStyle.Bold),
                                    System.Drawing.Brushes.Red,
                                    170, 10);
            // 横线
            e.Graphics.DrawLine(Pens.Black, 20, 110, 800, 110);
            // 竖排文字
            e.Graphics.DrawString("内容",
                                    new Font(new FontFamily("宋体"), 14, FontStyle.Bold),
                                    System.Drawing.Brushes.Black,
                                    20, 120,
                                    new StringFormat(StringFormatFlags.DirectionVertical));
 
            e.Graphics.DrawString( this.txtName.Text,
                        new Font(new FontFamily("宋体"), 14, FontStyle.Bold),
                        System.Drawing.Brushes.Black,
                        20, 200);
 
            //e.Graphics.DrawImage(Image.FromFile(Path), 20, 250, 800, 100);    //会造成失真
 
            Image imgsample = Image.FromFile(Path);
            Point pt = Zoom(imgsample.Width, imgsample.Height, 200);
            e.Graphics.DrawImage(imgsample, 20, 250, pt.X, pt.Y);//直接打印可能出现太大打印不下
        }

        同时直接打印图片的话可能造成图片太大,可以写一个缩放方法来限制图片的最大尺寸

        private Point Zoom(int x, int y,int maxWidth)
        {
            Point pt = new Point(x, y);
            while (pt.X > maxWidth)
            {
                pt.X /= 2;
                pt.Y /= 2;
            }
            return pt;
        }

最后结果如下

上一篇:大型门户网站实现的十四大技术小结

栏    目:.NET代码

下一篇:浅析C#的复制和克隆

本文标题:C#实现自定义打印文字和图片的示例代码

本文地址:http://www.codeinn.net/misctech/204229.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有