国产化Word处理控件Spire.Doc教程:在 C# 中打印 Word 文档终极指南

news2025/6/3 10:25:19

在 C# 中以编程方式打印 Word 文档可以简化业务工作流程、自动化报告和增强文档管理系统。本指南全面探讨如何使用Spire.Doc for .NET打印 Word 文档,涵盖从基本打印到高级自定义技术的所有内容。我们将逐步介绍每种情况下的实际代码示例,确保您能够在实际应用中实施这些解决方案。

.NET 打印 Word 文档的库

Spire.Doc for .NET 是一个强大的独立库,支持全面的 Word 文档处理,无需安装 Microsoft Office。它提供直观的 API 用于加载、编辑和打印 Word 文件(DOC/DOCX),同时保持完美的格式保真度。

首先,请通过 NuGet 包管理器安装库:

Install-Package Spire.Doc

或者,您可以从我们的官方网站下载 Spire.Doc for .NET 并手动引用 DLL 文件。

在 C# 中打印 Word 文档

在 C# 中打印 Word 文档的基础包括以下三个关键步骤,示例代码如下。首先,我们创建一个 Document对象来表示我们的 Word 文件,然后加载实际文档,最后通过 PrintDocument类访问打印功能。

using Spire.Doc;
using System.Drawing.Printing;

namespace PrintWordDocument
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 初始化新的 Document 实例
            Document doc = new Document();

            // 从指定路径加载 Word 文件
            doc.LoadFromFile("Input.docx");

            // 访问用于打印操作的 PrintDocument 对象
            PrintDocument printDoc = doc.PrintDocument;

            // 发送文档到默认打印机
            printDoc.Print();
        }
    }
}

这个基础实现仅用几行代码就处理了从文档加载到实际打印的整个流程。PrintDocument对象抽象了所有底层打印操作,使开发过程变得简单。

自定义打印选项

除了基本打印外,Spire.Doc 还通过 PrinterSettings类提供广泛的自定义选项,使开发人员能够对打印过程进行细致控制。这些设置允许您根据特定需求调整输出,例如选择特定页面或配置高级打印机功能。

要获取与当前文档关联的 **PrinterSettings **对象,请使用以下代码:

PrinterSettings settings = printDoc.PrinterSettings;

现在,让我们探讨具体的设置。

1. 指定打印机名称

settings.PrinterName = "您的打印机名称";

2. 指定打印范围

settings.FromPage = 1;
settings.ToPage = 5;

3. 指定打印副本数量

settings.Copies = 2;

4. 启用双面打印

if (settings.CanDuplex)
{
    settings.Duplex = Duplex.Default;
}

5. 打印自定义纸张尺寸

settings.DefaultPageSettings.PaperSize = new PaperSize("custom", 800, 500);

6. 将 Word 打印到文件

settings.PrintToFile = true;
settings.PrinterName = "Microsoft Print to PDF";
settings.PrintFileName = @"C:\Output.pdf";

静默打印 Word 文档

在自动化环境中,您可能需要打印文档而无需任何用户交互或可见对话框。以下实现通过使用 StandardPrintController实现静默打印。

using Spire.Doc;
using System.Drawing.Printing;

namespace SilentlyPrintWord
{
    class Program
    {
        static void Main(string[] args)
        {
            // 初始化一个新的 Document 实例
            Document doc = new Document();

            // 从指定路径加载 Word 文件
            doc.LoadFromFile("Input.docx");

            // 访问用于打印操作的 PrintDocument 对象
            PrintDocument printDoc = doc.PrintDocument;

            // 禁用打印对话框
            printDoc.PrintController = new StandardPrintController();

            // 执行打印
            printDoc.Print();
        }
    }
}

静默打印的关键在于将 StandardPrintController 分配给 PrintController 属性,这样可以抑制所有与打印相关的对话框和进度指示器。这种方法非常适合服务器端应用或批处理场景,在这些场景中,用户交互不可行或不希望出现。

在一张纸上打印多页

为了节省纸张使用或创建紧凑的文档版本,Spire.Doc 支持在一张物理纸张上打印多个文档页面。PrintMultipageToOneSheet方法通过预定义的布局选项简化了此过程。

using Spire.Doc;
using Spire.Doc.Printing;
using System.Drawing.Printing;

namespace PrintMultiplePagesOnOneSheet
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 初始化一个新的 Document 实例
            Document doc = new Document();

            // 从指定路径加载 Word 文件
            doc.LoadFromFile("Input.docx");

            // 配置每页打印 2 张并执行打印
            doc.PrintMultipageToOneSheet(PagesPreSheet.TwoPages, false);
        }
    }
}

PagesPreSheet枚举提供多种布局选项(TwoPages、FourPages、SixPages 等),而布尔参数决定是否在打印纸张上包含页面边框。此功能对于创建小册子布局或文档草稿版本特别有价值。

