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. 重新点亮shell————sed的替换[十]

    前言 简单介绍一下sed 和 awk. 正文 这两个和vim的区别: vim 是交互式和 他们是非交互式 vim是文件操作模式与他们是行交互模式 sed sed 的 模式空间. sed的基本工作方式是 ...

  2. 图像验证码识别,字母数字汉子均可cnn+lstm+ctc

    图形验证码如下: 训练两轮时的准确率:上边显示的是未识别的  config_demo.yaml System: GpuMemoryFraction: 0.7 TrainSetPath: 'train/ ...

  3. 力扣1127(MySQL)-用户购买平台(困难)

    题目: 支出表: Spending 这张表记录了用户在一个在线购物网站的支出历史,该在线购物平台同时拥有桌面端('desktop')和手机端('mobile')的应用程序.这张表的主键是 (user_ ...

  4. 说说关系型数据库与Serverless

    简介: 看到如今Serverless在云计算行业喷薄欲出的态势,像极了<星星之火,可以燎原>中的描述:虽然不能预测未来的发展和变化,但对于云计算来说这是个相对确定的方向.本文从产业界和学术 ...

  5. 基于SLS构建RDS审计合规监控

    简介: 数据库是企业业务的数据核心,其安全方面的问题在传统环境中已经成为泄漏和被篡改的重要根源.因此,对数据库的操作行为尤其是全量 SQL 执行记录的审计日志,就显得尤为重要. 背景 数据库是企业业务 ...

  6. 【开通指南】 实时计算 Flink 全托管版本

    简介: [开通指南]实时计算 Flink 全托管版本 1.试用的实时计算 Flink 版产品是后付费还是预付费?是否有额外费用产生?预付费,有额外的SLB费用,一天2元封顶.(开通 Flink 全托管 ...

  7. Hologres如何支持超高基数UV计算(基于roaringbitmap实现)

    简介: 本文将会介绍Hologres基于roaringbitmap实现超高基数的UV计算 RoaringBitmap是一种压缩位图索引,RoaringBitmap自身的数据压缩和去重特性十分适合对于大 ...

  8. [Go] 注意 go build -o <output> 选项的准确含义

    -o <output> 选项强制执行把构建的可执行文件写入到目标文件或者目标目录中. 如果 output 是已存在的目录,那么所有构建好的文件都将写入到该目录中. 注意:如果目录不存在的话 ...

  9. dotnetCampus.UITest.WPF 一个支持中文用例的界面单元测试框架

    本文来安利大家一个支持使用中文做用例名的 WPF 界面 UI 单元测试框架 卖点 有没有觉得命名太难?有没有觉得单元测试的命名更难?没错,这是一个业界的大问题.很多团队都会因为单元测试的用例函数命名太 ...

  10. Docker部署Scrapy-redis分布式爬虫框架(整合Selenium+Headless Chrome网页渲染)

    前言 我的京东价格监控网站需要不间断爬取京东商品页面,爬虫模块我采用了Scrapy+selenium+Headless Chrome的方式进行商品信息的采集. 由于最近爬虫用的服务器到期,需要换到新服 ...