首页 > 编程语言 >C# fastreport 实现各个报表指定各自的默认打印机

C# fastreport 实现各个报表指定各自的默认打印机

时间:2023-12-21 17:55:22浏览次数:31  
标签:打印机 string C# doc reportPrinterName fastreport var root

1、业务需求

  工作室有多个报表需要打印,如果在报表模板里设置默认打印机的话,每个人电脑上安装的打印机是不相同的,所以就需要设定各自的默认打印机实现打印功能。

2、xml模板设计(PrinterSetting.xml)

复制代码
1 <?xml version="1.0" encoding="utf-8"?>
2 <root>
3   <!--打印设置-->
4   <printerSettings>
5     <!--报表名称-->
6     <setting ReportName="检测条码" PrinterName="OneNote for Windows 10" />
7     <setting ReportName="申请单条码" PrinterName="Microsoft Print to PDF" />
8   </printerSettings>
9 </root>
复制代码

2.9  加载打印机列表

复制代码
 1 private void InitReportPrinter()
 2         {
 3             var printers = PrinterSettings.InstalledPrinters;//获取电脑上安装的所有打印机
 4             foreach (var printer in printers)
 5             {
 6                 cmdReportType.Items.Add(printer.ToString());
 7             }
 8             cmdReportType.SelectedIndex = 0;
 9             var reportPrinterName = ReportService.GetDefaultReportPrinter(reportName);
10             if (!string.IsNullOrEmpty(reportPrinterName))
11             {
12                 cmdReportType.SelectedItem = reportPrinterName;
13             }
14         }
复制代码

 

3、进入报表预览界面获取已经设置好的默认打印机

复制代码
/// <summary>
        /// 根据文件名获取打印机
        /// </summary>
        /// <param name="reportName"></param>
        /// <returns></returns>
        public static string GetDefaultReportPrinter(string reportName)
        {
            string reportPrinterName = "";
            XmlDocument doc = new XmlDocument();
            string newPath = GetPath();//在最后
            doc.Load(newPath);

            XmlNode root = doc.SelectSingleNode($"root/printerSettings/setting[@ReportName='{reportName}']");
            if (root != null)
            {
                var ele = (XmlElement)root;
                reportPrinterName = ele.GetAttribute("PrinterName");
            }
            return reportPrinterName;
        }
复制代码

 

4、设定打印机

复制代码
/// <summary>
        /// 指定文件对应的打印机
        /// </summary>
        /// <param name="reportName"></param>
        /// <param name="reportPrinterName"></param>
        /// <returns></returns>
        public static bool SetDefaultReportPrinter(string reportName, string reportPrinterName)
        {
            XmlDocument doc = new XmlDocument();
            string newPath = GetPath();
            doc.Load(newPath);
            XmlNode root = doc.SelectSingleNode($"root/printerSettings/setting[@ReportName='{reportName}']");
            if (root != null)
            {
                var ele = (XmlElement)root;
                ele.SetAttribute("PrinterName", reportPrinterName);
            }
            else
            {
                XmlNode newXml = doc.SelectSingleNode(@"root/printerSettings");
                XmlElement xmlreport = doc.CreateElement("setting");
                xmlreport.SetAttribute("ReportName", reportName);
                xmlreport.SetAttribute("PrinterName", reportPrinterName);
                newXml.AppendChild(xmlreport);
            }
            doc.Save(newPath);
            return true;
        }

/// <summary>
        /// 获取xml路径,不存在则创建
        /// </summary>
        /// <returns></returns>
        private static string GetPath()
        {
            string path = Path.Combine(AppContext.BaseDirectory, "Config");
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            var dataFilePath = Path.Combine(path, "PrinterSetting.xml");
            if (!File.Exists(dataFilePath))
            {
                XmlDocument xmlDoc = new XmlDocument();
                XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");
                xmlDoc.AppendChild(node);
                XmlNode root = xmlDoc.CreateElement("root");
                xmlDoc.AppendChild(root);
                XmlElement xmlreport = xmlDoc.CreateElement("printerSettings");
                root.AppendChild(xmlreport);
                xmlDoc.Save(dataFilePath);
            }
            return dataFilePath;
        }
复制代码

