首页 > 编程语言 >C# mvc如何调用浏览器直接打印

C# mvc如何调用浏览器直接打印

时间:2024-09-23 18:34:59浏览次数:10  
标签:浏览器 string C# image 打印 二维码 mvc new 图片

直接打印到打印机是指在C# MVC(Model-View-Controller)开发框架中,通过编程方式将数据直接发送到打印机进行打印的操作。

在C# MVC中,可以使用System.Drawing.Printing命名空间中的PrintDocument类来实现直接打印到打印机的功能

1)绝对路径方式

        /// <summary>
        /// 打印订单信息(调用方法)
        /// </summary>
        /// <param name="wapBillNo"></param>
        /// <param name="wapCarNo"></param>
        public void PrintBillInfo(string wapBillNo, string wapCarNo)
        {
                //调用浏览器的打印
                // 创建一个PrintDocument对象
                PrintDocument printDoc = new PrintDocument();
                // 设置打印事件处理程序
                printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
                // 调用Print方法开始打印
                printDoc.Print();    
        }

     private void PrintPage(object sender, PrintPageEventArgs e)
    {
        // 在打印页面事件中编写打印逻辑
        Graphics graphics = e.Graphics;
        Font font = new Font("Arial", 12);
        Brush brush = Brushes.Black;
        float lineHeight = font.GetHeight();

        // 打印文本
        string text = "这是要打印的文本";
        graphics.DrawString(text, font, brush, new PointF(10, 10));

        // 打印图片(只支持相对路径或绝对路径,不支持网络图片地址)
        Image image = Image.FromFile("path/to/image.jpg");
       // Image image = Image.FromFile("C://20240920114351.jpg");
        graphics.DrawImage(image, new PointF(10, 30));
    }

打印纸条信息如下:

 2)网络图片方式(主要代码)

