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 }
 
 
 

C# fastreport 实现各个报表指定各自的默认打印机的更多相关文章

  1. LODOP指定window默认打印机和临时默认打印机

    通过以下语句,可指定windows默认打印机LODOP.SET_PRINT_MODE("WINDOW_DEFPRINTER",某打印机名或序号);这种默认打印机是指的windows ...

  2. C#获取本地打印机列表,并将指定打印机设置为默认打印机

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  3. SQLServer判断指定列的默认值是否存在,并修改默认值

    SQLServer判断指定列的默认值是否存在,并修改默认值 2008年10月21日 星期二 下午 12:08 if exists(select A.name as DefaultName,B.name ...

  4. 如何指定GCC的默认头文件路径

    如何指定GCC的默认头文件路径 网上偶搜得之,以之为宝:)原地址:http://blog.chinaunix.net/u/28781/showart.php?id=401631============ ...

  5. Fastreport生成WEB报表

    开发WEB应用系统通常都会遇到报表打印问题.简单应用可利用IE的页面打印功能,利用HTML标签控制格式来实现.但复杂的业务型应用系统,报表不仅是组成应用的 重要部分,还常常是相当复杂的.现在很多应用系 ...

  6. FastReport和RDLC报表

    最近在做报表的时候第一次接触到RDLC报表,对比于之前使用的FastReport报表来说,在使用体验上个人目前感觉RDLC灵活性相对较差,尤其是表格的格式多样的时候,不易修改.RDLC应用于格式简单的 ...

  7. 使用功能强大的插件FastReport.Net打印报表实例

    我第一次使用FastReport插件做的功能是打印一个十分复杂的excel表格,有几百个字段都需要绑定数据,至少需要4个数据源,而且用到横向.竖向合并单元格. 我不是直接连接数据库,而是使用Regis ...

  8. FASTREPORT COM/ActiveX报表如何保存到C++项目中?

    可以的. VC++ : ... IStream * pStream;CreateStreamOnHGlobal(NULL, true, &pStream);pStream->AddRef ...

  9. ExcelUtility 对excel的序列化与反序列化,支持当单元格中数据为空时将属性赋值为指定类型的默认值

    源码https://github.com/leoparddne/EPPlusHelper 安装: Install-Package ExcelUtility -Version 1.1.4 需要为对象添加 ...

  10. 当src获取不到图片,onerror可指定一张默认的图片

    <img src="img/789.png" onerror="javascript:this.src='img/123.png';" alt=" ...

随机推荐

  1. 基于ArkUI开发框架,图片马赛克处理的实现

     原文:https://mp.weixin.qq.com/s/60HDKcBFV7GTjZpzeHtjeg,点击链接查看更多技术内容.     关于马赛克   马赛克是一种使用较为广泛的图片处理方式, ...

  2. Lite Actor:方舟Actor并发模型的轻量级优化

    原文:https://mp.weixin.qq.com/s/8biIBddpy6GKgakazg1vcg,点击链接查看更多技术内容. 并发模型是用来实现不同应用场景中并发任务的编程模型,通过合理地使用 ...

  3. CentOS 利用pam控制ssh用户的登录及SSH安全配置

    CentOS 利用pam控制ssh用户的登录 有关pam的使用,请找相关的文档.下面只说两个简单的例子. 首先在/etc/pam.d/sshd加入一句: account    required     ...

  4. mysql 重新整理——sql 执行语句的顺序[五]

    前言 盗图: 其实在复杂的语句中,需要我们逐步去分析,然后呢,我们了解一些优化器到底是如何帮我们优化的,就知道到底是mysql怎么执行代码. 我把以前的丢了,后续补全.

  5. WPF 探索任务管理器的进程分组逻辑

    在看到 Win10 或 Win11 的 Task Manager 任务管理器时,不知大家是否有一个疑问,在 进程 标签里的应用进程是如何分组的.为什么有些组能包含很多个不同的进程,有些只能包含一个.本 ...

  6. 使用Kafka Assistant监控Kafka关键指标

    使用Kafka Assistant监控Kafka关键指标 使用Kafka时,我们比较关心下面这些常见指标. Kafka Assistant下载地址:http://www.redisant.cn/ka ...

  7. 1.权限控制RBAC

    官方参考地址:https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/rbac/#privilege-escalation-prev ...

  8. LVGL SCROLL循环滚动

    一.案例测试 这里我使用LVGL的版本是8.3.3 运行案例 lvgl_examples\scroll\lv_example_scroll_6 效果如下所示 二.现象 这里先描述一下现象,当我们使用 ...

  9. 一键启动的AI离线知识库,无需复杂环境依赖,小白都能上手了

    简介 在人工智能技术飞速发展的今天,我们经常面临一个挑战:如何快速.简便地部署和使用AI技术?AntSK项目,一个开源的AI知识库和智能体,就是为了解决这一问题而诞生的.现在,我们自豪地宣布,AntS ...

  10. Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目

    Servlet注解的使用,简化配置 以及,使用模板方法设计模式优化oa项目 每博一文案 有句谚语说:"一怒之下踢石头,只有痛着脚趾头." 比一件糟糕的事情更可拍的,是你用糟糕的态度 ...