`
longgangbai
  • 浏览: 7330948 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

gef中打印功能的原理和实现

阅读更多

gef中关于打印的功能,采用PrintGraphicalViewerOperation实现打印Ifile的功能。如果非特性的打印动作,可以采用gef中相关的PrintActioni类实现打印的工作。

相关的PrintAction类源代码在org.eclipse.gef.ui.actions.PrintAction;

 

在源代码:public class PrintFigureOperation extends PrintOperation ;

 

实现打印实质是一种的绘制页面的过程。代码如下:其他忽略;


/**
 * Prints the pages based on the current print mode.
 * @see org.eclipse.draw2d.PrintOperation#printPages()
 */
protected void printPages() {
 Graphics graphics = getFreshPrinterGraphics();
 IFigure figure = getPrintSource();
 setupPrinterGraphicsFor(graphics, figure);
 Rectangle bounds = figure.getBounds();
 int x = bounds.x, y = bounds.y;
 Rectangle clipRect = new Rectangle();
 while (y < bounds.y + bounds.height) {
  while (x < bounds.x + bounds.width) {
   graphics.pushState();
   getPrinter().startPage();
   graphics.translate(-x, -y);
   graphics.getClip(clipRect);
   clipRect.setLocation(x, y);
   graphics.clipRect(clipRect);
   figure.paint(graphics);
   getPrinter().endPage();
   graphics.popState();
   x += clipRect.width;
  }
  x = bounds.x;
  y += clipRect.height;
 }
}

 

在打印时必须注意的重点代码如下:

    publicvoid run(IAction action) {

       int style = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().getStyle();

       Shell shell = new Shell((style & SWT.MIRRORED) != 0 ? SWT.RIGHT_TO_LEFT : SWT.NONE);

       //构建当前的视图编辑器对象

       GraphicalViewer viewer = new ScrollingGraphicalViewer();

       viewer.createControl(shell);

       viewer.setEditDomain(new DefaultEditDomain(null));

       viewer.setRootEditPart(new ScalableFreeformRootEditPart());

       viewer.setEditPartFactory(new GraphicalPartFactory());

       //设置编辑的内容

       viewer.setContents(getContents());

       viewer.flush();

       //设置打印的模式

       int printMode =PrintFigureOperation.FIT_PAGE;

       //调用自定义的代码对话框

       if (printMode == -1)

           return;

       //开始执行打印操作

       PrintDialog dialog = new PrintDialog(shell, SWT.NULL);

       PrinterData data = dialog.open();

       if (data != null) {

           //gef中打印的操作

          PrintGraphicalViewerOperation op =new PrintGraphicalViewerOperation(new Printer(data), viewer);

           //设置答应的模式

           op.setPrintMode(printMode);

           //运行打印的文件

           op.run(selectedFile.getName());

       }

    }

 

 

分享到:
评论

相关推荐

    gef 转折线的相关方法实现和 GEF的API chm 格式

    在gef中,转折线的实现涉及到PathFigure和Segment类的使用。PathFigure用于定义一个图形的轮廓,而Segment则代表了轮廓中的一段线段。通过添加和调整Segment实例,我们可以构建出具有转折点的线条。 实现gef转折线...

    GEF中属性页面的实现

    本文将深入探讨如何在GEF中实现属性视图,并通过一个处理器(Processor)模型的例子来阐述具体步骤。 1. **属性视图的概述** - 属性视图用于展示图形模型的相关属性,如处理器的温度、IP地址和类型等。 - 当图形...

    RCP与GEF课件,介绍RCP和GEF各组成部分和工作原理

    通过命令,开发者可以解耦UI和实现,使得功能可以独立于其表示进行定义和扩展。 6. **Property and Selection Services**:属性服务和选择服务允许不同组件之间共享信息和协调行为,如传递当前选中的对象。 **GEF...

    GEF实现拷贝粘贴

    总的来说,理解和实现GEF中的拷贝粘贴功能需要对GEF框架有深入的理解,包括其命令模型、EditPolicy和模型-视图交互。通过这种方式,开发者可以为自己的图形编辑器提供与操作系统一致的拷贝粘贴体验。

    GEF原理的详细介绍+程序实例和程序源码

    在GEF开发中,它用于记录调试信息和错误日志。 通过学习GEF,开发者可以构建出强大的图形化工具,例如数据库设计工具、流程图编辑器、网络拓扑图等。PPT文件则可能包含更详尽的理论讲解和案例分析,帮助深入理解GEF...

    GEF典型实现例子

    源码标签表明内容可能包含了实际的代码示例,这对于学习和理解GEF的工作原理和如何在实际项目中应用非常有帮助。工具标签则暗示了这个例子可能涉及到了使用GEF作为开发工具或者集成到其他工具链中的情况。 文件名...

    GEF中文教程+代码

    这些代码实例可以帮助读者更好地理解GEF的工作原理,通过实践来学习和掌握。 **5. "读我.txt"** 这个文件可能包含了关于教程的说明、注意事项或者版本信息,对于理解和使用教程至关重要。 总的来说,这个“GEF中文...

    GEF 入门版中文教程 源码

    4. **命令(Command)**:GEF中的命令模式用于封装对模型的修改操作,使得撤销/重做功能得以实现。命令对象记录了更改前后的状态,便于执行回滚或重复操作。 5. **图元(Figure)**和**绘图(Drawing)**:GEF通过SWT...

    Eclipse开发使用GEF和EMF(IBM 红皮书)中英文对照版

    1. GEF和EMF的基本概念:介绍这两个框架的核心原理和设计理念。 2. 模型和视图的关系:阐述如何使用EMF来定义数据模型,并通过GEF展示为图形界面。 3. 图形编辑器的构建:详细步骤指导如何使用GEF创建可交互的图形...

    GEF快速入门教程和EMF教程

    - **Draw2D**: 版本3.1.0或以上,通常包含在GEF中 - **EMF**: 版本2.1.0或以上 ### 创建RCP项目 1. **初始化项目**: - 打开Eclipse并选择“File” &gt; “New” &gt; “Other” &gt; “Plug-in Project”。 - 为项目命名`...

    GEF入门学习例子

    在GEF中,模型通常由`EObject`和`EObjectImpl`实现,可以使用EMF(Eclipse Modeling Framework)来生成。 2. **视图(View)**: 视图是模型的可视化表示,将模型数据呈现给用户。GEF中的视图由`GraphicalViewer`类...

    GEF学习资料整理(含GEF项目搭建、简单示例、常用功能经典实现)

    通过理解这些原理,开发者能够更好地设计和实现符合需求的图形编辑器。 总之,学习GEF需要理解其核心概念,熟悉项目搭建步骤,通过实践示例加深理解,并结合官方文档进行深入研究。此外,掌握经典实现的技巧和经验...

    GEF入门必读 GEF入门系列 GEF-whole-upload

    本资料集旨在为初学者提供一个全面的入门指南,帮助理解GEF的基础概念和实现方法。 GEF的核心功能是提供了一套强大的组件和API,用于创建可交互的、图形式的用户界面。通过使用GEF,开发者可以轻松地创建出具有拖放...

    eclipse gef原理的详细介绍PPT,很有参考价值

    **GEF(Graphical Editing Framework)深度解析** GEF,全称为Graphical Editing Framework,是Eclipse平台下用于构建图形编辑器的...通过深入理解GEF的原理和实践,开发者可以更高效地构建出功能丰富的图形编辑应用。

    GEF教程及demo源码GEF_RCP_DEMO.zip

    GEF中的Figure类负责图形绘制,通过重写paint()方法实现自定义图形的绘制,同时支持事件监听和交互。 5. **编辑操作与命令模式** GEF使用命令模式来处理用户的编辑操作,每个编辑操作对应一个Command对象。当用户...

    GEF连接线Node之间连接

    总的来说,理解和实现“GEF连接线Node之间连接”需要掌握`GEF`框架的基本结构、事件处理、模型与视图的分离、以及图形元素的布局和约束。这不仅可以帮助你构建出强大的图形编辑工具,也能提升你在图形界面开发领域的...

    GEF教程和demo源码

    6. **运行与调试**:最后,源码会教你如何在Eclipse环境中运行和测试这个简单的GEF应用。 通过这个教程和示例,你将能够掌握GEF的基本用法,从而有能力去构建更复杂的图形编辑器。同时,这也会为你打开一扇门,通向...

    GEF入门实例代码2《Eclipse插件开发》中实例

    此外,理解MVC(模型-视图-控制器)模式和MVC在GEF中的应用对于提升开发效率至关重要。 总之,通过这个"GEF入门实例代码2",开发者可以了解到如何在Eclipse中构建一个基于GEF的图形编辑器,这不仅涉及数据模型的...

    自己下的GEF资源打包

    "GEF_Tutorial.pdf"很可能是GEF的基础教程,涵盖了GEF的基本概念、架构和使用方法,包括图元的创建、连接线的绘制、交互操作的实现等。用户可以通过阅读这个教程来了解如何在Eclipse环境中搭建GEF项目,并进行基本的...

Global site tag (gtag.js) - Google Analytics