界面控件DevExpress WPF v25.1新版亮点:PDF Viewer功能全新升级

DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。

DevExpress WPF控件近期全新发布v25.1,此版本增强PDF Viewer、电子表格等控件功能,欢迎下载最新版体验!

点击获取DevExpress v25.1正式版下载

PDF Viewer
保存时保留压缩对象流

在以前的版本中,DevExpress PDF处理工具仅在读取文档时支持压缩对象流。

为了在保存PDF文档时减小文件大小,v25.1包含了一个新的压缩引擎,可以保留PDF对象流的原始/压缩状态。DevExpress压缩机制自动适用于多种文档结构(文本,PDF表单,字体等),并允许您更有效地修改和保存PDF文件。

PDF Redaction API

v25.1包括用于创建和管理PDF编校注释的新API,使用此功能,您可以隐藏/删除文档中的敏感或私有内容,并在编辑区域中添加彩色文本覆盖。

编校过程包括两个步骤:

  • 在PDF页面区域中创建一个具有所需外观的编校注释(如果希望隐藏内容但为其他用户保留内容,则创建一个值)。
  • 使用注释清除内容,并使用指定的外观设置应用覆盖。在这种情况下,所有隐藏的内容都将被删除。

注意:编校可以使用PDF Facade API (DevExpress.Pdf. PdfDocumentFacade类),该类在DevExpress.Docs.v25.1.dll程序集中定义,将这个程序集添加到您的项目中,或者从离线包源中安装DevExpress.Document.Processor Nuget包来使用PdfDocumentFacade成员。

要在生产代码中使用这个类,需要拥有DevExpress Office File APISubscription或DevExpress Universal Subscription的有效授权许可。

在代码中创建和应用编校注释

要创建编校注释,您必须:

新的API允许您应用以下注解:

您还可以使用DevExpress.Pdf.PdfClearContentOptions来指定要删除的内容类型(文本、图形、图像或注释)。

C#

cs 复制代码
pdfViewer.LoadDocument("Demo.pdf");
//...
PdfDocumentFacade documentFacade = pdfViewer.GetDocumentFacade();
PdfRectangle pageCropBox = pdfViewer.GetPageInfo(0).CropBox;
PdfRectangle redactBounds =
new PdfRectangle(0, pageCropBox.Height-50, 200, pageCropBox.Height);

// Add a redaction annotation at the top left corner of the first document page.
PdfRedactAnnotationFacade redactAnnotation =
documentFacade.Pages[0].AddRedactAnnotation(redactBounds);
redactAnnotation.Author = "Jane Doe";
// Setup redaction annotation appearance
redactAnnotation.FillColor = new PdfRGBColor(0, 0, 0);
redactAnnotation.FontColor = new PdfRGBColor(1, 1, 1);
redactAnnotation.FontName = "Calibri";
redactAnnotation.FontSize = 0; // enables font auto-size
redactAnnotation.OverlayText = "Classified";
redactAnnotation.TextJustification = PdfTextJustification.Centered;
redactAnnotation.RepeatText = false;

// Apply the redaction annotation.
redactAnnotation.Apply();
Spreadsheet(电子表格)控件
OLE对象

DevExpress WPF Spreadsheet控件现在支持OLE对象,OLE(对象链接和嵌入)允许您链接外部文件并将数据(电子表格,PDF文件,邮件消息,演示文稿等)嵌入到Excel文档中。

有了OLE Object的支持,您可以执行以下操作:

  • 创建带有外部文件链接的OLE对象,或将这些文件中的数据嵌入到文档中;
  • 获取OLE对象属性;
  • 从文档中提取OLE对象数据;
  • 从文档中删除OLE对象;
  • 打印和输出带有OLE对象图标的文件为PDF/图像格式;
  • 加载和保存包含OLE对象的文档而不会丢失内容。

OLE对象由OleObject接口表示,作为唯一的文档形状,OLE对象从基本形状接口继承所有设置,形状设置定义OLE对象的图标外观、位置和内部对象属性(包括名称、图标大小、图标在工作表中的位置、所有文本等)。

要访问工作表中的OLE对象,请使用Worksheet.OleObjects 集合(也可通过Worksheet.Shapes集合获得),OleObjectCollection.AddLinkedOleObjectOleObjectCollection.AddEmbeddedOleObject方法允许您在工作表中创建新的链接或嵌入OLE对象。

C#

