界面控件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)中可用。

相关推荐
非凡ghost4 小时前
Xournal++(PDF文档注释工具) 中文绿色版
学习·pdf·生活·软件需求
MonkeyKing_sunyuhua4 小时前
使用ARQ做PDF OCR和 图片OCR的任务的方案
pdf·ocr
2501_930707785 小时前
如何使用C#代码在 PDF 中添加或删除附件
pdf
m5655bj5 小时前
如何使用 Python 调整 PDF 页面顺序?
python·pdf
YuanYWRS7 小时前
办公基础:实现PDF中表单不改变格式的情况下转成excel
pdf·excel
松☆7 小时前
终章:构建完整生态——Flutter + OpenHarmony 分布式应用开发全景指南(含性能调优与发布实践)
flutter·wpf
松☆7 小时前
高阶实战:基于 Flutter 的 OpenHarmony 分布式软总线多设备协同应用开发
wpf
松☆7 小时前
终极挑战:Flutter 应用在 OpenHarmony 上实现跨设备无缝流转(Continuation)与软总线协同
flutter·wpf
她说彩礼65万8 小时前
WPF SynchronizationContext的使用
wpf
云雾J视界8 小时前
分布式AI框架选型困局:SintolRTOS vs Ray vs Horovod,性能压测全解析
tensorflow·wpf·horovod·ray·分布式ai·sintolrtos