今天使用.net做一个票据打印模块时,学习几点,分享一下。

第一点,在.net下使用基于word模板生出新的word文档

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Microsoft.Office.Interop.Word;
namespace DzWordUtil
{
public class WordUtil
{
private ApplicationClass WordApp;
private Document WordDoc;
private object missing = Type.Missing;
private static bool isOpened = false;//判断word模版是否被占用
/// <summary>
/// 将Word另存为。strFileName为另存为文件名(含地址),isReplace是否删除已经存在的文件。
/// </summary>
/// <param name="strFileName">另存为的文件名</param>
/// <param name="isReplace">是否删除</param>
public void SaveAs(string strFileName, bool isReplace)
{
if (isReplace && File.Exists(strFileName))
{
File.Delete(strFileName);
}
object fileName = strFileName;
try
{
WordDoc.SaveAs(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
}
catch (Exception Ex)
{
throw new Exception(Ex.Message);
}
}
/// <summary>
/// 定义一个Word.Application 对象
/// </summary>
private void activeWordApp()
{
WordApp = new ApplicationClass();
}
/// <summary>
/// 退出模板编辑,释放相应资源。
/// </summary>
public void Quit()
{
try
{
WordDoc.Close(ref missing, ref missing, ref missing);
WordApp.Application.Quit(ref missing, ref missing, ref missing);
isOpened = false;
}
catch (Exception Ex)
{
throw new Exception(Ex.Message);
}
}
public void PrintDialog(string strFileName,string printerName = null)
{
if (File.Exists(strFileName))
{
activeWordApp();
WordApp.Visible = false;
object oPrintFile = (object)strFileName;
try
{
while (isOpened)
{
System.Threading.Thread.Sleep(500);
}
WordDoc = WordApp.Documents.Add(ref oPrintFile, ref missing, ref missing, ref missing);
isOpened = true;
WordDoc.Activate();
//WordDoc.PrintPreview();
if (printerName != null)
{
WordApp.ActivePrinter = printerName;
}
WordDoc.PrintOut();
this.Quit();
}
catch (Exception Ex)
{
Quit();
isOpened = false;
throw new Exception(Ex.Message);
}
}
}
/// <summary>
/// 基于模版新建Word文件。strTemppath为模版地址。
/// </summary>
/// <param name="strTemppath">模版地址</param>
public void OpenTempelte(string strTemppath)
{
activeWordApp();
WordApp.Visible = false;
object oTemplate = (object)strTemppath;
try
{
while (isOpened)
{
System.Threading.Thread.Sleep(500);
}
WordDoc = WordApp.Documents.Add(ref oTemplate, ref missing, ref missing, ref missing);
isOpened = true;
WordDoc.Activate();
}
catch (Exception Ex)
{
Quit();
isOpened = false;
throw new Exception(Ex.Message);
}
}
/// <summary>
/// 添加文本内容到指定位置。LabelId为书签名,Content为文本内容。
/// </summary>
/// <param name="LabelId">书签名</param>
/// <param name="Content">图片地址</param>
public void FillLable(string LabelId, string Content)
{
object bkmC = LabelId;
if (WordApp.ActiveDocument.Bookmarks.Exists(LabelId) == true)
{
WordApp.ActiveDocument.Bookmarks.get_Item(ref bkmC).Select();
}
WordApp.Selection.TypeText(Content);
}
/// <summary>
/// 添加图片到指定位置。LabelId为书签名,imgUrl为图片地址。
/// </summary>
/// <param name="LabelId">书签名</param>
/// <param name="imgUrl">图片地址</param>
public void addPic(String LabelId, String imgUrl)
{
if (LabelId != null && LabelId.Length > 0 && imgUrl != null && imgUrl.Length > 0)
{
object LinkToFile = false;
object SaveWithDocument = true;
object bkmC = LabelId;
if (WordApp.ActiveDocument.Bookmarks.Exists(LabelId) == true)
{
WordApp.ActiveDocument.Bookmarks.get_Item(ref bkmC).Select();
}
WordApp.Selection.InlineShapes.AddPicture(imgUrl, ref LinkToFile, ref SaveWithDocument, ref missing);
}
}
}
}

上面的代码,有部分为转载了网络上。

