WebEnh

.net7 mvc jquery bootstrap json 学习中 第一次学PHP,正在研究中。自学进行时... ... 我的博客 https://enhweb.github.io/ 不错的皮肤:darkgreentrip,iMetro_HD
随笔 - 1079, 文章 - 1, 评论 - 75, 阅读 - 174万
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

Posted on   WebEnh  阅读(326)  评论(0编辑  收藏  举报

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  }

 

 
 
 
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2022-12-21 设置 ASP.NET Core Web API 中响应数据的格式 AddNewtonsoftJson 使用NewtonsoftJson替换掉默认的System.Text.Json序列化组件
2018-12-21 nginx 常见正则匹配符号表示
2018-12-21 Nginx if 条件判断
2016-12-21 【Bootstrap-插件使用】Jcrop+fileinput组合实现头像上传功能
2016-12-21 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统
2016-12-21 ASP.NET MVC 3 技术(九) 301永久重定向不带www域名到带www的域名
2016-12-21 ASP.NET MVC 3 网站优化总结(三)Specify Vary: Accept-Encoding header
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

了解更多