注意 : 此功能仅适用于 .NET Framework 5.0 之前的版本。

结论

本指南展示了 Spire.Doc for .NET 如何为 C# 中的 Word 文档打印提供全面解决方案。它通过以下功能简化了该过程:

  • 基本和静默打印
  • 可定制的打印设置(打印机选择、双面、份数)
  • 每张纸打印多页以减少纸张使用

通过整合这些技术,开发者可以高效地在企业应用中自动化文档打印,提高生产力并减少手动工作。总体而言,Spire.Doc 使开发者能够创建满足多样化业务需求的强大打印解决方案。

常见问题解答

Q1. 我可以打印受密码保护的 Word 文件吗?

A : 可以,Spire.Doc支持在加载受密码保护的文档后打印它们:

doc.LoadFromFile("Protected.docx", FileFormat.Docx, "password");

加载成功后,您可以像其他文档一样打印,所有相同的自定义选项均可用。

Q2. 如何只打印 Word 文档中的选定文本?

A : 您可以通过访问文档的部分和段落提取特定内容:

Section section = doc.Sections;
Paragraph paragraph = section.Paragraphs;
// 创建新文档并包含选定内容
Document newDoc = new Document();
newDoc.Sections.Add(section.Clone());
newDoc.Print();

这种方法让您可以精确控制打印哪些文档部分。

Q3. 可以以横向模式打印文档或以编程方式调整边距吗?

A : 可以!修改 DefaultPageSettings 属性:

printDoc.DefaultPageSettings.Landscape = true;
printDoc.DefaultPageSettings.Margins = new Margins(50, 50, 50, 50);

Q4. 可以使用 Spire.Doc 打印其他文件格式(例如 PDF、Excel)吗?

A : Spire.Doc 设计用于 Word 文件(DOC/DOCX)。对于 PDF,请使用 Spire.PDF;对于 Excel,请使用 Spire.XLS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2394851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谷歌:贝叶斯框架优化LLM推理反思

📖标题:Beyond Markovian: Reflective Exploration via Bayes-Adaptive RL for LLM Reasoning 🌐来源:arXiv, 2505.20561 🌟摘要 通过强化学习 (RL) 训练的大型语言模型 (LLM) 表现出强大的推理能力和紧急反射行为&a…

Qt SQL模块基础

Qt SQL模块基础 一、Qt SQL模块支持的数据库 官方帮助文档中的Qt支持的数据库驱动如下图: Qt SQL 模块中提供了一些常见的数据库驱动,包括网络型数据库,如Qracle、MS SQL Server、MySQL等,也包括简单的单机型数据库。 Qt SQL支…

