DevExpress(WinForms WPF)中文教程 - 如何减小文档文件大小?

发布时间:2026/9/1 5:13:10

DevExpress(WinForms  WPF)中文教程 - 如何减小文档文件大小?
DevExpress拥有.NET开发需要的所有平台控件包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress近期重要版本v24.1已正式发布该版本拥有众多新产品和数十个具有高影响力的功能可为桌面、Web和移动应用提供直观的解决方案全面解决各种使用场景问题。减小文档文件大小可以改善文档导入/处理相关操作它还可以帮助最小化数据库和云服务器中的文件存储需求。在这篇文章中我们将使用DevExpressWinForms WPF Word Processing API来减少Microsoft Word文档文件大小的不同策略。DevExpress新旧版本帮助文档下载可进QQ qun获取169725316重要提示下面列出的策略涉及删除文档内容删除的内容将无法恢复。简化文档虽然显而易见文档简化是减少/优化文件大小的最佳方法简化策略包括在可能的情况下使用一组有限的样式来格式化文档内容。将文档从DOCM格式转换为DOCX格式来消除宏您也可以使用RichEditDocumentServer.Options.DocumentCapabilities.Macros 选项来禁用宏。在保存文档之前禁用跟踪更改RichEditDocumentServer包含RichEditDocumentServer.Options.DocumentCapabilities.TrackChanges属性用于禁用跟踪。减少图像内容。使用链接OLE对象代替嵌入OLE对象如果无法使用链接的OLE对象可以减小嵌入OLE对象的大小或在保存之前将其删除。有关OLE对象支持的其他信息请参阅以下文章OLE Objects in Word Documents减少字段和内容控件的使用在保存之前取消链接或删除字段。用压缩图像替换图表。删除额外的元数据(XML数据、文档属性、注释、RTF主题数据)。将长表划分为多个短表在大多数情况下长表不会影响文件大小但会减慢文档呈现和布局计算。使用OpenXML格式替代传统格式OpenXML格式(DOCX)是现代的、开放的、跨多个平台兼容的虽然在某些情况下更有效但遗留格式(如DOC、RTF)是专有的灵活性较差。OpenXML文件本质上是带有XML文件和附加资源(如图像和样式)的ZIP存档因此DOCX文件更容易存储在数据库中您可以使用RichEditDocumentServer.Save 方法将文档转换为所需的文件格式。不要嵌入字体DevExpress Word Processing Document API允许您在文档中嵌入字体虽然具有嵌入式字体的文档在不同的计算设备上保持外观特征但这些文档的大小要大得多。如果您的解决方案在受控/托管环境中显示文档我们建议使用DevExpress DXFontRepository类。有关更多信息请参阅以下帮助主题Load and Use Custom Fonts Without Installation on the System减小图像大小您可以使用第三方应用程序来压缩文档图像一旦压缩只需要调用PictureFormat.SetPicture方法将原始图像替换为其压缩后的等效图像。下面的代码片段将原始图像替换为压缩后的等效图像using (RichEditDocumentServer wordProcessor new RichEditDocumentServer()) { wordProcessor.LoadDocument(doc_with_images.docx); Document document wordProcessor.Document; Shape shape document.Shapes[0]; DXImage sourceImage shape.PictureFormat.Picture.DXImage; MemoryStream imageStream new MemoryStream(); sourceImage.Save(stream); //Compress the image saved in the stream //... DXImage compressedImage DXImage.FromStream(updatedImageStream); shape.PictureFormat.SetPicture(compressedImage); }另一个技巧是不要裁剪图像使用保存的预裁剪版本。您可以使用PictureFormat.SourceRect属性在代码中裁剪图像然后保存输出PictureFormatSetPicture方法允许您将图像替换为裁剪后的版本。下面的代码片段裁剪图像保存它然后用裁剪后的等效图像替换原始图像using (RichEditDocumentServer wordProcessor new RichEditDocumentServer()) { wordProcessor.LoadDocument(CroppedImages.docx); Document document wordProcessor.Document; Shape shape document.Shapes[0]; if (shape.PictureFormat ! null) { DXBitmap image shape.PictureFormat.Picture.DXImage as DXBitmap; var rectOffset shape.PictureFormat.SourceRect; RectangleF imageRect new RectangleF(image.Width * rectOffset.LeftOffset, image.Height * rectOffset.TopOffset, image.Width - image.Width * rectOffset.LeftOffset - image.Width * rectOffset.RightOffset, image.Height - image.Height * rectOffset.TopOffset - image.Height * rectOffset.BottomOffset); MemoryStream imageStream new MemoryStream(); image.Crop(imageRect).Save(imageStream, image.ImageFormat); DocumentImageSource source DocumentImageSource.FromStream(imageStream); shape.PictureFormat.SetPicture(source); shape.PictureFormat.SourceRect new RectangleOffset(); } }如果需要使用大图像并且应用程序架构允许您单独存储图像则可以采用以下解决方案。迭代文档的形状集合并将所有图像保存到具有唯一标识符的数据库中。完成后用空图像或DOCVARIABLE字段(用于动态图像替换)替换原始文档图像或者删除图像并用书签标记其在文档中的位置。通过使用此策略您将能够保存文档的轻量级版本并在必要时恢复原始文档图像Document document wordProcessor.Document; // iterate through document images, save them to the database // and replace original images with an empty image int imageID 1; // generate an image ID as you require DocumentImageSource emptyImageSource DocumentImageSource.FromImage(new DXBitmap(1, 1)); for (int i document.Shapes.Count - 1; i 0; i--) { Shape shape document.Shapes[i]; if (shape.PictureFormat ! null) { DXBitmap image shape.PictureFormat.Picture.DXImage as DXBitmap; using (MemoryStream imageStream new MemoryStream()) { image.Save(imageStream, image.ImageFormat); byte[] imageBytes imageStream.ToArray(); // save image bytes to the database with the specified image ID // ... // change the image name (if required) to identify it later shape.Name Image imageID.ToString(); // replace the current image with the empty image shape.PictureFormat.SetPicture(emptyImageSource); } imageID; } } // save the document with dummy images using (MemoryStream documentStream new MemoryStream()) document.SaveDocument(documentStream, DocumentFormat.OpenXml); //... // restore document images richEditControl.LoadDocument(documentStream, DocumentFormat.OpenXml); Document document richEditControl.Document; for (int i document.Shapes.Count - 1; i 0; i--) { Shape shape document.Shapes[i]; if (shape.PictureFormat ! null) { string imageName shape.Name; // extract the required image from the database by name byte[] imageBytes ...; using(MemoryStream imageStream new MemoryStream(imageBytes)) { // replace the empty image with the original image DocumentImageSource imageSource DocumentImageSource.FromStream(imageStream); shape.PictureFormat.SetPicture(imageSource); } } }

相关新闻

Nexth中的SIWE实现:如何用Sign-In with Ethereum构建去中心化身份系统

Nexth中的SIWE实现:如何用Sign-In with Ethereum构建去中心化身份系统

2026/8/23 0:37:20

Nexth中的SIWE实现:如何用Sign-In with Ethereum构建去中心化身份系统 【免费下载链接】nexth A Next.js Ethereum starter kit with Viem, Wagmi, Web3Modal, SIWE, Tailwind, daisyUI and more to quickly ship production-ready Web3 Apps ⚡ 项目地址: https…

Android Studio中文语言包终极指南:5分钟实现全界面汉化,告别英文开发困扰

Android Studio中文语言包终极指南:5分钟实现全界面汉化,告别英文开发困扰

2026/8/28 0:24:06

Android Studio中文语言包终极指南:5分钟实现全界面汉化,告别英文开发困扰 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLa…

GTA5线上小助手:如何在洛圣都获得终极游戏体验的完整指南

GTA5线上小助手:如何在洛圣都获得终极游戏体验的完整指南

2026/8/23 0:37:20

GTA5线上小助手:如何在洛圣都获得终极游戏体验的完整指南 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 你是否厌倦了在GTA5线上模式中重复枯燥的任务?是否想要快速解锁所有隐藏…

【下载FPGA相关软件】

【下载FPGA相关软件】

2026/9/1 5:04:05

我想下载fpga软件,电脑上找不到病毒防护这个选项卡导致现在下载压缩包缺少东西(之前电脑换了一个硬盘),没办法继续下载了,求助求助

北邮数字逻辑课程设计FPGA代码全解析:从模块拆解到板上调试

北邮数字逻辑课程设计FPGA代码全解析:从模块拆解到板上调试

2026/9/1 5:04:05

简介:基于北京邮电大学数字逻辑课程设计的FPGA代码包,面向正在学习FPGA与数字逻辑技术的学生,以电子钟和药片装瓶两个典型项目串联数字系统设计要点。电子钟部分重点训练计数器、分频器、译码器等时序逻辑电路;药片装瓶部分则引入…

LSMDSV16X六轴驱动例程详解:从框架到调试实战

LSMDSV16X六轴驱动例程详解:从框架到调试实战

2026/9/1 5:04:05

简介:LSM6DSV16X六轴驱动例程代码面向嵌入式开发者,尤其是需要基于ST LSM6DSV16X(集成3D陀螺仪与3D加速度计)进行运动检测、姿态识别或穿戴设备开发的工程师,可帮助快速完成驱动移植与功能验证。资源共33个文件&#x…

D8读卡器SDK开发实战:从驱动安装到USB枚举失败排查

D8读卡器SDK开发实战:从驱动安装到USB枚举失败排查

2026/9/1 5:04:05

简介:德卡D8 读卡器 SDK 开发文档是一套面向智能卡读写场景的完整开发包,主要服务于使用 C#、Java、Python、Qt 或 Visual Studio 构建桌面应用的开发者。文档以 dcrf32.dll 核心动态库为纽带,详细梳理了连接读卡器、读取身份证/银行卡/社保卡…

英伟达 130 亿美元买下 Hugging Face:开源 AI 的“中立广场“,卖给了最大的闭源硬件厂商

英伟达 130 亿美元买下 Hugging Face:开源 AI 的“中立广场“,卖给了最大的闭源硬件厂商

2026/9/1 5:04:05

8 月 26 日,Bloomberg 和 Business Insider 先后曝出:英伟达同意以约 130 亿美元收购 Hugging Face。消息登上 Hacker News 当日榜首,1843 分、861 条评论,热度是第二名的三倍多。到 8 月 28 日,讨论仍在持续发酵——这…

Excel FILTER函数:动态数组下的数据筛选与查找新范式

Excel FILTER函数:动态数组下的数据筛选与查找新范式

2026/9/1 4:54:05

这次我们来看一个 Excel 函数领域的“新晋高手”——FILTER 函数。它并非最新发布,但在动态数组功能普及后,其能力被彻底释放,尤其在数据查找与引用方面,展现出了比传统 VLOOKUP 更灵活、更强大的特性。如果你经常被 VLOOKUP 的诸…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/1 1:53:39

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/8/31 7:20:57

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/8/31 17:18:46

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

远程协作的工作台整理

远程协作的工作台整理

2026/9/1 0:03:36

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/1 0:03:36

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/1 0:03:36

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

远程协作的工作台整理

远程协作的工作台整理

2026/9/1 0:03:36

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/1 0:03:36

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/1 0:03:36

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…