主要的功能就是使用C#画矢量图,然后导出到Word、Excel、Powerpoint中,并且能够再次被编辑。以下是解决过程:

首先应该确定在Office文档中可编辑图形使用的格式;学习了相关资料,了解到Office文档主要支持三种矢量图的格式:1、VML图形,2、WMF文件格式,3、EMF文件格式。由于VML图开一般使用HTML语言进行描述,不便于进行操作,因此决定采用WMF和EMF文件格式。

接下来的工作就是要让C#根据提供的数据生成WMF或EMF格式的矢量图形;学习了C#提供的GDI+绘图类库,GDI+可以绘制矢量图形,代码示例如下:
  /// <summary>
  /// 导出为 Emf 或 Wmf 文件
  /// </summary>
  /// <param name="filePath">文件路径</param>
  /// <returns>是否成功</returns>
  private bool Export(string filePath)
  {
   try
   {
    Bitmap bmp = new Bitmap(220,220);
    Graphics gs = Graphics.FromImage(bmp);
    Metafile mf  = new Metafile(filePath,gs.GetHdc());

Graphics g = Graphics.FromImage(mf);

Draw(g);

g.Save();
    g.Dispose();
    mf.Dispose();

return true;
   }
   catch
   {
    return false;
   }
  }
  /// <summary>
  /// 绘制图形
  /// </summary>
  /// <param name="g">用于绘图的Graphics对象</param>
  private void Draw(Graphics g)
  {
   HatchBrush hb = new HatchBrush(HatchStyle.LightUpwardDiagonal, Color.Black, Color.White);

g.FillEllipse(Brushes.Gray,10f,10f,200,200);
   g.DrawEllipse(new Pen(Color.Black,1f),10f,10f,200,200);

g.FillEllipse(hb,30f,95f,30,30);
   g.DrawEllipse(new Pen(Color.Black,1f),30f,95f,30,30);

g.FillEllipse(hb,160f,95f,30,30);
   g.DrawEllipse(new Pen(Color.Black,1f),160f,95f,30,30);

g.FillEllipse(hb,95f,30f,30,30);
   g.DrawEllipse(new Pen(Color.Black,1f),95f,30f,30,30);

g.FillEllipse(hb,95f,160f,30,30);
   g.DrawEllipse(new Pen(Color.Black,1f),95f,160f,30,30);

g.FillEllipse(Brushes.Blue,60f,60f,100,100);
   g.DrawEllipse(new Pen(Color.Black,1f),60f,60f,100,100);

g.FillEllipse(Brushes.BlanchedAlmond,95f,95f,30,30);
   g.DrawEllipse(new Pen(Color.Black,1f),95f,95f,30,30);

g.DrawRectangle(new Pen(System.Drawing.Brushes.Blue,0.1f),6,6,208,208);

g.DrawLine(new Pen(Color.Black,0.1f),110f,110f,220f,25f);
   g.DrawString("剖面图",new Font("宋体",9f),Brushes.Green,220f,20f);
}

导出Emf 或 Wmf 文件,那就是矢量图

Metafile mf  = new Metafile(filePath,gs.GetHdc());
Graphics g = Graphics.FromImage(mf);
这个代码就是对图形图元文件进行操作。

