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=" ...
随机推荐
- ArkUI,更高效的框架设计
原文:https://mp.weixin.qq.com/s/uSIzuBby7Z92drNDmejKXw,点击链接查看更多技术内容. 上期文章我们讲到了ArkUI的三大特性,同时提到了Ark ...
- 英文A+B
A+B 题目描述 读入两个小于100的正整数A和B,计算A+B. 需要注意的是:A和B的每一位数字由对应的英文单词给出. 输入描述: 测试输入包含若干测试用例,每个测试用例占一行,格式为"A ...
- 转载 | 基于函数计算自定义运行时快速部署一个 springboot 项目
简介: 本文转自函数计算征集令优秀征文,活动火热进行中,欢迎大家报名参加! 什么是函数计算? 函数计算是事件驱动的全托管计算服务.使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码.函 ...
- CCO x Hologres:实时数仓高可用架构再次升级,双11大规模落地
简介:本文将会介绍今年是如何在去年基础上进行实时数仓高可用架构升级,并成功大规模落地双11. 作者 | 梅酱 来源 | 阿里技术公众号 一 2021年双11总结 2021年阿里巴巴双11期间,由CC ...
- KubeMeet|聊聊新锐开源项目与云原生新的价值聚焦点
简介: 10 月 16 日上海,OAM/KubeVela.OpenKruise.OCM 三大开源项目的社区负责人.核心贡献者和企业用户将齐聚 KubeMeet,和现场 100 名开发者聊聊新的技术环 ...
- dotnet 在 UOS 统信系统上运行 UNO 程序输入时闪烁黑屏问题
本文记录我在虚拟机内安装了 UOS 统信系统,运行 UNO 的基于 Skia 的 Gtk 应用程序时,在输入的过程中不断窗口闪黑问题 本质上说这个问题和 UNO 毫无关系,这是一个 OpenGL 硬件 ...
- RT-Thead移植时缺少SystemCoreClockUpdate函数
一.问题 在移植 RT-Thead 时,需要获取mcu当前的 HCLK 时钟频率来设置滴答时钟,而我使用的库函数中刚好缺少SystemCoreClockUpdate函数. 我之前在RT-Thread移 ...
- VSCode+VUE+ESLint以达到保存自动格式化
首先打开VSCode在.eslintrc.js中加入以下代码(不知道怎么找可以ctrl+shift+p进行搜索),添加 vscode 终端启动服务 // 添加⾃定义规则 'prettier/prett ...
- [2]自定义Lua解析方式
[2]自定义Lua解析方式 在上文中我们学会学会更改加载路径,加载对应文件夹下的Lua脚本. 默认解析加载的lua脚本存在的文件位置非AB包或者Resources文件夹下往往不能随包体更新,这显然不符 ...
- git学习--GitHub上如何进行PR(Pull Request)操作
目录 一.前言 二.实现步骤 2.1 将小红在GitHub上的Repository clone到小明的本地电脑 2.1.1 fork小红在GitHub上的Repository到小明的GitHub 2. ...