GoJs中导出图片或者SVG实现示例详解

当我们需要在GoJs中快速导出图片或SVG文件时,可以使用GoJs的API来实现这一目标。下面我将详细讲解“GoJs中导出图片或者SVG实现示例详解”的完整攻略。

第一步:加载相关库文件

要使用GoJs的导出功能,首先需要在您的网站中引入GoJs和后端服务器使用的库文件。

<script src="https://unpkg.com/gojs/release/go.js"></script>
<script src="https://unpkg.com/gojs/extensions/PDFMake.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.3/FileSaver.min.js"></script>

第二步:定义页面的GoJs图表

在页面上定义一个Gojs图表,并向其添加一些节点和连线,这里我们用一个简单的示例来说明:

<div id="myDiagramDiv" style="border: solid 1px black; width: 100%; height: 400px"></div>

<script>
  // 定义一个Go.js图表
  var $ = go.GraphObject.make;
  var myDiagram =
    $(go.Diagram, "myDiagramDiv",
      { // 定义一些属性值
        initialAutoScale: go.Diagram.UniformToFill,
        "undoManager.isEnabled": true // 允许撤消和重做
      });

  // 添加一些节点和连线
  myDiagram.add(
    $(go.Part, "Table",
      $(go.TextBlock, "Hello"),
      $(go.Shape, "Rectangle", { fill: "orange" })
    ),
    $(go.Part, "Table",
      $(go.TextBlock, "World"),
      $(go.Shape, "Rectangle", { fill: "lightblue" })
    ),
    $(go.Link,
      $(go.Shape, { strokeWidth: 2 }),
      $(go.Shape, { toArrow: "Standard" })
    )
  );
</script>

第三步:定义导出选项

为了导出Go.js图表,我们需要定义导出选项,这些选项将影响导出的文件格式和内容。下面是一个导出选项的示例:

function makeSvg() { // 创建SVG文件
  var svg = myDiagram.makeSvg({
    scale: 1.0 // 默认比例为1.0
  });
  svg.setAttribute("xmlns", "http://www.w3.org/2000/svg");
  return new XMLSerializer().serializeToString(svg);
}

var Diagram = go.Diagram;

var pdfOptions = {
  showTemporaryText: false, // 不显示暂时的字体
  compress: false, // 不使用压缩模式
  documentTitle: "GoJS Diagram", // 设定文件标题
  fileName: "myDiagram.pdf", // 设定文件名
  scale: Diagram.UniformToFill
};
var svgOptions = {
  scale: 1.0, // 设置比例
  background: "white", // 背景色为白色
  documentTitle: "GoJS Diagram", // 设定文件标题
  fileName: "myDiagram.svg" // 设定文件名
};

第四步:将图表导出为图片

有两种方法可以将Gojs图表导出为图片,一种是将图表导出为PNG格式,另一种是导出为JPG格式。我们将使用FileSaver.js库将图表保存为本地文件。

将图表导出为PNG格式

function makePng() { // 创建PNG文件
    var promise = new Promise(function(resolve, reject) {
      myDiagram.makeImage({
        scale: 1.0 // 默认比例为 1.0
      }, function(blob) {
        resolve(blob);
      });
  });
  return promise;
}

// 定义一个按钮,点击即导出PNG文件
document.querySelector("#exportPng").addEventListener("click", function() {
  makePng().then(function(blob) {
    saveAs(blob, "myDiagram.png");
  });
});

将图表导出为JPG格式

function makeJpg() { // 创建JPG文件
  var promise = new Promise(function(resolve, reject) {
    myDiagram.makeImage({
      scale: 1.0,
      type: "image/jpeg"
    }, function(blob) {
      resolve(blob);
    });
  });
  return promise;
}

// 定义一个按钮,点击即导出JPG文件
document.querySelector("#exportJpg").addEventListener("click", function() {
  makeJpg().then(function(blob) {
    saveAs(blob, "myDiagram.jpg");
  });
});

第五步:将图表导出为SVG文件

// 定义一个按钮,点击即导出SVG文件
document.querySelector("#exportSvg").addEventListener("click", function() {
  var svgData = makeSvg();
  var blob = new Blob([svgData], { type: "image/svg+xml" });
  saveAs(blob, "myDiagram.svg");
});

第六步:将图表导出为PDF文件

document.querySelector("#exportPdf").addEventListener("click", function() {
  var pdfOptions = {
    showTemporaryText: true, // 以暂时的、大尺寸的字体展示图表
    compress: true, // 开启压缩
    documentTitle: "GoJS Diagram", // 设定文件标题
    fileName: "myDiagram.pdf", // 设定文件名
    scale: Diagram.UniformToFill // 设置比例为Unifrom To Fill
  };
  var pdfmake = window['pdfMake'];
  pdfmake.createPdf(pdfmakeDiagram(myDiagram), pdfOptions).download();
});