C#中如何生成矢量图的更多相关文章

  1. Android中使用SVG矢量图(一)

    SVG矢量图介绍 首先要解释下什么是矢量图像,什么是位图图像? 1.矢量图像:SVG (Scalable Vector Graphics, 可伸缩矢量图形) 是W3C 推出的一种开放标准的文本式矢量图 ...

  2. idea 中如何生成类图

    前言:记录一下 idea 中如何生成类图,毕竟类图在开发或看源码时用得特别多. 推荐博客:https://blog.csdn.net/zhangle1hao/article/details/78804 ...

  3. Yarn中如何生成状态机图

    原文 http://xiguada.org/yarn_state_picture/ 在Hadoop2.0系列的版本里,采用了状态机的方式处理ResourceManager,NodeManager,Ma ...

  4. vue 项目中添加阿里巴巴矢量图

    1. 选择需要的图标,添加到购物车 2. 打开购物车,添加至我的项目 3. 打开项目列表 - 更多操作 - 编辑项目 修改FontClass/Symbol前缀,自定义一个名称,例如:v-icon-cu ...

  5. PowerDesigner中翻转生成PDM图时把Name属性变成注释(转)

    在pd里面运行下面这段代码'******************************************************************************'* File: ...

  6. protel DXP的类矢量图功能

    一.概述 在写论文的过程中,我们经常需要将protel DXP上的原理图贴入到WORD中.我们可以选择使用截图工具,然后再导入到WORD中.但是由于普通截图图形文件都是位图文件,当我们将图形文件导入W ...

  7. eclipse下生成Java类图和时序图,生成UML图

    1.安装和使用AmaterasUML 安装AmaterasUML前,需要先安装GEF采用eclipse在线安装方式安装就好.eclipse在线安装GEF的地址:http://download.ecli ...

  8. 在 Xcode 6 中使用矢量图( iPhone 6 置配 UI)

    在 Xcode 6 中使用矢量图( iPhone 6 置配 UI) (本文转载:http://iosdeveloper.diandian.com/post/2014-09-25/40063062789 ...

  9. 【译】在Asp.Net中操作PDF - iTextSharp - 绘制矢量图

    原文 [译]在Asp.Net中操作PDF - iTextSharp - 绘制矢量图 在上一篇iTextSharp文章中讲述了如何将现有的图片插入PDF中并对其进行操作.但有时,你需要在PDF中绘制不依 ...

随机推荐

  1. 记个maven无法识别JAVA_HOME的问题 Error: JAVA_HOME is not defined correctly.

    Error: JAVA_HOME is not defined correctly. We cannot execute /Library/Java/JavaVirtualMachines/jdk1. ...

  2. IO流07_输入输出流总体系

    [javaIO体系中常用的流] [关于字符流和字节流的注意点] 通常,字节流比字符流功能更加强大,因为字节流可以处理所有的二进制文件. 但是字节流来处理字符,又需要将字节转换成字符,增加了编程复杂度. ...

  3. 关于“undefined reference to”错误

    哪些问题可能产生undefined reference to错误? 1.没用生成目标文件 比如说hello.o文件,由于名字写错.路径不对.Makefile缺少. 2.没用添加相应的库文件.so/dl ...

  4. Codevs 3289 花匠 2013年NOIP全国联赛提高组

    3289 花匠 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 花匠栋栋种了一排花,每株花都 ...

  5. 调起MT096的配置过程

    FTP::cips\/var/cics_regions/RGCIPS/database/PD/PD.RGCIPS|PD.auto 更加新的PD号(其中的路径指向新的程序ibmp),并修改FTP::ci ...

  6. 二叉搜索的各种bugs——重复递增序列

    int binary_search(int* A, int value, int p, int r); int main(int argc, char *argv[]){ , , , , , , , ...

  7. Java 使用反射拷贝对象一般字段值

    在<Java解惑>上面看到第八十三例--诵读困难者,要求使用非反射实现单例对象的拷贝.查阅了部分资料,先实现通过反射拷贝对象. 1. 编写需要被拷贝的对象Person package co ...

  8. Github上关于大数据的开源项目、论文等合集

    https://github.com/onurakpolat/awesome-bigdata

  9. svn 钩子 post-commit 出现255错误解决办法

    首先检查代码中是否有可执行命令 #!/bin/sh 然后 检查post-commit权限 post-commit 脚本文件的权限不对,post-commit 脚本必须有 +x 权限. chown sv ...

  10. javascipt学习笔记1

    一.javascript 部分 1.整理 <<javascript>> 要学习哪些章节 及核心内容? ①javascript简介 核心技术点:javascript定义 作用特点 ...