cs 复制代码
Worksheet worksheet = spreadsheetControl.ActiveWorksheet;
CellRange oleIconRange = worksheet.Range["B4:D6"];
SpreadsheetImageSource oleIcon = SpreadsheetImageSource.FromFile("oleIcon.png");

// Create linked OLE object.
OleObject oleObjectLinked = worksheet.OleObjects.AddLinkedOleObject(
oleIconRange, "package.pdf", OleObjectType.Package, oleIcon);

// Create embedded OLE object from a byte array.
byte[] sourceData = File.ReadAllBytes("package.pdf");
OleObject oleObjectEmbedded1 = worksheet.OleObjects.AddEmbeddedOleObject(
oleIconRange, sourceData, OleObjectType.Package, oleIcon);

// Create embedded OLE object from a file stream.
using (var stream = File.OpenRead("package.pdf")) {
OleObject oleObjectEmbedded2 = worksheet.OleObjects.AddEmbeddedOleObject(
oleIconRange, stream, OleObjectType.Package, oleIcon);

您还可以提取和分析链接和嵌入的数据,使用OleObject.InsertType属性来确定OLE对象类型(链接的或嵌入的),OleObject.AsLinkedContentOleObject.AsEmbeddedContent 方法允许您根据OLE对象类型提取附加信息。对于链接的对象,您可以使用OleObjectLinkedContent.FileName属性获得链接的文件名。对于嵌入对象,您可以使用OleObjectEmbeddedContent.GetRawData 方法获得原始二进制内容,或者使用OleObjectEmbeddedContent.SaveAs方法将嵌入内容保存到文件中。

C#

cs 复制代码
Worksheet worksheet = spreadsheetControl.ActiveWorksheet;
OleObject oleObject = worksheet.OleObjects[0];
if(oleObject.InsertType == OleObjectInsertType.Linked)
{
OleObjectLinkedContent linkedContent = oleObject.AsLinkedContent();
string linkedFileName = linkedContent.FileName;
}
if(oleObject.InsertType == OleObjectInsertType.Embedded)
{
OleObjectEmbeddedContent embeddedContent = oleObject.AsEmbeddedContent();
byte[] oleRawData = embeddedContent.GetRawData();
if (oleObject.Type == OleObjectType.AdobeAcrobatDocument)
using (FileStream stream = new FileStream("embedded_document.pdf", FileMode.Create, FileAccess.Write))
embeddedContent.SaveAs(stream);
}

您还可以从电子表格中删除OLE对象。使用OleObject.DeleteOleObjectCollection.RemoveOleObjectCollection.RemoveAt方法删除单个OLE对象,或使用OleObjectCollection.Clear 方法从工作表中删除所有OLE对象。

C#

cs 复制代码
OleObject oleObject = worksheet.OleObjects[0];

// Remove the current OLE object.
oleObject.Delete();
// or
worksheet.OleObjects.Remove(oleObject);

// Remove all OLE objects in the collection.
worksheet.OleObjects.Clear();

注意:OLE对象支持仅在基于OpenXML的文件格式(XLSX、XLSM、XLTX和XLTM)中可用。

相关推荐
廋到被风吹走7 小时前
【Spring】Spring AMQP 详细介绍
java·spring·wpf
月巴月巴白勺合鸟月半12 小时前
几种 HTML 转 PDF的方式
pdf·c#
kylezhao201914 小时前
WinForm/WPF界面开发(常用控件、布局设计、事件处理)
大数据·hadoop·wpf
Psycho_MrZhang17 小时前
REST/gRPC/队列通信模式对比
wpf
墨白曦煜1 天前
Seata AT 模式:应用层回滚 vs 引擎层回滚
wpf
夏日白云1 天前
《PDF解析工程实录》第 12 章|别让模型贴着墙走:为什么加一圈空白,效果反而更好?
图像处理·机器学习·pdf·llm·大语言模型·rag·文档解析
December3102 天前
新手入门指南:PDF页面方向怎么旋转?
pdf·pdf页面旋转·旋转pdf页面方向·pdf旋转
Summer不秃2 天前
使用 SnapDOM + jsPDF 生成高质量 PDF (含多页分页, 附源码)
前端·javascript·vue.js·pdf·node.js
bosins2 天前
基于Python实现PDF文件个人隐私信息检查
开发语言·python·pdf
bosins2 天前
基于Python开发PDF文件元数据查看器
开发语言·python·pdf