Попытка напечатать холст HTML - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь напечатать содержимое из тега HTML div, пока здесь все в порядке, поэтому я делаю с библиотекой fabricJS, что пользователь может написать текст или добавить изображение на моей странице.

Но, когда я пытаюсь напечатать это содержимое на своей странице, тег div от hello world (hola mundo на испанском языке) до раздела canvas, я получаю ошибку, потому что предварительный просмотр распечатка с моего навигатора выполняется белым цветом и не работает с содержанием canvas.

HTML

<div class="card mb-3 shadow p-3 mb-5 bg-white rounded">
      <div class="container" id="print-section">
        ¡Hola Mundo!
        <canvas id="myCanvas" width="400px" height="100px" style="border:solid;">
          Hola Mundo!
        </canvas>
      </div>
      <hr>
      <div class="form-row">
        <div class="col-md-6">
          <button class="btn btn-primary btn-block" (click)="print('printSectionId')">Print</button>
        </div>
        <div class="col-md-6">
          <button class="btn btn-success btn-block" (click)="inciarCanvas()">Start</button>
        </div>
      </div>
    </div>

Машинопись / Угловая

canvas: any;
  constructor() { }
  print(): void {
    let printContents,
        popupWin;
    printContents = document.getElementById('print-section').innerHTML;
    popupWin = window.open('', '_blank', 'top=0,left=0,height=100%,width=auto');
    popupWin.document.open();
    popupWin.document.write(`
      <html>
        <head>
          <title>Print tab</title>
          <style>
          </style>
        </head>
        <body onload="window.print();window.close()">${printContents}</body>
      </html>`
    );
    popupWin.document.close();
  }

  ngOnInit() {
    this.canvas = new fabric.Canvas('myCanvas', );
    this.canvas.add(new fabric.IText('¡Just write!'));
    fabric.Image.fromURL('https://assets-cdn.github.com/images/icons/emoji/unicode/1f47d.png', (image) => {
      image.set({
        left: 50,
        top: 70,
      });

      this.canvas.add(image);
    });
  }

Примечание: Если я нажму клавишу ctrl + p, на нем будет показано все содержимое моей страницы, включая холст и весь контент (текст и марсианский рисунок), и я не смогу добавить изображение, чтобы быть более понятным в моей необходимости (для репутации).

Что я могу сделать, чтобы найти решение для моей проблемы или что я делаю не так?

¡Спасибо!

1 Ответ

0 голосов
/ 29 июня 2018

Я выполнил аналогичную задачу в приложении Angular4, поэтому я делюсь этой логикой здесь. Я использовал HTML 5 Canvas с кинетическим JS. Kinetic-JS используется для рисования изображений, линий или любой формы на холсте. Требовалось создать какой-то элемент управления типа CK-редактор или HTML-редактор. Когда я успешно нарисовал все формы, следующей сложной задачей для меня была печать содержимого холста, а не всей страницы. У меня был json всех форм, которые я рисую на холсте, используя Kinetic-JS. Поэтому я использовал тот же самый Json, чтобы перерисовать эти фигуры, щелкнув по кнопке «Печать», чтобы создать SVG (вы можете использовать объекты форм памяти, которые уже были нарисованы). Я использовал этот SVG для печати, отправив этот SVG на принтер.

Если вам нужна дополнительная помощь, я буду счастлив сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...