为什么jsPDF无法在我的角度应用程序中保存带有内部地图的Div?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么jsPDF无法在我的角度应用程序中保存带有内部地图的Div?相关的知识,希望对你有一定的参考价值。

你好,你能帮我吗?我正在使用Angular和jsPDF库以及MapBox构建一个小项目。我想使用jsPDF将地图另存为PDF文件。

显然,一切正常,我可以保存带有标题的PDF文件,但不能在现场保存地图。它仅显示地图的标题和图例,而不显示地图。

如果我尝试使用ricgh,请单击>打印>另存为PDF,效果很好,它将地图及其标记保存在现场。

这里是代码

import { Component, OnInit } from '@angular/core';
import { environment } from 'src/environments/environment';
// dependencia de mapbox
import * as Mapboxgl from 'mapbox-gl';
// dependencia jsPDF
import jsPDF from 'jspdf';
@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {

  // se declara aca para que tenga alcance goblay y se pueda llamar en el metodo
  map: Mapboxgl.map;
  constructor() { }

  ngOnInit() {

    this.createMap();

  }

  // crear mapa
  createMap() {
    Mapboxgl.accessToken = environment.mapBoxKey;
    this.map = new Mapboxgl.Map({
      container: 'mapa-mapbox', // container id
      style: 'mapbox://styles/mapbox/streets-v11',
      center: [-88.8695, 13.5122],
      pitch: 45, // pitch in degrees
      bearing: 6, // bearing in degrees // starting position
      zoom: 8.3 // starting zoom
    });
    // full screem bottom
    this.map.addControl(new Mapboxgl.FullscreenControl());
    // navigation controls
    this.map.addControl(new Mapboxgl.NavigationControl());
  }



  // crear marcador;
  createMarker(Lng: number = -89.2182, Lat: number = 13.6929) {

    const marker = new Mapboxgl.Marker({
      draggable: true
    })
      .setLngLat([Lng, Lat])
      .addTo(this.map);
  }

  imprimirPDF() {
    const documento = new jsPDF();
    documento.fromHTML(document.querySelector('#map'), 20, 30);
    documento.save('GeoMap');

  }

}

模板

<div class="animated fadeIn">
  <!-- Encabezado -->
  <div  id="map">
  <div class="row d-flex justify-content-center mt-5">
    <p class="h1">Marker Maker Map</p>
  </div>
  <!-- Encabezado -->

    <!-- Mapa -->
    <div id="mapa-mapbox" class="col-11 col-md-10 offset-md-1 mt-2" (contextmenu)="createMarker()">
    </div>
    <!-- Mapa -->
  </div>

 <div class="row d-flex justify-content-center">
         <!-- botones -->
         <a class="btn-floating btn-sm btn-success" (click)="createMarker()"><i class="fas fa-map-marker-alt"></i></a>
         <a class="btn-floating btn-sm btn-danger ml-1" (click)="imprimirPDF()"><i class="fas fa-print"></i></a>
         <!-- botones -->
 </div>
  <!-- lista de eventos -->
  <div class="row mt-5">

    <div class="col-12 col-md-5 offset-md-1  d-none d-md-block">
      <img class="img-responsive" src="https://media.giphy.com/media/3ohhwgrL4KKPIZoTQY/giphy.gif" alt="animation">
    </div>

    <div class="col-12 col-md-5">
      <div class="text-center">
        <p class="h3">Features</p>
      </div>
    <ul class="list-group list-group-flush">
      <li class="list-group-item">1- You can use a right click to add a new marker</li>
      <li class="list-group-item">2- You can drag a marker by holding a left click</li>
      <li class="list-group-item">3-  you can rotate the map</li>
      <li class="list-group-item">4- You can add a new marker using the green button</li>
      <li class="list-group-item">5- You can use the full screem mode</li>
    </ul>
  </div>

  </div>
  <!-- lista de eventos -->
</div>

enter image description here

enter image description here

enter image description here

使用ricgh单击>打印>另存为PDF

您能帮我吗?

答案

我相信这甚至不符合Mapbox terms of service。查阅第2.8节。

如果您要导出Mapbox样式的图像,则Mapbox将提供Static Images API,此目的是为此目的而提供的。

以上是关于为什么jsPDF无法在我的角度应用程序中保存带有内部地图的Div?的主要内容,如果未能解决你的问题,请参考以下文章

重定向到带有 SAML 响应的回调 url 时出现错误无法以角度发布

带有 jsPDF 模块的 Angular 9:类型“typeof jsPDF”没有构造签名

如何在带有 UTF-8 的 jsPDF 中使用“setFont”?

我无法使用 NativeScript 在 jsPDF 中渲染图像

AngularJS 与 PHP:为啥我的应用程序无法保存输入文本发送的字符串?

为啥程序无法在我的经济不和谐机器人的 json 中添加带有我的 playerID 的字段? (密钥错误)