Включить скриншот открытого слоя в снимок экрана всей страницы

#javascript #angular #angular-material #html2canvas #openlayers-5

#javascript #угловой #angular-материал #html2canvas #openlayers-5

Вопрос:

У меня был div — пусть назовет его «глобальным» — внутри него у меня был заголовок и две карты openlayer.
Таким образом я могу получить снимок глобального по html2canvs:

     html2canvas(globalElement).then((canvas) => {
      this.screenShot(canvas.toDataURL());
    });
  

Но openlayers на снимке выглядели как два черных элемента, подобных этому:
изображение

Я могу получить вид открытого слоя отдельно с помощью этого кода:

      this.map.once('rendercomplete', function(event) {
          const canvas = event.context.canvas;
          console.log(canvas.toDataURL()); // the open layer screen shot
       });
     this.map.renderSync();

  

Как я могу собрать все это в один снимок экрана?

—— редактировать —-

С помощью @Mike я использую domtoImage, подобный этому примеру:

      this.map.once('rendercomplete', function(event) {
         domtoimage.toPng(globalElement)
        .then((dataURL) => {
            console.log(dataURL);
        });
       });
     this.map.renderSync();
  

и я могу получить изображение всего div с картой открытого слоя.
Из-за этого возник новый вопрос: значки mat в angular material не отображались должным образом с помощью domtoimage, в нем отображается название значка, а не значок.
Как я могу это исправить?

Комментарии:

1. OpenLayers 6 будет иметь холст для каждого слоя и пример openlayers.org/en/master/examples/export-map.html изменен для использования domtoimage, который, вероятно, будет работать для всей страницы с любой версией OpenLayers.

2. @Mike работает очень хорошо, но угловые значки не отображаются на скриншоте, у вас есть какие-либо идеи, почему это?

3. Это будет проблемой Angular, я предлагаю вам добавить Angular.и domtoimage к тегам