C# 调用打印机 打印 Excel
打印 Excel 模板
大体思路,通过NPOI操作Excel文件,通过Spire将Excel转成图片,将图片传给系统打印。
Spire是收费工具,在微软库中下载Free版本。
#region 打印所用到的函数
private void btnPrint_Click(object sender, EventArgs e)
{
if (!pnlRes.Visible) { MessageBox.Show("请先测量数据!", "提示"); return; } //未测量无法打印
try
{
Settings.PrintDataRead();
if (File.Exists(Settings.path_printExcel))
{
File.Copy(Settings.path_printExcel, Settings.path_printExcelCopy, true);//三个参数分别是源文件路径,存储路径,若存储路径有相同文件是否替换
}
writeExcel();
prtDoc.PrinterSettings.PrinterName = Settings.PrintData.PrinterName; //设置打印机名称
System.Drawing.Printing.PaperSize ps = new System.Drawing.Printing.PaperSize();
//ps.RawKind = 150;
ps.Height = Settings.PrintData.PaperSizeHeight - 5;
ps.Width = Settings.PrintData.PaperSizeWidth + 2;
//ps.PaperName = "default";
prtDoc.DefaultPageSettings.PaperSize = ps;
excelToImage(Settings.path_printExcelCopy);
prtDoc.Print();
cleanAll();
File.Delete(Settings.path_printExcelCopy);
}
catch (Exception ex)
{
LogHelper.Error(ex.GetType(), ex);
MessageBox.Show(ex.Message, "错误");
File.Delete(Settings.path_printExcelCopy);
}
}
//写入信息到Excel
private void writeExcel()
{
try
{
string tempPath = Settings.path_printExcelCopy;
//Excel对象
XSSFWorkbook wk = null;
using (FileStream fs = File.Open(tempPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
wk = new XSSFWorkbook(fs);
fs.Close();
}
//Excel页面 设置->Sheet1
ISheet sheet = wk.GetSheet("Sheet1");
/* 写入操作 依据需求自己编写
for (int j = 0; j < chList.Length; ++j)
{
if ((string)chList[j].ckb.Tag != "0")
{
int cell = (j + 1) * 3 - 2;
//写入通道
sheet.GetRow(1).GetCell(cell).SetCellValue("CH" + (j + 1));
//写入OK / NG Tag 1,OK 2NG
if ((string)chList[j].ckb.Tag == "1")
{
sheet.GetRow(1).GetCell(cell + 1).SetCellValue("OK");
}
else
{
sheet.GetRow(1).GetCell(cell + 1).SetCellValue("NG");
}
//写入机型 时间
sheet.GetRow(2).GetCell(cell).SetCellValue("机型:" + Settings.Model.deviceName);
sheet.GetRow(3).GetCell(cell).SetCellValue(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
for (int i = 0; i < chList[j].lblList.Length; ++i)
{
switch (i)
{
case 0:
sheet.GetRow(4).GetCell(cell).SetCellValue("流量:" + chList[j].lblList[i].Text);
break;
case 1:
sheet.GetRow(5).GetCell(cell).SetCellValue("出口压力:" + chList[j].lblList[i].Text);
break;
case 2:
sheet.GetRow(6).GetCell(cell).SetCellValue("浓度:" + chList[j].lblList[i].Text);
break;
case 3:
sheet.GetRow(7).GetCell(cell).SetCellValue("雾化压力:" + chList[j].lblList[i].Text);
break;
}
}
}
else
{
}
}
*/
using (var fs = new FileStream(tempPath, FileMode.Create, FileAccess.Write))
{
wk.Write(fs);
}
}
catch (Exception ex)
{
LogHelper.Error(ex.GetType(), ex);
MessageBox.Show(ex.Message, "错误");
}
}
private void excelToImage(string filename)
{
try
{
Workbook workbook = new Workbook();
workbook.LoadFromFile(filename);
Worksheet sheet = workbook.Worksheets[0];
sheet.SaveToImage(Settings.path_printImage); //图片后缀.bmp ,imagepath自己设置
}
catch (Exception ex)
{
LogHelper.Error(ex.GetType(), ex);
MessageBox.Show(ex.Message, "错误");
}
}
private void prtDoc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
#region 如果不需要截取图片,可以不用写以下代码
//截取左上角宽度
int rectangleWidth = Settings.PrintData.MarginWidth + 72;
int rectangleHight = Settings.PrintData.MarginHeight + 96;
try
{
GC.Collect();
Graphics g = e.Graphics;
//imagepath是指 excel转成的图片的路径
using (Bitmap bitmap = new Bitmap(Settings.path_printImage))
{
Rectangle newarea = new Rectangle();
newarea.X = rectangleWidth;
newarea.Y = rectangleHight;
newarea.Width = bitmap.Width - rectangleWidth;
newarea.Height = bitmap.Height - rectangleHight;
using (Bitmap newbitmap = bitmap.Clone(newarea, bitmap.PixelFormat))
{
//打印
g.DrawImage(newbitmap, 0, 0, newbitmap.Width, newbitmap.Height);
}
}
}
catch (Exception ex)
{
LogHelper.Error(ex.GetType(), ex);
MessageBox.Show(ex.Message, "错误");
}
#endregion
}
#endregion
C# 调用打印机 打印 Excel的更多相关文章
- C# 调用打印机打印文件
C# 调用打印机打印文件,通常情况下,例如Word.Excel.PDF等可以使用一些对应的组件进行打印,另一个通用的方式是直接启用一个打印的进程进行打印.示例代码如下: using System.Di ...
- Java jacob调用打印机打印word文档
前面说了Java如何生成复杂的Word文档,今年记录下Java如何调用打印机打印word文档. 起初用的是自带的PrintJob,但是系统提供的打印机制并不成熟完整.网上的代码也是千篇一律,在我的打印 ...
- aspose调用打印机打印文档
aspose很不错的插件,功能非常强大,用到了其中的aspose.word. 如何生成word文档,点击. 下面说说如何如何通过打印机打印文档. aspose提供了一个print方法,通过该方法可以直 ...
- js调用打印机打印
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js调用打印机 打印整体或部分
有时前端的项目中需要添加打印的功能,首先要知道打印分为整体打印和局部打印两种,而局部打印又可细分为局部打印指定的部分,和局部打印指定部分之外的部分.实例比文字看起来更清晰,下面我将用代码来描述 1.整 ...
- java生成快递单并调用打印机打印
生成快递单过程中需要生成条形码,生成条形码可参考:https://www.cnblogs.com/linbky/p/12091248.html 下面这段代码生成的快递单是完全符合京东快递的10 x 1 ...
- (转载)js调用打印机 打印整体或部分
本文转载自:https://www.cnblogs.com/lfhy/p/6802781.html 以下为原文内容: 有时前端的项目中需要添加打印的功能,首先要知道打印分为整体打印和局部打印两种,而局 ...
- java 调用打印机 打印服务
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import javax ...
- Java调用打印机打印指定路径图片
依赖 javax.print package com.xgt.util; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; ...
随机推荐
- 【shell脚本】 变量基础学习整理
1.linux系统环境 echo 'echo /etc/profile ' >> /etc/profile echo 'echo /etc/bashrc' >> /etc/ba ...
- pycharm鸡火
由于github被封杀,大虾把它挪到了gitee下面 /pengzhile/jetbrains-agent 主要是一个jar包,放在D:\Program Files\JetBrains\PyCharm ...
- 《SQL 基础教程》第三章:聚合和排序
这一章节主要讲了三方面的内容: 数据的汇总操作a. 聚合函数b.分组操作 给汇总操作指定条件 对汇总结果进行排序 COUNT()等聚合函数 定义: 输入多行,输出一行的函数称为聚合函数 功能: 用于对 ...
- Python3文件操作1 --Python3
1.文件的两种类型 文本文件:由单一特定的编码字符组成(如:txt文件) 二进制文件:直接由比特0和比特1组成,文件内部数据组织格式与文件的用途有关(视频.图片) 2.文件主要操作概述 Python对 ...
- 在虚拟环境下运行 Confluence 6
这个页面针对运行在虚拟硬件环境下的 Confluence 提供一些信息. 概要 在虚拟环境(virtual machine (VM))下运行 Confluence 需要一些特定的技能来进行设定和进行管 ...
- react-thunk的使用流程
react-thunk作用:使我们可以在action中返回函数,而不是只能返回一个对象.然后我们可以在函数中做很多事情,比如发送异步的ajax请求. 这就是react-thunk的使用方法.接受一个d ...
- Nearest Common Ancestors (POJ 1330)
A rooted tree is a well-known data structure in computer science and engineering. An example is show ...
- librdkafka安装和php扩展php-rdkafka安装
1.安装librdkafka mac下 brew install librdkafka linux下 git clone https://github.com/edenhill/librdkafk ...
- vue-vuex状态管理-1
export default vuex.Store{ State, //数据库. getters,// 是我们从数据库里取数据的 API,getters 得是一个”纯函数“ actions,//处理数 ...
- spring注解实现防盗链拦截
首先配置 applicationContext.xml, 添加 <!-- 启用 @AspectJ --> <aop:aspectj-autoproxy /> 新建Java工具类 ...