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 中的原生网络请求解读 在前端开发中,经常需要与服务器进行数据交互。其中最常用的方式就是通过网络请求来完成数据的获取和传输操作。JS 中提供了原生的网络请求 API,使得我们可以直接在代码中发送网络请求。本文将对 JS 中的原生网络请求进行详细讲解。 发送网络请求的方式 在 JS 中,我们可以使用以下两种方式来发送网络请求: 使用 XMLHttpRequ…

    JavaScript 2023年6月11日
    00
  • Javascript读取上传文件内容/类型/字节数

    下面是Javascript读取上传文件内容/类型/字节数的完整攻略。 1. 读取上传文件类型 实现读取上传文件类型的方法,可以使用HTML5标准中的File API。通过File API,可以使用JS访问用户选择的本地文件。 以下是一个使用File API的示例代码: const fileInput = document.getElementById(‘fi…

    JavaScript 2023年5月27日
    00
  • ajax 技术和原理分析

    AJAX 技术和原理分析 什么是 AJAX AJAX 全称 Asynchronous JavaScript And XML,即异步 JavaScript 和 XML。它是一种用于 Web 开发的技术,允许在客户端和服务器之间进行异步数据请求,从而避免了重新加载整个网页的必要性,使得页面更加快速和动态。通过 AJAX,可以实现无刷新地更新部分数据、响应用户的输…

    JavaScript 2023年6月11日
    00
  • javascript定义函数的方法

    下面是关于JavaScript定义函数的方法的完整攻略: 1. 常规函数定义 最常见的JavaScript函数定义方式是使用function关键字。 function functionName(parameter1, parameter2, …parameterN) { // 函数体 return returnValue; } 其中: functionN…

    JavaScript 2023年5月27日
    00
  • JavaScript 实现自己的安卓手机自动化工具脚本(推荐)

    以下是完整的攻略: JavaScript 实现自己的安卓手机自动化工具脚本(推荐) 简介 本文介绍如何使用 JavaScript 实现自己的安卓手机自动化工具脚本。通过这种方式,您可以自动化控制您的安卓手机进行各种任务,提高工作效率。本文采用 Appium + JavaScript 的组合实现。 准备 安装 Node.js。Node.js 是一个让 Java…

    JavaScript 2023年6月11日
    00
  • JavaScript伪数组和数组的使用与区别

    下面我来详细讲解一下“JavaScript伪数组和数组的使用与区别”。 什么是JavaScript数组和伪数组? 在JavaScript中,数组是一种用于存储一组值的集合。数组可以存储不同类型的值,如字符串、数字、对象等等。在JavaScript中使用数组是非常普遍的,它能够更方便地管理和处理一组数据。 伪数组是一种类似于数组的对象,它拥有一些数组的特征,比…

    JavaScript 2023年5月27日
    00
  • Js 时间间隔计算的函数(间隔天数)

    下面我来详细讲解“Js 时间间隔计算的函数(间隔天数)”的完整攻略。 1. 需求分析 首先,我们需要明确这个函数的具体需求。根据题目,我们需要实现一个函数来计算两个日期之间的间隔天数。例如,对于输入的日期字符串 “2021-01-01” 和 “2021-01-05″,函数应该返回 4。 2. 时间格式转换 首先,我们需要将日期字符串转换成 JavaScrip…

    JavaScript 2023年5月27日
    00
  • javascript中replace使用方法总结

    JavaScript中replace使用方法总结 replace()方法是JavaScript中字符串对象的一个常用方法,其作用是在字符串中搜索指定的子字符串或者正则表达式,并将其替换为新的子字符串。在本篇文章中,我们将对replace()方法进行详细的讲解和总结。 基本使用 replace()方法的基本语法如下: string.replace(search…

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