打印 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的更多相关文章

  1. C# 调用打印机打印文件

    C# 调用打印机打印文件,通常情况下,例如Word.Excel.PDF等可以使用一些对应的组件进行打印,另一个通用的方式是直接启用一个打印的进程进行打印.示例代码如下: using System.Di ...

  2. Java jacob调用打印机打印word文档

    前面说了Java如何生成复杂的Word文档,今年记录下Java如何调用打印机打印word文档. 起初用的是自带的PrintJob,但是系统提供的打印机制并不成熟完整.网上的代码也是千篇一律,在我的打印 ...

  3. aspose调用打印机打印文档

    aspose很不错的插件,功能非常强大,用到了其中的aspose.word. 如何生成word文档,点击. 下面说说如何如何通过打印机打印文档. aspose提供了一个print方法,通过该方法可以直 ...

  4. js调用打印机打印

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. js调用打印机 打印整体或部分

    有时前端的项目中需要添加打印的功能,首先要知道打印分为整体打印和局部打印两种,而局部打印又可细分为局部打印指定的部分,和局部打印指定部分之外的部分.实例比文字看起来更清晰,下面我将用代码来描述 1.整 ...

  6. java生成快递单并调用打印机打印

    生成快递单过程中需要生成条形码,生成条形码可参考:https://www.cnblogs.com/linbky/p/12091248.html 下面这段代码生成的快递单是完全符合京东快递的10 x 1 ...

  7. (转载)js调用打印机 打印整体或部分

    本文转载自:https://www.cnblogs.com/lfhy/p/6802781.html 以下为原文内容: 有时前端的项目中需要添加打印的功能,首先要知道打印分为整体打印和局部打印两种,而局 ...

  8. java 调用打印机 打印服务

    import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import javax ...

  9. Java调用打印机打印指定路径图片

    依赖 javax.print package com.xgt.util; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; ...

随机推荐

  1. [python]上传文件验证

    上传文件验证 上传文件验证分为:1.文件头验证 2.文件类型验证 3.文件后缀验证 获取文件上传的二进制数据 # 获取上传文件 file = request.files.get('file') if ...

  2. Kayleigh O'Connor - I Won't Be There

    Do you feel like you're about to drown The wave is rushing over you throw you onto now I remember th ...

  3. English trip EM2-PE-5A Plan a dinner party Teacher:Lamb

    课上内容(Lesson) # Appetizer   ['æpə'taɪzɚ]  n. 开胃物,开胃食品 spinach salad  菠菜沙拉  # "p" 发b音 gazpac ...

  4. 基于TCAM 的高速路由查找

    摘要 随着路由器接口速率的提高,传统的软件路由查找机制已经不能满足要求.目前常见的硬件解决方案是采用TCAM实现关键词 TCAM,路由查找,最长前缀匹配. 1.引言 路由器转发IP 分组时,转发引擎需 ...

  5. PXE网络启动无人值守自动安装 centos 全程实录

    PXE网络启动无人值守自动安装 centos 全程实录 http://shayi1983.blog.51cto.com/4681835/1549854/ 搭建Pxe服务器无人听应答全自动安装CentO ...

  6. [luogu P2234] [HNOI2002]营业额统计

    [luogu P2234] [HNOI2002]营业额统计 题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司 ...

  7. js如何实现sign算法验证?

    https://segmentfault.com/q/1010000011892180

  8. 全面了解TCP/IP到HTTP

    一.OSI参考模型 OSI(Open System Interconnect),即开放式系统互联.一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型.该体系结构标准定 ...

  9. angular 多端打包

    1.在environments文件夹里新建三个文件: //生产环境 environment.prod.ts: export const environment = { production: true ...

  10. 读取磁盘:LBA方式

    LBA简介 磁盘读取发展 IO操作读取硬盘的三种方式: chs方式 :小于8G (8064MB) LBA28方式:小于137GB LBA48方式:小于144,000,000 GB LBA方式访问使用了 ...