function pdfmakeGODiagram(diagram, options) {
  var pdfOptions = options || {};
  var svgData = makeSvg();
  var url = "data:image/svg+xml;charset=utf-8," + encodeURIComponent(svgData);
  var imgOptions = {
    src: url,
    fit: [100 * 1.3333, 100], // 固定图表宽度
    align: 'center'
  };
  var imgObject = pdfmake.createImg(imgOptions);
  imgObject["width"] = diagram.documentBounds.width;
  imgObject["height"] = diagram.documentBounds.height;
  imgObject["alignment"] = 'center';
  return {
    pageSize: 'A4',
    pageMargins: [40, 40],
    content: [
      {
        canvas: [
          {
            type: 'rect',
            x: imgOptions.width + 15,
            y: 5,
            w: 200,
            h: 17,
            r: 2,
            color: pdfOptions.showTemporaryText ? '#EAEAEA' : '#FFFFFF'
          },
          {
            text: pdfOptions.showTemporaryText ? "Temporary Text" : pdfOptions.documentTitle,
            fontSize: 11,
            bold: true,
            color: pdfOptions.showTemporaryText ? '#AAAAAA' : '#333333',
            absolutePosition: { x: imgOptions.width + 25, y: 10 }
          }
        ]
      },
      // 渲染创建的GoJo图表
      { image: imgObject },
    ]
  };
}

好了,以上就是GoJs中导出图片或者SVG的实现示例详解。希望对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:GoJs中导出图片或者SVG实现示例详解 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • js校验开始时间和结束时间

    JS校验开始时间和结束时间需要以下步骤: HTML结构:首先,我们需要在HTML代码中定义开始时间和结束时间的输入框,HTML的代码如下: <label for="date-start">开始时间:</label> <input type="date" id="date-star…

    JavaScript 2023年5月27日
    00
  • jquery使用$(element).is()来判断获取的tagName

    使用$(element).is()方法可以判断某个元素的标签名是否为指定标签名或其它选择器。 语法 $(element).is(selector) 参数 selector:一个字符串,表示标签名或其他选择器。 返回值 true:如果指定元素匹配选择器,返回true。 false:如果指定元素不匹配选择器,返回false。 示例 示例1:判断元素的标签名 判断…

    JavaScript 2023年6月10日
    00
  • 浅谈TypeScript3.7中值得注意的3个新特性

    首先,让我们先简单介绍一下TypeScript。TypeScript是微软开发的一种超集编程语言,它是JavaScript的扩展,可以增加静态类型、接口、类、命名空间等特性,将JavaScript打造成强类型的脚本语言。 TypeScript3.7是最新的版本,其中有三个新特性值得我们关注。 1.声明只读数组和元组 在TypeScript 3.7中,我们可以…

    JavaScript 2023年5月27日
    00
  • js document.getElementsByClassName的使用介绍与自定义函数

    让我们来详细讲解一下 “document.getElementsByClassName” 的使用介绍与自定义函数的完整攻略。 1. document.getElementsByClassName() 的介绍 document.getElementsByClassName() 是一个 JavaScript 函数,用于获取页面上所有指定 class 属性的元素。…

    JavaScript 2023年6月10日
    00
  • XHTML下,JS浮动代码失效的问题

    XHTML是HTML的一种更加严格的版本,需要符合更为严格的规范,语法上更为规范化。JS浮动代码在XHTML下失效,主要是因为XHTML不允许使用空标签来代替一些书写不完整的标签,如img、input等。因此,浮动代码在XHTML下需要进行一些特殊处理。 以下是两个解决XHTML下JS浮动失效问题的示例: 1.将浮动元素封装在一个div中 <!DOCT…

    JavaScript 2023年6月11日
    00
  • JavaScript函数之call、apply以及bind方法案例详解

    JavaScript函数之call、apply以及bind方法案例详解 本文将详细介绍JavaScript中的函数三大方法:call、apply、bind。它们用于改变函数内部this指向的对象,并且可以传递一些参数,方便我们灵活地调用函数。在本文中,我们将一步一步的讲解这三个函数的使用方法,并通过多个示例来详细说明其使用场景与细节问题。 call() 方法…

    JavaScript 2023年6月11日
    00
  • js读写json文件实例代码

    当我们需要读写JSON文件时,我们可以使用Node.js中的fs模块进行操作。下面是使用Node.js读写JSON文件的两个示例: 示例一:读取JSON文件 首先,在JavaScript文件的开头引入 fs 模块,并使用 fs.readFileSync()方法读取JSON文件: const fs = require(‘fs’); const data = f…

    JavaScript 2023年5月27日
    00
  • JS封装cookie操作函数实例(设置、读取、删除)

    下面我来为你详细讲解“JS封装cookie操作函数实例(设置、读取、删除)”的完整攻略。 什么是cookie cookie 是浏览器用于存储用户信息的一种机制。当我们需要在应用程序之间共享数据时,可以使用 cookie 来存储数据。它是一种名为键-值对的数据结构,可以存储在浏览器中的本地电脑上,并在将来的会话之间使用。 如何进行cookie操作 我们可以使用…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部