  string templatePath = templetUrl;
//新建Word工具对象
WordUtil wordUtil = new WordUtil();
//导入模版
wordUtil.OpenTempelte(templatePath);
//添加数据到书签
wordUtil.FillLable("Define_ID","08-1-502");
wordUtil.FillLable("Operat_Time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//因为要保留模板,所以另存为。
wordUtil.SaveAs(System.Windows.Forms.Application.StartupPath +"\\testResult.doc", true);
//操作完成,退出Word工具系统。
wordUtil.Quit();

使用上面代码就可以生成一个新的word文档

第二点就是利用Microsoft.Office.Interop.Word中PrintOut功能。

因为.net下打印功能和.word下打印功能有点出入

转载

Background 如果为 true,则可以让自定义项代码在打印文档时继续工作。
Append 如果为 true,则会将文档追加到 OutputFileName 参数指定的文件;如果为 false,则会改写 OutputFileName 的内容。
Range 页面范围。可以是任何 WdPrintOutRange 值。
OutputFileName 如果 PrintToFile 为 true,则此参数指定输出文件的路径和文件名。
From 当 Range 设置为 wdPrintFromTo 时的起始页码。
To 当 Range 设置为 wdPrintFromTo 时的结束页码。
Item 要打印的项。可以是任何 WdPrintOutItem 值。
Copies 要打印的份数。
Pages 要打印的页码和页码范围,由逗号分隔。例如,“2, 6-8”意为打印第 2 和第 6、7、8页。
PageType 要打印的页面的类型。可以是任何 WdPrintOutPages 值。
PrintToFile 如果为 true,则将打印机指令发送到文件。请确保使用 OutputFileName 指定一个文件名。
Collate 在打印多份文档时,如果为 true,则先打印该文档的所有页,然后再打印下一份。
ActivePrinterMacGX 此参数仅在 Microsoft Office Macintosh Edition 中可用。
ManualDuplexPrint 如果为 true,则在没有双面打印装置的打印机上打印双面文档。如果此参数为 true,则忽略 PrintBackground 和 PrintReverse 属性。
PrintZoomColumn 希望 Word 在一页上水平布置的页数。可以为 1、2、3 或 4。PrintZoomRow 希望 Word 在一页上垂直布置的页数。可以为 1、2 或 4。
PrintZoomPaperWidth 希望 Word 将打印页缩放到的宽度(以缇表示,20 缇 = 1 磅)。

PrintZoomPaperHeight 希望 Word 将打印页缩放到的高度(以缇表示)。

第三点,分享一个链接

http://technet.microsoft.com/zh-cn/library/microsoft.office.interop.word%28v=office.11%29.aspx

Microsoft office interop word下打印机的运用相关推荐

  1. 错误类型:“系统找不到 Microsoft.Office.Interop.Word(转)

    错误类型:"系统找不到 Microsoft.Office.Interop.Word" 编译出现错误: "Could not load file or assembly ' ...

  2. Asp.net Core使用Microsoft.Office.Interop.Word转换文档

    源代码网络上有很多,但是使用过程中发现问题还是有的,尤其是在文档属性配置不同的时候,出现的问题就是不能转换.在开发端没有问题,但在不同于开发端电脑的配置情况下,会出现意向不到的问题.此处对解决方案进行 ...

  3. 通过C#Microsoft.Office.Interop.Word理解互操作性

    目录 一.概念 二.应用 三.Word操作示例 四.总结 五.拓展 一.概念 C# 中的互操作性指的是C#托管代码和非托管代码之间实现互操作性的方法.(参考微软文档:互操作性概述) 参考:百度百科-- ...

  4. 无法将为“Microsoft.Office.Interop.Word.ApplicationClass”的 COM 对象强制转换为接口类型

    文章目录 1.错误原因 2. 解决方式 2.1 office多版本 2.1.1 删除多余版本 2.1.2 修复当前版本 2.1.3 其他操作(可选1) 2.1.4 其他操作(可选2) 2.2 wps卸 ...

  5. C# Microsoft.Office.Interop.Word比较VBA

    Microsoft.Office.Interop.Word 和 VBA 这俩货绝对是一样的 需要编辑格式如下 使用 此处下划线 .方法实现与HomeKey.EndKey类似的效果. 查了若干资料后 逻 ...

  6. C#制作Office插件时引用Microsoft.Office.Interop.Word后获取运行实例

    自动化 Office 的客户端程序既可以创建 Office 程序的新实例,也可以获取对已在运行的实例的引用. Microsoft 通常建议您创建一个新实例,而不是附加到正在运行的实例. 但是,在某些情 ...

  7. 关于.net Microsoft.Office.Interop.Word组建操作word的问题,如何控制word表格单元格内部段落的样式。...

    控制word表格单元格内部文字样式.我要将数据导出到word当中,对于word表格一个单元格中的一段文字,要设置不同的样式,比如第一行文字作为标题要居中,加粗,第二行为正常的正文. 代码如下 publ ...

  8. html与word字体大小转换,字体大小不一样,当html转换为Word使用Microsoft.Office.Interop.Word...

    我试图将html文件转换为MS word(docx)文件. 使用Microsoft.Office.Interop.Word我能够从HTML转换为Word,但字体大小不一样的文件的HTML和Word格式 ...

  9. Interop type 'Microsoft.Office.Interop.Word.ApplicationClass' cannot be embedded. Use the applicable

    错误信息: Interop type 'Microsoft.Office.Interop.Word.ApplicationClass' cannot be embedded. Use the appl ...

最新文章

  1. sp_MSforeachtable/sp_MSforeachdb (转)
  2. Windows上也能用Swift编程了,官方编译工具安装包现已上线
  3. java 顺序 读写 Properties 配置文件 支持中文 不乱码
  4. 神奇的 SQL 之 ICP → 索引条件下推
  5. Linux 该文件命令查看内容
  6. java 内部类和静态内部类的区别
  7. ACL2020 | 什么时候值得用BERT上下文嵌入
  8. web开发-引用Google font library-学习笔记四
  9. c语言编程软件我的世界,我的世界(Minecraft)
  10. 软考高级 真题 2016年上半年 信息系统项目管理师 论文
  11. idea 导入 android项目以及自带AVD模拟器的使用
  12. VNPY量化交易(一)
  13. 两部苹果手机同步照片_Windows同步查看iPhone手机的照片
  14. Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
  15. epson机器人编程 范例_Epson机械手简单实例编程
  16. 雅诗兰黛公司宣布品牌集群领导层更新
  17. asp微信扫码签到源码
  18. 2008年不可错过的50部好莱坞电影
  19. 时间戳转换为日期格式(天,小时,分,秒)
  20. Usdt到底靠谱吗?——记美国与大B网的恩怨情仇

热门文章

  1. RS|哨兵二号(.SAFE格式)转tif格式
  2. [转]VBA代码调用浏览文件夹对话框的几种方法
  3. JavaWeb新闻发布系统的登录新闻增加
  4. 重装系统重新分区方法教程
  5. 厦门理工学院计算机考研难吗,2019厦门理工学院考研难度
  6. 五款办公必备工具,提高工作效率不再难!
  7. android broadcast--有道笔记整理
  8. 计算机的色彩表示——十六进制颜色码
  9. 用html做一个拍拍网界面视频,html制作网页必做入门练习题一教程文件.ppt
  10. python网络爬虫实验报告_Python网络爬虫实例讲解