处理方式:先根据需要生成二维码图片Bitmap对象,再转成二维码图片并返回网络图片地址,根据网络图片地址,绘制二维码图片信息

       /// <summary>
        /// 打印新的纸条信息
        /// </summary>
        /// <param name="wapBillNo"></param>
        /// <param name="wapCarNo"></param>
        public void PrintBillInfo(string wapBillNo, string wapCarNo)
        {
            string qrCodeImgUrl = string.Empty;
            //生成二维码图片的bitmap
             Bitmap bitBillNo = CreateQRCode(wapBillNo,2); //2
            //将bitmap图像转成图片文件
             bool isSave = SaveQRCode(bitBillNo,wapBillNo,ref qrCodeImgUrl);
            if (isSave)
            {
                //全局变量赋值
                qrCode_wapBillNo = wapBillNo;
                qrCode_wapCarNo = wapCarNo;
                qrCode_imageUrl = qrCodeImgUrl;

                //调用浏览器的打印
                // 创建一个PrintDocument对象
                PrintDocument printDoc = new PrintDocument();
                // 设置打印事件处理程序
                printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
                // 调用Print方法开始打印
                printDoc.Print();

                //清空全局变量
                qrCode_wapBillNo = "";
                qrCode_wapCarNo = ""; 
                qrCode_imageUrl = "";;
            }
            else {
            }
          
        }

     /// <summary>
        /// 委托打印的实现方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PrintPage(object sender, PrintPageEventArgs e)
        {
            // 在打印页面事件中编写打印逻辑
            Graphics graphics = e.Graphics;
            Font font9 = new Font("Arial", 9);
            Brush brush = Brushes.Black;
            // float lineHeight = font.GetHeight();
            // 打印文本
            string text1 = "预约单号:" + qrCode_wapBillNo;
            graphics.DrawString(text1, font9, brush, new PointF(5, 10));
            string text2 = "车牌号码:"+ qrCode_wapCarNo;
            graphics.DrawString(text2, font9, brush, new PointF(5, 30));
            // 打印图片(只支持相对路径或绝对路径)
            // Image image = Image.FromFile("path/to/image.jpg");
            // Image image = Image.FromFile("C://20240920114351.jpg");
            //打印图片(支持网络图片路径)
            string imgUrl = qrCode_imageUrl; 
            //获取网络图片的图片流对象
            Image image = GetImageByNetWork(imgUrl);
            //绘制二维码图片
            //graphics.DrawImage(image, new PointF(5, 60));    
            graphics.DrawImage(image, new PointF( (image.Width / 2), (image.Height / 2)+5));
        }


        /// <summary>
        /// 生成二维码图片(Bitmap)
        /// </summary>
        /// <param name="str"></param>
        /// <param name="scale"></param>
        /// <param name="version"></param>
        /// <returns></returns>
        public Bitmap CreateQRCode(string str,int scale=4,int version=7) {
            Bitmap bitmap;
            string enCodeString = str;
            //生成设置编码实例
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            //设置二维码的编码方式(BYTE:可识别文字、字母、数字,NUMERIC:只识别数字,不识别文字和字母,ALPHA_NUMERIC:可识别文字、字母、数字,数字识别更准)
          //  qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            //设置二维码的规模,默认4(1-40)
            qrCodeEncoder.QRCodeScale = scale;
            //设置二维码的版本,默认7
            qrCodeEncoder.QRCodeVersion = version;
            //设置错误校验级别,默认中等
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            //生成二维码图片
            bitmap = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
            return bitmap;
        }

        /// <summary>
        /// 保存二维码图片
        /// </summary>
        /// <param name="bitResult"></param>
        public bool SaveQRCode(Bitmap bitResult,string fileName,ref string qrCodeImgUrl)
        {
            bool result = false;
            string msg = string.Empty;
            try
            {
                //获取当前程序集的文件路径
                string applicationPath = AppDomain.CurrentDomain.BaseDirectory.ToString();
                //获取程序集路径+文件夹路径
                string toServerPath = applicationPath + "\\" + ConfigurationManager.AppSettings["UploadImage"];
                //拼接上年月文件夹( C:\\UploadImages\\Sys\\201904 )
                toServerPath = toServerPath + "\\" + "QRCode";
                //判断服务器文件夹路径是否存在
                if (!Directory.Exists(toServerPath))
                {
                    //不存在路径,则创建
                    Directory.CreateDirectory(toServerPath);
                }
                string fullName = fileName.Contains('.') == true ? fileName : (fileName + ".png");
                string savePath = toServerPath + "\\" + fullName;
                //保存二维码图片在photos路径下
                // bitResult.Save("C://" + fileName + ".jpg");
                bitResult.Save(savePath);
                //获取QRCode(二维码)的网络图片地址
                qrCodeImgUrl = GetQRCodeImgUrl(applicationPath,savePath);
                result = true;
            }
            catch (Exception ex) {
                msg = ex.Message;
                result = false;
            }
            return result;

        }

        /// <summary>
        /// 获取网络图片的图片流对象
        /// </summary>
        /// <param name="imgUrl">网络图片地址</param>
        /// <returns></returns>
        public Image GetImageByNetWork (string imgUrl)
        {
            WebRequest req = WebRequest.Create(imgUrl);
            WebResponse resp = req.GetResponse();
            using (Stream stream = resp.GetResponseStream()) {
                return Image.FromStream(stream);
            }
        }

     /// <summary>
        /// 获取QRCode(二维码)的网络图片地址
        /// </summary>
        /// <param name="appPath"></param>
        /// <param name="savePath"></param>
        /// <returns></returns>
        public string GetQRCodeImgUrl(string appPath,string savePath)
        {
            string result = string.Empty;
            //获取相对路径,返回:\UploadImages\QRCode\202409090015.png
            string relatePath = savePath.Substring(appPath.Length, savePath.Length - appPath.Length);
            //返回图片路径,将符号“\”替换成符号“/”,变成:/UploadImages/QRCode/202409090015.png
            relatePath = relatePath.Replace('\\', '/');
            string qrServerUrl = ConfigurationManager.AppSettings["SetQRCodePrintServerUrl"] == null ? "" : ConfigurationManager.AppSettings["SetQRCodePrintServerUrl"].ToString();
            //拼接二维码图片的网络地址(如:http://59.37.60.202:8000/scan/QRCode/202409090015.png)
            result = qrServerUrl + relatePath;
            return result;
        }

打印纸条信息如下:

