如何使用LEADTOOLS实现拖放改变页面布局:25天25个项目

发布时间:2016/12/26 00:12 发布者:Richard.Ma

返回博客中心

作为LEAD Technologies 25周年纪念的一部分,我们正在搞一个“25天收集25个项目来展示LEAD功能强度和易用性”的活动。今天要展示的项目来自于尼克的分享。

页面分布屏幕截图

clip_image002

重新排列的页面分布

clip_image004

 

它是做什么的

使用LEADTOOLS第19版,该项目可以采用拖放操作来对文档中的页面或图像文件进行重新排序。

 

所使用的功能

· Document Viewer

· PDF

 

 

开发进程日志

大家好,我是尼克。我将使用LEADTOOLS来创建一个这样的应用程序,该程序可以采用拖放操作来对文档中的页面进行重新排序。为了实现这一点,我将创建一个基本的文件查看器,然后再创建一个自定义的InteractiveMode 来处理该功能。

首先,我使用WinForms创建了该应用程序的用户界面。由于该应用程序基本上是一个文件查看器,我查看了C#文档查看器演示程序的源代码,并使用了它其中包含的几个组件,主要是常规的保存和加载程序。这时候,我已经有一个基本的文件查看器:我可以加载PDF文件并将它显示为两页和缩略图,可以保存PDF文件,并退出该程序。此时此刻,保存PDF其实只是创建它的另一个副本,因为页面仍然是按照相同的顺序排列。这一点是我花费了大约90分钟的时间才明白的。

对于概念验证来说,我修改了自己的代码以编程的方式改变了页面的顺序,并且能够保存新的页面顺序。原来,LEADTOOLS已经通过提供使用LeadCollection对象来保存该页面的DocumentViewer的文档的DocumentPages属性的Move() 来处理了这一点:

Documentation: LeadCollection class

这个时候其实我只关心如何修改缩略图窗格。原来,默认情况下,缩略图窗格包含两个InteractiveModes:按优先顺序分别是,ImageViewerSelectItemsInteractiveModeImageViewerPanZoomInteractiveMode

Documentation: ImageViewerSelectItemsInteractiveMode
Documentation: ImageViewerPanZoomInteractiveMode

我们需要创造自己的InteractiveMode来处理通过创建ImageViewerDragDropInteractiveMode类来进行拖放的问题。这个新的类将扩展ImageViewerSelectItemsInteractiveMode,因为它已经包含了我们将作为一个基础使用的SelectItem的功能。这大约要花费我一个半小时的时间来研读我将需要的这个功能。

我会通过对各个事件的轮询来做到这一点,尤其是,DragStartedDragCompleted。如果没有发生拖动事件,也就是说,用户只是点击缩略图,释放鼠标按钮而不移动它,那么,新的InteractiveModes简单地表现为它的基类,并选择该项目。但是,如果拖动事件发生,我们希望能用InteractiveMode将其作为一个拖放事件来处理。这意味着我们不需要附带的SelectItem InteractiveMode。此外,由于发生了大量的点击和拖动,PanZoom InteractiveMode可能会导致某些冲突,而不管优先顺序。由于这两个是在默认情况下添加到缩略图窗格中的,我已经决定要要加入我的之前将它们清理出来,所以只有我的会产生一些影响。

现在我已经写完了用来解决该事件的代码。我可以察觉到应该在什么时候选择缩略图页面,和当鼠标完成拖动操作时它处于哪个缩略图页面之下。这花费了我大约一个小时的时间来进行编码、调整并设置断点。

然而,事实证明我的新ImageViewerDragDropInteractiveMode没有访问所加载文件的权限。通过传递位置和目标的两个原始索引,而不是通过将文档直接传递到InteractiveMode,该InteractiveMode将触发一个拖放操作已完成的事件。从这里开始,拥有该文档的用户界面将对这些页面进行重新排序。

我对InteractiveMode做了一些审美的变化,比如,当InteractiveMode正在给用户提供视觉反馈时,对鼠标光标进行更改。最初,在执行完拖放操作之后,“所选项目”这个矩形还在绘制中,但我取消了这一点。

此时此刻,我可以在这个应用程序中打开PDF文件,可以对页面进行拖放操作以改变它们在缩略图查看器中的顺序,并且可以将重新排序的页面保存为一个新文件。在对自己的代码进行清理、组织和加注之后,我会说,整个任务只花了我八个多小时的时间。如果没有使用LEADTOOLS的话,我现在应该还在继续埋头苦干,以期达到显示文档目的。

 

下载该项目

该示例项目的源代码您可以点击这里进行下载。

13 Page Arranger.zip (30.82 kb)

要运行该项目,请将其解压缩到该目录下:C:\LEADTOOLS 19\Examples\DotNet\CS directory。

 

支持

关于其他产品的更多信息,请访问我们的官方网站

欢迎下载免费的全功能评估版SDK,全功能试用版中有这个例子的全部源代码。

同时欢迎您使用评估版期间的免费技术支持


关于葡萄城

赋能开发者!葡萄城是专业的集开发工具、商业智能解决方案、低代码开发平台于一身的软件和服务提供商,为超过 75% 的全球财富 500 强企业提供服务。葡萄城专注控件软件领域30年,希望通过模块化的开发控件、灵活的低代码应用开发平台等一系列开发工具、解决方案和服务,帮助开发者快速响应复杂多变的业务需求,最大程度地发挥开发者的才智和潜能,让开发者的 IT 人生更从容更美好。

了解详情,请访问葡萄城官网