【WPF.NET开发】文档批注

2024-01-14 08:52
文章标签 文档 开发 net wpf 批注

本文主要是介绍【WPF.NET开发】文档批注,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文内容

  1. 便笺
  2. 要点
  3. 数据锚定
  4. 匹配批注与批注对象

在纸质文档上编写说明或注释毫不稀奇,我们几乎认为这是理所当然的。 这些说明或注释就是“批注”,我们将其添加到文档,用于标注信息或突出显示兴趣项以供日后参考。 虽然在打印文档上编写注释很简单也很平常,但是就算在所有电子文档上添加个人注释,功能上却通常有很多限制。

本主题介绍几种常见类型的批注,重点介绍便笺和突出显示,并举例说明 Microsoft Annotations Framework 如何通过 Windows Presentation Foundation (WPF) 文档查看控件简化在应用程序中使用这些类型的批注。 支持批注的 WPF 文档查看控件包括 FlowDocumentReader 和 FlowDocumentScrollViewer,以及派生自 DocumentViewerBase 的控件,如 DocumentViewer 和 FlowDocumentPageViewer。

1、便笺

平常的便笺是将信息写在小块彩纸上,随后将这张彩纸“粘贴”到文档。 数字便笺为电子文档提供类似的功能,但灵活性更高,可包括许多其他类型的内容,如键入文本、手写注释(如 Tablet PC“墨迹”笔划)或 Web 链接。

下图显示了突出显示、文本便笺以及墨迹便笺批注的一些示例。

caf-stickynote.jpg?view=netframeworkdesktop-4.8

下面的示例演示了可用于在应用程序中启用批注支持的方法。

// ------------------------ StartAnnotations --------------------------
/// <summary>
///   Enables annotations and displays all that are viewable.</summary>
private void StartAnnotations()
{// If there is no AnnotationService yet, create one.if (_annotService == null)// docViewer is a document viewing control named in Window1.xaml._annotService = new AnnotationService(docViewer);// If the AnnotationService is currently enabled, disable it.if (_annotService.IsEnabled == true)_annotService.Disable();// Open a stream to the file for storing annotations._annotStream = new FileStream(_annotStorePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);// Create an AnnotationStore using the file stream._annotStore = new XmlStreamStore(_annotStream);// Enable the AnnotationService using the new store._annotService.Enable(_annotStore);
}// end:StartAnnotations()

2、要点

当人们在纸质文档上作标记时,往往使用创造性的方法来突出显示兴趣项,例如对于句子中的某些字词,加下划线、高亮显示、圈出,或者将在空白的地方绘制标记或符号。 Microsoft Annotations Framework 中的突出显示批注具有类似的功能,用于标记在 WPF 文档查看控件中显示的信息。

下图演示了一个突出显示批注的示例。

caf-callouts.png?view=netframeworkdesktop-4.8

用户通常以如下方法创建批注:首先选择感兴趣的文本或者项,然后单击右键显示批注选项的 ContextMenu。 在下面的示例中,你可以使用 Extensible Application Markup Language 声明包含路由命令的 ContextMenu,用户可以访问这些命令来创建和管理批注。

<DocumentViewer.ContextMenu><ContextMenu><MenuItem Command="ApplicationCommands.Copy" /><Separator /><!-- Add a Highlight annotation to a user selection. --><MenuItem Command="ann:AnnotationService.CreateHighlightCommand"Header="Add Highlight" /><!-- Add a Text Note annotation to a user selection. --><MenuItem Command="ann:AnnotationService.CreateTextStickyNoteCommand"Header="Add Text Note" /><!-- Add an Ink Note annotation to a user selection. --><MenuItem Command="ann:AnnotationService.CreateInkStickyNoteCommand"Header="Add Ink Note" /><Separator /><!-- Remove Highlights from a user selection. --><MenuItem Command="ann:AnnotationService.ClearHighlightsCommand"Header="Remove Highlights" /><!-- Remove Text Notes and Ink Notes from a user selection. --><MenuItem Command="ann:AnnotationService.DeleteStickyNotesCommand"Header="Remove Notes" /><!-- Remove Highlights, Text Notes, Ink Notes from a selection. --><MenuItem Command="ann:AnnotationService.DeleteAnnotationsCommand"Header="Remove Highlights &amp; Notes" /></ContextMenu>
</DocumentViewer.ContextMenu>

3、数据锚定

Annotations Framework 将批注与用户选择的数据绑定,而不仅仅是绑定到显示视图中的某个位置。 因此,如果文档视图更改(例如,当用户滚动显示窗口或者调整其大小时),批注将仍然跟随它绑定到的所选数据。 例如,下图显示了用户在所选文本上做的批注。 当文档视图更改时(滚动、调整大小、缩放或者移动),突出显示批注将与最初所选数据一起移动。

caf-dataanchoring.png?view=netframeworkdesktop-4.8

4、匹配批注与批注对象

你可以将批注与对应的批注对象匹配。 以具有注释窗格的简单文档读取器应用程序为例。 注释窗格可能是一个列表框,用于显示锚定到文档的批注列表的文本。 如果用户在列表框中选择一项,应用程序将显示相应的批注对象所锚定到的文档段落。

下面的示例演示如何实现充当注释窗格的此类列表框的事件处理程序。

void annotationsListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{Annotation comment = (sender as ListBox).SelectedItem as Annotation;if (comment != null){// IAnchorInfo info;// service is an AnnotationService object// comment is an Annotation objectinfo = AnnotationHelper.GetAnchorInfo(this.service, comment);TextAnchor resolvedAnchor = info.ResolvedAnchor as TextAnchor;TextPointer textPointer = (TextPointer)resolvedAnchor.BoundingStart;textPointer.Paragraph.BringIntoView();}
}

另一示例方案涉及通过电子邮件在文档读取器之间实现交换批注和便笺的应用程序。 凭借此功能,这些应用程序可以将读取器导航到包含要交换的批注的页面。

这篇关于【WPF.NET开发】文档批注的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/604609

相关文章

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没