参考网站:https://cloud.tencent.com/developer/information/%E7%9B%B4%E6%8E%A5%E6%89%93%E5%8D%B0%E5%88%B0%E6%89%93%E5%8D%B0%E6%9C%BAC%23%20MVC

 

标签:浏览器,string,C#,image,打印,二维码,mvc,new,图片
From: https://www.cnblogs.com/xielong/p/18427633

相关文章

  • 云原生周刊:Artifact Hub 成为 CNCF 孵化项目|2024.9.23
    开源项目推荐CorootCoroot是一个开源监控工具,旨在为云原生应用提供可观察性。它通过整合指标、日志和追踪信息,专注于提供应用性能的洞察。DirectPVDirectPV是一个开源项目,旨在为Kubernetes工作负载提供高效的直接卷访问。它通过允许应用绕过容器运行时,直接访问持久卷,从而......
  • Oracle中数据类型number(m,n)
    Oracle中数据类型number(m,n)中m表示的是所有有效数字的位数,n表示的是小数位的位数。m的范围是1-38,即最大38位。   1>.NUMBER类型细讲:Oracle  number  datatype  语法:NUMBER[(precision  [,scale])]简称:precision  -->  p          scale  ......
  • oracle数据类型和对应的java类型
    [转]oracle数据类型和对应的java类型 地址:http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/datacc.htm#BHCJBJCCSQL数据类型JDBC类型代码标准的Java类型Oracle扩展的Java类型 1.0标准的JDBC类型:  CHARjava.......
  • VulnHub靶场笔记 - Breach: 2.1
    靶机下载地址:https://download.vulnhub.com/breach/Breach-2_final2.1.zip一.安装下载后为压缩包文件解压后双击打开.ova文件根据压缩包里附带的说明我们需要将靶机的ip配为静态IP:192.168.110.151选择虚拟网络编辑器选择仅主机的网卡并将子网ip改为110网段点......
  • 将web项目导入到eclipse中常见错误
     摘自 : http://blog.chinaunix.net/uid-26434689-id-3388686.html 将web项目导入到eclipse中常见错误   2012-10-2823:25:54分类: 系统运维 错误1:string cannot be resolved to a type 原因:这种情况一般是因为你的JDK版本没有设置好,或者设置的有不一致......
  • 用Asio实现同步echo服务器
    使用Asio实现同步echo服务器服务端sync_server.h#ifndefASYNC_SERVER_H#define ASYNC_SERVER_H#include<boost/asio/ip/tcp.hpp>#include<memory>#include<set>#include<thread>namespaceMS{ typedefstd::shared_ptr<boost::asio::ip::......
  • 基于DPU的OpenStack裸金属服务快速部署及存储解决方案
    1方案背景和挑战Openstack作为开源云计算领域的领军项目,凭借其强大的功能、灵活的架构以及活跃的社区支持,在全球范围内得到了广泛的采用。通过Openstack,企业和云服务提供商可以更加高效地管理和利用计算资源、存储资源和网络资源,实现业务的快速部署和灵活扩展,从而赢得市场竞争的先......
  • rsync+inotify
    一、rsync简介rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具RemoteSync可以远程同步。它使用一种称为“Rsync演算法”的技术,只传输文件的不同部分,而不是每次都整份传送,这使得它在备份和同步大量数据时非常高效。rsync可以镜像保存整个目录树和文件系统,保持原......
  • CMake 教程(五):安装和测试
    通常,只构建出可执行程序是不够的,还需要能够安装可执行程序。在CMake中,我们可以使用install()指令指明安装规则。这条指令能够用来指明安装的程序、位置和文件。本节使用的源代码材料是官网的Step5目录。下面开始本节的练习。练习1:安装规则(InstallRules)本项目的安......
  • 【Python调用ddddocr打包成exe文件指定模型库及注意事项】
    ddddocr打包成exe后一直存在各种各样的问题,例如:ddddocr\common.onnxfailed.Filedoesn’texist查阅资料后,问题得到解决。但相关资料不多,且不够详细,特写下本文,以便于后来者解决问题。希望本文能帮到你。目标:为了方便调用,打算分别起三个服务,并且打包成EXE方便......