@mapgis/webclient-leaflet-plugin
Version: 
363 lines (314 loc) • 13.4 kB
HTML
<html lang="en">
<head>
  
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title> view/utils/Screenshot.js</title>
  <!--[if lt IE 9]>
    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
  <![endif]-->
  <link type="text/css" rel="stylesheet" href="styles/app.min.css">
  <link type="text/css" rel="stylesheet" href="styles/iframe.css">
  <link type="text/css" rel="stylesheet" href="">
  
</head>
<body class="layout small-header">
    <div id="stickyNavbarOverlay"></div>
    
<div class="top-nav">
    <div class="inner">
        <a id="hamburger" role="button" class="navbar-burger" aria-label="menu" aria-expanded="false">
            <span aria-hidden="true"></span>
            <span aria-hidden="true"></span>
            <span aria-hidden="true"></span>
        </a>
        <div class="logo">
            
                <h1> MapGIS Client for JavaScript API</h1>
            
            
        </div>
        <div class="menu">
            
            <div class="navigation">
                
                    
                        <a
                            class="link user-link "
                            href="/docs/cesium/index.html"
                        >
                            Cesium
                        </a>
                    
                        <a
                            class="link user-link "
                            href="/docs/mapboxgl/index.html"
                        >
                            MapboxGL
                        </a>
                    
                        <a
                            class="link user-link "
                            href="/docs/leaflet/index.html"
                        >
                            Leaflet
                        </a>
                    
                        <a
                            class="link user-link "
                            href="/docs/openlayers/index.html"
                        >
                            OpenLayers
                        </a>
                    
                
            </div>
        </div>
    </div>
</div>
    <div id="main">
        <div
            class="sidebar "
            id="sidebarNav"
        >
            <div>
                <span class="mapgis-api-document-span"><a href="index.html">API文档</a></span>
            </div>
            
                <div class="search-wrapper">
                    <input id="search" type="text" placeholder="搜索文档..." class="input">
                </div>
            
            <nav>
                
                    <div class="category"><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">视图模块</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="DrawControl.html">DrawControl</a><span style="display: none;"><p>绘制工具</p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="MapView.html">MapView</a><span style="display: none;"><p>二维场景视图(leaflet引擎),对地图引擎进行管理,如果要对地图图层进行管理请参考[Map]{@link Map},<br/>
参考示例:
<a href='#MapView'>[初始化二维场景视图]</a>
<br>[ES5引入方式]:<br/>
Zondy.MapView() <br/>
[ES6引入方式]:<br/>
import { MapView } from '@mapgis/webclient-leaflet-plugin' <br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Popup.html">Popup</a><span style="display: none;"><p>二维场景信息弹窗(leaflet引擎)
参考示例:
<a href='#MapView'>[初始化二维场景视图]</a>
[ES6引入方式]:<br/>
import { Popup } from '@mapgis/webclient-leaflet-plugin' <br/>
自定义样式说明:<br/>
zondy-popup__content 弹窗容器样式<br/>
zondy-popup__tip 弹窗对话框箭头样式<br/>
zondy-popup__header 弹窗头部样式<br/>
zondy-popup__content 弹窗主体样式<br/>
zondy-popup__footer 弹窗底部样式<br/></p></span></li><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Screenshot.html">Screenshot</a><span style="display: none;"><p>屏幕打印工具</p></span></li></ul><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">草图编辑模块</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="SketchEditorLeaflet.html">SketchEditorLeaflet</a><span style="display: none;"><p>二维场景草图编辑类<br/>
<br>[ES5引入方式]:<br/>
const { SketchEditorLeaflet } = Zondy <br/>
[ES6引入方式]:<br/>
import { SketchEditorLeaflet } from "@mapgis/webclient-leaflet-plugin" <br/></p></span></li></ul><div style="font-weight: bold;vertical-align: middle;padding: 0.4rem 0;" class="mapgis-menu-span"><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/m.png" alt="">渲染器模块</div><ul class="mapgis-sidebar-menus"><li><img style="width: 20px;margin-right: 6px;vertical-align: middle;" src="./styles/c.png" alt=""><a href="Zondy.ThemeLayer.GraphThemeLayer.html">GraphThemeLayer</a><span style="display: none;"><p>统计专题图通过为每个要素绘制统计图表来反映其对应的专题值的大小。它可同时表示多个字段属性信息,在区域本身与各区域之间形成横向和纵向的对比。<br>统计专题图多用于具有相关数量特征的地图上,比如表示不同地区多年的粮食产量、GDP、人口等,不同时段客运量、地铁流量等。目前提供的统计图类型有:柱状图(Bar),折线图(Line),饼图(Pie),三维柱状图(Bar3D),点状图(Point),环状图(Ring)。</p></span></li></ul></div>
                
            </nav>
        </div>
        <div class="core" id="main-content-wrapper">
            <div class="content">
                <header id="page-title" class="page-title">
                    <span class="page-title-main">类名</span>
                    <span class="page-title-sub">view/utils/Screenshot.js</span>
                </header>
                
    
    <section>
        <article>
            <pre class="prettyprint source linenums"><code>import { Zondy, defaultValue, PictureFormat } from '@mapgis/webclient-common'
