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

yizhihongxing

当我们需要在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日

相关文章

  • JavaScript中filter的用法实例分析

    我们来详细讲解一下“JavaScript中filter的用法实例分析”。 什么是filter? 在JavaScript中,filter()是Array对象的一个方法,它用于过滤数组中的元素,根据指定的条件筛选出符合条件的元素组成一个新数组并返回,原数组不会改变。 filter()方法接收一个函数作为参数,这个函数会被逐个考察数组中的元素,只有在符合特定条件时…

    JavaScript 2023年5月27日
    00
  • JavaScript实现筛选数组

    接下来我将为您讲解如何使用JavaScript来实现筛选数组。 基本概念 在JavaScript中,可以使用数组的filter()方法来筛选数组。filter()方法返回一个新的数组,其中仅包含原数组中符合筛选条件的元素。 filter()方法接收一个回调函数作为参数,函数中定义筛选规则。具体来说,这个回调函数应当接收3个参数:数组中的当前元素、元素的索引和…

    JavaScript 2023年5月27日
    00
  • javascript 添加和移除函数的通用方法

    在Javascript编程中,我们常常需要动态地添加或者移除函数,这是很常见的需求。而实现这样的功能,我们可以使用Javascript的内置方法,或者自定义方法来实现。下面我们将从两个方面来详细讲解Javascript添加和移除函数的通用方法。 方法一:使用内置方法实现添加和移除函数 在Javascript中,我们可以使用addEventListener()…

    JavaScript 2023年5月27日
    00
  • window.setInterval()方法的定义和用法及offsetLeft与style.left的区别

    一、window.setInterval()方法的定义和用法 window.setInterval()方法是JavaScript中的一个计时器函数,用于周期性地重复执行指定代码,间隔时间由用户自定义。它的语法如下: window.setInterval(func, delay, arg1, arg2, …) 参数说明: func:周期性执行的代码块,可以…

    JavaScript 2023年6月11日
    00
  • 浅谈JS闭包中的循环绑定处理程序

    下面是关于“浅谈JS闭包中的循环绑定处理程序”的详细攻略。 什么是闭包 闭包指的是一个函数可以访问并修改它所在的词法作用域中的变量,即使这个函数在它所在的词法作用域外被调用。在 JavaScript 中,函数就是闭包。 为什么需要闭包 JavaScript 中引入闭包的一个重要原因是函数作用域的变量是“静态”绑定的,即它们与它们所在的上下文是在它们被定义和分…

    JavaScript 2023年6月10日
    00
  • JSP应用的安全问题

    一、JSP应用的安全问题 JSP(Java Server Pages)被广泛用于构建Web应用程序,但是,与其使用的客户端JavaScript类似,JSP应用程序也面临着多种安全问题。以下是几个可能导致JSP应用程序受到攻击的安全问题: SQL注入攻击 SQL注入攻击是一种利用Web应用程序中的输入验证漏洞来执行恶意SQL语句的攻击。这种攻击可以导致应用程序…

    JavaScript 2023年6月11日
    00
  • JavaScript之promise_动力节点Java学院整理

    关于JavaScript中的Promise,我们可以从以下几个方面来介绍: 一、Promise概述 Promise是一种异步编程的解决方案,简单来说就是用更优雅的方式解决回调地狱的问题。根据MDN的定义,Promise是一个代表了一个异步操作最终完成或者失败的对象。 二、Promise三种状态 Promise有三种状态:pending(进行中)、fulfil…

    JavaScript 2023年5月28日
    00
  • javascript学习笔记(十五) js间歇调用和超时调用

    JavaScript学习笔记(十五)—— JS间歇调用和超时调用 JavaScript中的间歇调用和超时调用是处理异步编程中的常用技术,它们可以让我们在指定的时间间隔内执行指定的函数或代码块。接下来我们将详细讲解 JavaScript中的间歇调用和超时调用。 1. setInterval方法 setInterval方法可以按照指定时间间隔重复执行指定的函数或…

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