[9-3] 串口发送串口发送+接收 江协科技学习笔记(26个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26中断

如何在Qt中绘制一个带有动画的弧形进度条?

如何在Qt中绘制一个弧形的进度条 在图形用户界面开发中,进度指示控件(Progress Widget)是非常常见且实用的组件。CCArcProgressWidget 是一个继承自 QWidget 的自定义控件,用于绘制圆弧形进度条。当然,笔者看了眼公开…

国产三维CAD皇冠CAD(CrownCAD)建模教程:汽车电池

在线解读『汽车电池』的三维建模流程,讲解3D草图、保存实体、拉伸凸台/基体、设置外观等操作技巧,一起和皇冠CAD(CrownCAD)学习制作步骤吧! 汽车电池(通常指铅酸蓄电池或锂离子电池)是车辆电气系…

VMware-workstation安装教程--超详细(附带安装包)附带安装CentOS系统教程

VMware-workstation安装教程--超详细(附带安装包)附带安装CentOS系统教程 一、下载软件VMwware二、下载需要的镜像三、在VMware上安装系统 一、下载软件VMwware 二、下载需要的镜像 三、在VMware上安装系统 VMware 被 Broadcom(博通&#x…

2025年- H63-Lc171--33.搜索旋转排序数组(2次二分查找,需二刷)--Java版

1.题目描述 2.思路 输入:旋转后的数组 nums,和一个整数 target 输出:target 在 nums 中的下标,如果不存在,返回 -1 限制:时间复杂度为 O(log n),所以不能用遍历,必须使用 二分查找…

3D-激光SLAM笔记

目录 定位方案 编译tbb ros2humble安装 命令 colcon commond not found 栅格地图生成: evo画轨迹曲线 安装gtsam4.0.2 安装ceres-solver1.14.0 定位方案 1 方案一:改动最多 fasterlio 建图,加闭环优化,参考fast-lio增加关…

HomeKit 基本理解

概括 HomeKit 将用户的家庭自动化信息存储在数据库中,该数据库由苹果的内置iOS家庭应用程序、支持HomeKit的应用程序和其他开发人员的应用程序共享。所有这些应用程序都使用HomeKit框架作为对等程序访问数据库. Home 只是相当于 HomeKit 的表现层,其他应用在实现 …

(LeetCode 每日一题) 909. 蛇梯棋 (广度优先搜索bfs)

题目&#xff1a;909. 蛇梯棋 思路&#xff1a;广度优先搜索bfs队列&#xff0c;时间复杂度0(6*n^2)。 细节看注释 C版本&#xff1a; class Solution { public:int snakesAndLadders(vector<vector<int>>& board) {int nboard.size();// vis[i]&#xff1a;…

生成https 证书步骤

一、OpenSSL下载 OpenSSL下载地址&#xff1a; https://slproweb.com/products/Win32OpenSSL.html 如果电脑是64位的就选择64位的 二、OpenSSL安装 双击打开.exe文件 开始安装&#xff0c;一直下一步&#xff0c;不过需要注意的是默认安装路径是C盘&#xff0c;可更改到其他盘…

设计模式——适配器设计模式(结构型)

摘要 本文详细介绍了适配器设计模式&#xff0c;包括其定义、核心思想、角色、结构、实现方式、适用场景及实战示例。适配器模式是一种结构型设计模式&#xff0c;通过将一个类的接口转换成客户端期望的另一个接口&#xff0c;解决接口不兼容问题&#xff0c;提高系统灵活性和…

小黑大语言模型通过设计demo进行应用探索:langchain中chain的简单理解demo

chain简介 LangChain 中的 Chain 模块‌在开发大型语言模型&#xff08;LLM&#xff09;驱动的应用程序中起着至关重要的作用。Chain是串联LLM能力与实际业务的关键桥梁&#xff0c;通过将多个工具和模块按逻辑串联起来&#xff0c;实现复杂任务的多步骤流程编排。 案例 通过…

秒杀系统—5.第二版升级优化的技术文档三

大纲 8.秒杀系统的秒杀库存服务实现 9.秒杀系统的秒杀抢购服务实现 10.秒杀系统的秒杀下单服务实现 11.秒杀系统的页面渲染服务实现 12.秒杀系统的页面发布服务实现 8.秒杀系统的秒杀库存服务实现 (1)秒杀商品的库存在Redis中的结构 (2)库存分片并同步到Redis的实现 (3…

【STM32】HAL库 之 CAN 开发指南

基于stm32 f407vet6芯片 使用hal库开发 can 简单讲解一下can的基础使用 CubeMX配置 这里打开CAN1 并且设置好波特率和NVIC相关的配置 波特率使用波特率计算器软件 使用采样率最高的这段 填入 得到波特率1M bit/s 然后编写代码 环形缓冲区 #include "driver_buffer.h&qu…

DeepSeek R1-0528 新开源推理模型(免费且快速)

DeepSeek推出了新模型,但这不是R2! R1-0528是DeepSeek的最新模型,在发布仅数小时后就在开源社区获得了巨大关注。 这个悄然发布的模型DeepSeek R1-0528,已经开始与OpenAI的o3一较高下。 让我来详细介绍这次更新的新内容。 DeepSeek R1-0528 发布 DeepSeek在这次发布中采…

Go 语言的 GC 垃圾回收

序言 垃圾回收&#xff08;Garbage Collection&#xff0c;简称 GC&#xff09;机制 是一种自动内存管理技术&#xff0c;主要用于在程序运行时自动识别并释放不再使用的内存空间&#xff0c;防止内存泄漏和不必要的资源浪费。这篇文章让我们来看一下 Go 语言的垃圾回收机制是如…

安全帽目标检测

安全帽数据集 这里我们使用的安全帽数据集是HelmentDetection&#xff0c;这是一个公开数据集&#xff0c;里面包含5000张voc标注格式的图像&#xff0c;分为三个类别&#xff0c;分别是 0: head 1: helmet 2: person 安全帽数据集下载地址、 我们将数据集下载后&#xff0c…

Eclipse 插件开发 5.3 编辑器 监听输入

Eclipse 插件开发 5.3 编辑器监 听输入 1 插件配置2 添加监听3 查看效果 Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Click1 Bundle-SymbolicName: com.xu.click1;singleton:true Bundle-Version: 1.0.0 Bundle-Activator: com.xu.click1.Activator Bundle…

iOS 集成网易云信IM

云信官方文档在这 看官方文档的时候&#xff0c;版本选择最新的V10。 1、CocoPods集成 pod NIMSDK_LITE 2、AppDelegate.m添加头文件 #import <NIMSDK/NIMSDK.h> 3、初始化 NIMSDKOption *mrnn_option [NIMSDKOption optionWithAppKey:"6f6568e354026d2d658a…