import * as L from '@mapgis/leaflet'
import EasyPrint from '@mapgis/leaflet-easyprint/src/index'
/**
 * 屏幕打印工具
 * @class Screenshot
 * @moduleEX ViewModule
 * @extends Widget
 * @param {Object} options 构造参数
 * @param {Array<String>} [options.sizeModes] 目前支持 ['Current', 'A4Landscape', 'A4Portrait']
 * @param {String} [options.filename] 打印文件名
 * @param {Boolean} [options.exportOnly] 是否仅导出
 * @param {Boolean} [options.hideControlContainer] 隐藏控件容器
 * @example <caption><h7>初始化打印工具</h7></caption>
 * // ES5引入方式
 * const { Map, MapView } = Zondy
 * const { Screenshot } = Zondy.Widgetthis.view
 * // ES6引入方式
 * import { Map, MapView, Screenshot } from "@mapgis/webclient-leaflet-plugin"
 * // 初始化图层管理容器
 * const map = new Map();
 * // 初始化地图视图对象
 * const mapView = new MapView({
 *   // 视图id
 *   viewId: "viewer-id",
 *   // 图层管理容器
 *   map: map
 * });
 * // 打印控件
 * const screenshot = new Screenshot({
 *   view: mapView,
 *   visible: true
 * })
 * // 添加控件
 * mapView.ui.add(screenshot)
 */
