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

发布时间:2026/7/11 10:52:46

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/7/11 10:42:46

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/7/11 10:42:46

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

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

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

2026/7/11 10:42:46

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

Python量化交易实战:mootdx深度解析与高效数据获取方案

Python量化交易实战:mootdx深度解析与高效数据获取方案

2026/7/11 12:42:55

Python量化交易实战:mootdx深度解析与高效数据获取方案 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在量化交易和金融数据分析中,你是否曾为获取稳定可靠的A股行情数据而…

10个实用技巧:使用LingBot-Video-MoE-30B-A3B生成高质量视频内容

10个实用技巧:使用LingBot-Video-MoE-30B-A3B生成高质量视频内容

2026/7/11 12:42:55

10个实用技巧:使用LingBot-Video-MoE-30B-A3B生成高质量视频内容 【免费下载链接】lingbot-video-moe-30b-a3b 项目地址: https://ai.gitcode.com/hf_mirrors/robbyant/lingbot-video-moe-30b-a3b LingBot-Video-MoE-30B-A3B是一款强大的视频生成模型&#…

如何选择合适的草本养生工厂?

如何选择合适的草本养生工厂?

2026/7/11 12:42:55

如何选择合适的草本养生工厂?大家好,我是你们的好物分享博主。今天想和大家分享一下如何选择一家靠谱的草本养生工厂,尤其是对于那些想要进入大健康行业的创业者们。相信很多人都有过这样的困扰:市场上那么多工厂,到底…

为什么选择DQ3_K_M?Kimi-K2.7-Code量化方案背后的Arxiv论文深度解读

为什么选择DQ3_K_M?Kimi-K2.7-Code量化方案背后的Arxiv论文深度解读

2026/7/11 12:42:55

为什么选择DQ3_K_M?Kimi-K2.7-Code量化方案背后的Arxiv论文深度解读 【免费下载链接】Kimi-K2.7-Code-mlx-DQ3_K_M-q8 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Kimi-K2.7-Code-mlx-DQ3_K_M-q8 在深度学习模型部署的实践中,D…

Rust 的安全哲学在系统软件中的投射:以操作系统内核与数据库为例

Rust 的安全哲学在系统软件中的投射:以操作系统内核与数据库为例

2026/7/11 12:42:55

Rust 的安全哲学在系统软件中的投射:以操作系统内核与数据库为例 一、从 C 到 Rust:系统软件安全不再是代码审查的责任 操作系统内核和数据库是计算机系统的基石。它们的正确性直接影响上层所有应用的数据安全和可用性。传统的 C 语言实现中,…

如何轻松找回丢失的数据库连接密码:实用解决方案指南

如何轻松找回丢失的数据库连接密码:实用解决方案指南

2026/7/11 12:32:55

如何轻松找回丢失的数据库连接密码:实用解决方案指南 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt 你是否曾经遇到过这样的尴尬时刻&#x…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/10 22:32:48

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/10 6:57:56

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制

2026/7/11 0:02:03

WechatDecrypt技术解析:深入理解微信数据库AES-256-CBC解密机制 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 在数字隐私日益重要的今天,微信聊天记录作为个人数字资产的重要组成…

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 [特殊字符]

2026/7/11 0:02:03

5分钟搞定Kodi字幕难题:智能字幕插件让你追剧无忧 🎬 【免费下载链接】zimuku_for_kodi Kodi 插件,用于从「字幕库」网站下载字幕 项目地址: https://gitcode.com/gh_mirrors/zi/zimuku_for_kodi 还记得那个深夜吗?你刚下载…

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案

2026/7/11 0:02:03

PostgreSQL 备份与恢复实战:从 pg_dump 到时间点恢复的生产级方案 一、数据库备份最容易被忽略的问题,不是「有没有做备份」,而是「备份能不能恢复、恢复要多久、以及恢复后的数据对不对」 很多团队做数据库备份的方式是「写个 cron job&am…