C# fastreport 实现各个报表指定各自的默认打印机
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 实现各个报表指定各自的默认打印机的更多相关文章
- LODOP指定window默认打印机和临时默认打印机
通过以下语句,可指定windows默认打印机LODOP.SET_PRINT_MODE("WINDOW_DEFPRINTER",某打印机名或序号);这种默认打印机是指的windows ...
- C#获取本地打印机列表,并将指定打印机设置为默认打印机
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- SQLServer判断指定列的默认值是否存在,并修改默认值
SQLServer判断指定列的默认值是否存在,并修改默认值 2008年10月21日 星期二 下午 12:08 if exists(select A.name as DefaultName,B.name ...
- 如何指定GCC的默认头文件路径
如何指定GCC的默认头文件路径 网上偶搜得之,以之为宝:)原地址:http://blog.chinaunix.net/u/28781/showart.php?id=401631============ ...
- Fastreport生成WEB报表
开发WEB应用系统通常都会遇到报表打印问题.简单应用可利用IE的页面打印功能,利用HTML标签控制格式来实现.但复杂的业务型应用系统,报表不仅是组成应用的 重要部分,还常常是相当复杂的.现在很多应用系 ...
- FastReport和RDLC报表
最近在做报表的时候第一次接触到RDLC报表,对比于之前使用的FastReport报表来说,在使用体验上个人目前感觉RDLC灵活性相对较差,尤其是表格的格式多样的时候,不易修改.RDLC应用于格式简单的 ...
- 使用功能强大的插件FastReport.Net打印报表实例
我第一次使用FastReport插件做的功能是打印一个十分复杂的excel表格,有几百个字段都需要绑定数据,至少需要4个数据源,而且用到横向.竖向合并单元格. 我不是直接连接数据库,而是使用Regis ...
- FASTREPORT COM/ActiveX报表如何保存到C++项目中?
可以的. VC++ : ... IStream * pStream;CreateStreamOnHGlobal(NULL, true, &pStream);pStream->AddRef ...
- ExcelUtility 对excel的序列化与反序列化,支持当单元格中数据为空时将属性赋值为指定类型的默认值
源码https://github.com/leoparddne/EPPlusHelper 安装: Install-Package ExcelUtility -Version 1.1.4 需要为对象添加 ...
- 当src获取不到图片,onerror可指定一张默认的图片
<img src="img/789.png" onerror="javascript:this.src='img/123.png';" alt=" ...
随机推荐
- 深入解析decltype和decltype(auto)
decltype关键字是C++11新标准引入的关键字,它和关键字auto的功能类似,也可以自动推导出给定表达式的类型,但它和auto的语法有些不同,auto推导的表达式放在"="的 ...
- jenkins 持续集成和交付——pipeline(五)
前言 整理一下pipeline. 正文 介绍 什么是pipeline呢? 根据前面的所得,我们知道,以前都是模板形式,但是如果有些复杂的项目,需要用更加自定义的写法,那么就有了pipeline,也就是 ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-39-highlight() 方法之追踪定位
1.简介 在之前的文章中宏哥讲解和分享了,为了看清自动化测试的步骤,通过JavaScript添加高亮颜色,就可以清楚的看到执行步骤了.在学习和实践Playwright的过程中,偶然发现了使用Playw ...
- 400倍加速, PolarDB HTAP实时数据分析技术解密
简介: PolarDB MySQL是因云而生的一个数据库系统, 除了云上OLTP场景,大量客户也对PolarDB提出了实时数据分析的性能需求.对此PolarDB技术团队提出了In-Memory Col ...
- 几种常见的MySQL/PolarDB-MySQL回收表空间方法对比
简介: 当我们频繁的删除表中的数据后,碎片就会变多,有经验的DBA就会回收表空间,回收表空间有好几种方式,我们要选择哪一种呢? 背景 为什么需要回收表空间?任何一个存储或您购买的实例规格都有容量限制, ...
- 重度使用Flutter研发模式下的页面性能优化实践
简介: 淘宝特价版是集团内应用Flutter技术场景比较多,且用户量一亿人以上的应用了.目前我们首页.详情.店铺.我的,看看短视频,及评价,设置等二级页面都在用Flutter技术搭建.一旦Flutte ...
- 阿里云RDS深度定制-XA Crash Safe
简介: 近几年,随着分布式数据库系统的兴起,特别是基于MySQL分布式数据库系统,会用到XA来保证全局事务的一致性.众所周知,MySQL对XA事务的支持是比较弱的,存在很多问题.为了满足分布式数据库 ...
- 基于MaxCompute+开放搜索的电商、零售行业搜索开发实践
简介: 搜索一直是电商行业流量来源的核心入口之一,如何搭建电商行业搜索并提升搜索效果,一直是电商行业开发者努力攻克的难题.基于传统数据库或开源引擎虽然能够搭建基础搜索服务,但随着商品数据的增多和业务 ...
- dotnet 读 WPF 源代码笔记 简单聊聊文本布局换行逻辑
在 WPF 里面,带了基础的文本库功能,如 TextBlock 等.文本库排版的重点是在文本的分行逻辑,也就是换行逻辑,如何计算当前的文本字符串到达哪个字符就需要换到下一行的逻辑就是文本布局的重点模块 ...
- 2019-4-12-VisualStudio-好用插件集合
title author date CreateTime categories VisualStudio 好用插件集合 lindexi 2019-04-12 09:37:47 +0800 2019-0 ...