class Screenshot {
  constructor(options) {
    options = defaultValue(options, {})
    /**
     * 视图对象
     */
    this.view = defaultValue(options.view, null)
    /**
     * 打印图片类型,支持输出png、jpeg、svg格式图片
     */
    this.format = defaultValue(options.format, PictureFormat.png)
    /**
     * 浏览器下载文件名
     */
    this.filename = defaultValue(options.filename, 'screenshotFile')
    /**
     * 图片宽度
     */
    this.width = defaultValue(options.width, undefined)
    /**
     * 图片高度
     */
    this.height = defaultValue(options.height, undefined)
    /**
     * 图片原点x
     */
    this.x = defaultValue(options.x, 0)
    /**
     * 图片原点y
     */
    this.y = defaultValue(options.y, 0)
    /**
     * 是否下载图片
     */
    this.isDownload = defaultValue(options.isDownload, true)
    this._print = undefined
    /**
     * 加载EasyPrint插件
     * @private
     * */
    this._initEasyPrint()
  }
  _initEasyPrint() {
    EasyPrint(L)
  }
  /**
   * 添加视图打印对象
   * @private
   * */
  _addView() {
    const mapView = this.view._innerView
    if (mapView) {
      // 添加打印控件
      const printOptions = {
        format: this.format,
        sizeModes: ['Current', 'A4Landscape', 'A4Portrait'],
        filename: '新地图',
        exportOnly: true,
        hidden: true,
        hideControlContainer: true
      }
      // if (this.width) {
      //   printOptions.width = this.width
      // }
      // if (this.height) {
      //   printOptions.height = this.height
      // }
      // if (this.isDownload) {
      //   printOptions.isDownload = this.isDownload
      // }
      this._print = L.EasyPrint(printOptions).addTo(mapView)
      return new Promise((resolve)=>{
        this._print.printMap('CurrentSize', this.filename).then((result) => {
          this._cutImage(result.dataUrl).then((cutResult) => {
            resolve({dataUrl: cutResult.dataUrl})
          })
        })
      })
    }
  }
  _cutImage(dataUrl) {
    const self = this
    const canvas = document.createElement('canvas')
    canvas.width = this.width
    canvas.height = this.height
    const context = canvas.getContext('2d')
    const downloadImage = function (data, filename) {
      const a = document.createElement('a')
      a.href = data
      a.download = filename
      document.body.appendChild(a)
      a.click()
    }
    return new Promise((resolve)=>{
      if (this.width && this.height) {
        const img = new Image()
        img.src = dataUrl
        img.onload = function () {
          context.drawImage(
            img,
            self.x,
            self.y,
            self.width,
            self.height,
            0,
            0,
            self.width,
            self.height
          )
          let dataUrl2d = null
          if (self.format === PictureFormat.png) {
            dataUrl2d = canvas.toDataURL()
          } else if (self.format === PictureFormat.jpeg) {
            dataUrl2d = canvas.toDataURL('image/jpeg')
          } else if (self.format === 'svg') {
            dataUrl2d = canvas.toDataURL()
          }
          if (self.isDownload) {
            downloadImage(dataUrl2d, self.filename)
          }
          resolve({dataUrl: dataUrl2d})
        }
      } else {
        if (self.isDownload) {
          downloadImage(dataUrl, this.filename)
        }
        resolve({dataUrl})
      }
    })
  }
  /**
   * 添加视图打印对象
   * @private
   * */
  _removeView() {
    super._removeView()
    const mapView = this.view._innerView
    if (mapView) {
      if (this._print) {
        mapView.removeControl(this._print)
        this._print = null
      }
    }
  }
}
Zondy.Widget.Screenshot = Screenshot
export default Screenshot
</code></pre>
        </article>
    </section>
            </div>
            
            <footer class="footer">
                <div class="content has-text-centered">
                    <p>文档生成<a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.11</a></p>
                    <p class="sidebar-created-by">
                        <a href="http://www.smaryun.com" target="_blank">司马云</a> <span>© 2023 云生态圈</span>
                        <a href="http://192.168.82.89:8086/#/index" target="_blank">MapGIS Client for JavaScript</a>
                    </p>
                </div>
            </footer>
            
        </div>
        <div id="side-nav" class="side-nav">
            <div style="margin-bottom: 10px;">
                <img style="vertical-align: middle;margin-right: 10px;width: 30px;" src="./styles/anchor.png"/><a href="#page-title">构造函数</a>
            </div>
            <div style="margin-bottom: 10px;">
                <img style="vertical-align: middle;margin-right: 10px;width: 30px;" src="./styles/anchor.png"/><a href="#member">成员变量</a>
            </div>
            <div style="margin-bottom: 10px;">
                <img style="vertical-align: middle;margin-right: 10px;width: 30px;" src="./styles/anchor.png"/><a href="#function">方法</a>
            </div>
            <div>
                <img style="vertical-align: middle;margin-right: 10px;width: 30px;" src="./styles/anchor.png"/><a href="#event">事件</a>
            </div>
        </div>
    </div>
<script src="scripts/linenumber.js"> </script>
<script src="scripts/search.js"> </script>
</body>
</html>