`

Microsoft office interop word下打印机的运用

    博客分类:
  • C#
 
阅读更多

今天使用.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 -C#操作word

    ### Microsoft.Office.Interop.Word - C#操作Word #### 一、概述 `Microsoft.Office.Interop.Word` 是.NET Framework 提供的一个库,允许开发人员使用C#语言编写应用程序来操作Microsoft Word文档。这种操作通常...

    C# 填充Word模版并打印

    本文将详细解析如何利用C#、Microsoft Office Interop库以及Word模板来实现这一功能。 首先,我们需要了解`Interop.Word`。这是.NET Framework提供的一组接口,允许C#代码与Microsoft Word应用程序进行交互,包括...

    9101307-C#实现word文档打印及预览.rar_C# 预览 word_C#打印word文档_c# word_hello1

    Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application(); ``` 2. **打开Word文档**: 使用`wordApp`对象的`Documents.Open()`方法打开指定路径的Word文档: `...

    C#调用Word模板批量打印

    通过引用`Microsoft.Office.Interop.Word`命名空间,你可以创建Word对象并执行各种操作,如打开文档、编辑内容和打印。 代码示例可能会包含以下步骤: 1. 引用库: 在C#项目中,添加对`Microsoft.Office.Interop....

    C#批量打印word文档

    首先,要实现批量打印Word文档,我们需要借助Microsoft Office Interop库,这是.NET Framework的一部分,允许我们与Office应用程序(如Word)进行交互。在C#项目中,我们需要添加对`Microsoft.Office.Interop.Word`...

    asp .net 实现word文档在线预览

    1. **Office-Tools**:这可能指的是Microsoft Office Interop库,这是一个允许.NET应用程序与Microsoft Office应用程序(如Word)进行交互的接口。通过这个库,开发者可以编程方式打开、编辑和创建Word文档。然而,...

    C#获取word文档页数,打印word 文档(写成了三个函数 )

    首先,我们需要引用Microsoft.Office.Interop.Word库,这个库提供了与Word交互的接口。确保项目引用中包含这个库,如果没有,可以通过NuGet包管理器安装Microsoft.Office.Interop.Word。 ### 获取Word文档页数 ...

    VB.NET WORD手动双面打印

    在VB.NET中,这通常通过创建`Microsoft.Office.Interop.Word.Application`对象来实现。 以下是实现手动双面打印的关键步骤: 1. **创建Word应用程序对象**: ```vbnet Dim wordApp As New Microsoft.Office....

    c# word转tif

    首先,需要引用`Microsoft.Office.Interop.Word`库,然后创建Word应用程序实例,打开Word文档,设置适当的页面布局和打印选项,最后模拟打印到一个TIFF虚拟打印机。这种方法的优点是直接且灵活,但缺点是需要安装...

    C#+使用word模板+批量打印例子

    在实现这个功能时,C#可以使用`Microsoft.Office.Interop.Word`库,这是Office Interop组件,允许C#代码与Word应用程序进行交互。开发者可能首先打开`tz.dot`模板,然后遍历`data.mdb`中的每一项记录,用数据替换...

    C# 打印浏览文档

    Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application(); wordApp.Visible = true; wordApp.Documents.Open("path_to_your_document.docx", ReadOnly: true); ...

    Word 模板打印

    1. 引用Office Interop库:在C#项目中,你需要添加对`Microsoft.Office.Interop.Word`命名空间的引用。这可以通过右键点击项目,选择“管理NuGet程序包”,然后搜索并安装`Microsoft.Office.Interop.Word`来实现。 ...

    c#调用word打印的小例子

    在C#编程环境中,我们可以利用Microsoft.Office.Interop.Word这个命名空间中的类来与Word应用程序进行交互,从而实现对Word文档的创建、编辑以及打印操作。以下是一个详细的步骤介绍,讲解如何在C#中调用Word进行...

    动态生成Word文档汇总

    首先,我们需要在项目中引入Microsoft.Office.Interop.Word命名空间,这是.NET Framework提供的一个接口,允许我们通过C#代码与Word应用程序进行交互。在Visual Studio中,可以右键点击项目,选择“添加引用”,然后...

    VC Word打印

    这通常包括Microsoft Office Primary Interop Assemblies,它们提供了与Word对象模型交互所需的类型库。 2. **引入头文件和库**:在源代码中,你需要包含以下头文件: ```cpp #include #import "C:\Program ...

    mfc打印导出word

    这通常通过使用Microsoft的Office Interop组件或者第三方库如Apache POI(针对.docx格式)来实现。Interop组件允许MFC应用直接调用Word的COM接口,操作Word文档,包括打开、读取、修改和保存。 5. **页面预览...

    Word 转成 图片(tiff)

    - **利用API**:开发者可以使用特定的API,如Microsoft Office Interop库或Aspose库,通过编程方式批量转换Word文档为TIFF。这种方法适用于大量文件转换,提高效率。 5. **注意事项** - **分辨率**:在转换过程中...

    C#文件读写之word读写

    通过引用Microsoft Office的COM组件库,我们可以在不启动Word应用程序的情况下操作Word文档。 #### 三、开发环境配置 1. **开发工具**: Visual Studio。 2. **目标框架**: .NET Framework。 3. **Office版本**: 本...

    word批量打印

    在C#中,我们可以通过Microsoft.Office.Interop.Word命名空间来实现对Word的自动化控制。这个命名空间包含了各种类和接口,如Application、Document等,它们允许开发者创建、打开、编辑和打印Word文档。 【压缩包子...

    Word Vba修改页边距、纸张纵向、装定线等的代码.docx

    WApp.ActiveDocument.PageSetup.Orientation = Microsoft.Office.Interop.Word.WdOrientation.wdOrientPortrait; ``` **解释**:此行代码用于设置文档页面的方向为纵向(portrait)。`wdOrientPortrait`是Word中定义...

Global site tag (gtag.js) - Google Analytics