5、打印机设定

1  var printer = ReportService.GetDefaultReportPrinter(input.ReportName);//获取设定好的打印机名称
2  if (!string.IsNullOrEmpty(printer))
3  {
4      report.PrintSettings.Printer = printer;//赋值
5  }

 

     

标签:打印机,string,C#,doc,reportPrinterName,fastreport,var,root
From: https://www.cnblogs.com/webenh/p/17919752.html

相关文章

  • .NET Core 3 WPF MVVM框架 Prism系列之导航系统
    本文将介绍如何在.NETCore3环境下使用MVVM框架Prism基于区域Region的导航系统git在讲解Prism导航系统以前,咱们先来看看一个例子,我在以前的demo项目建立一个登陆界面:github 咱们看到这里是否是一开始想象到使用WPF带有的导航系统,经过Frame和Page进行页面跳转,而后经过导航日志......
  • C9800配置MAB本地认证失败?
    本随笔不记录如何配置C9800上的MAB,而是相关的注意事项。在Release17.3以前的版本,在WEBUI配置MAB时,在添加DeviceAuthentication信息的时候,以xxxx.xxxx.xxxx或者xx:xx:xx:xx:xx:xx格式添加可能都会自动调整为xxxxxxxxxxxx在Release17.3以后得版本,将变化得不这么灵活,它可以添加x......
  • .netcore 分布式事务CAP 快速入门
    https://blog.csdn.net/jbossjf/article/details/122590688CAP是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案。可以解决跨服务器的数据一致性、可用性问题。一个简单的列子,如:订单系统创建订单后需要通知邮件通知用户下单成功,解决方案有下面几种:1:创......
  • JavaScript 数组方法重写
    constlist=[1,2,3]Array.prototype.myForeach=function(fn){for(leti=0;i<this.length;i++){fn(this[i],i,this)}}Array.prototype.myMap=function(fn){const_list=[]for(leti=0;i<this.length;i......
  • Databend 开源社区上榜 2023 年度 OSCHINA 优秀开源技术团队
    2023年12月8日,OSCHINA对其平台上众多认证的官方技术团队和开源社区进行了全面评估,并颁发了“2023年度优秀开源技术团队”奖项,以表彰各团队在推动中国开源生态系统发展方面所展现的创新能力和显著贡献。在这一评选中,Databend开源社区有幸获得了2023年度优秀开源技术团......
  • [C#] 禁用控制台关闭按钮
    禁用控制台关闭按钮internalclassProgram{[DllImport("user32.dll",EntryPoint="FindWindow")]externstaticIntPtrFindWindow(stringlpClassName,stringlpWindowName);[DllImport("user32.dll",E......
  • cmd命令行设置 windows 设置环境变量
    设置用户级别的环境变量::设置新参数JAVA_HOME1setxJAVA_HOME1"c:\test";exit;echo"%JAVA_HOME1%";::追加参数内容JAVA_HOME1setxJAVA_HOME1"%JAVA_HOME1%;c:\test2\;";exit;echo"%JAVA_HOME1%";::追加到Pathsetxpath"%pat......
  • php 在laravel中集成grpc
    在laravel中集成使用grpc一、安装:1、macOSphp扩展:peclinstallgrpc,peclinstallprotobufprotocbuf:brewinstallprotobufetcd:brewinstalletcd2、ubuntu:php扩展:peclinstallgrpc(如果遇到[Makefile:1038:src/core/lib/comp......
  • Pytorch模型结构修改
    1.Var方差在pytorch中的差别:tlist=input.tolist()print(input)print(np.mean(tlist),np.var(tlist))print(torch.mean(input),torch.var(input))可以看到numpy与torch求出来的**Var**与**Mean**有差别原因:如下图为torch.var官网描述,其中存在一个矫正correctio......
  • cookie和session的一些疑惑以及ai解答
    我:那么当浏览器关闭的时候,当再次访问这个地址的时候,为什么之前设置的cookie没有被删除掉?而且按照你说的这次可能会生成一个新的sessionID,那么cookie里面的其他数据,它是如何获取上一次的cookie的信息,而且它是如何知道是这个客户端访问的?而不是其他客户端?AI:当浏览器关闭时,是否删......