C#实现自定义打印文字和图片

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;
        }

最后结果如下

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值