Нашел способ распечатать междоменные фреймы, но с помощью метода, который я использую, я не нашел способа удалить их после - PullRequest
0 голосов
/ 15 мая 2019

У меня есть веб-приложение Quasar, которое взаимодействует с сервером NodeJS. В некоторых случаях мой NodeJS-сервер генерирует отчеты с использованием fluentreports и отправляет их в мое веб-приложение, которое затем распечатывает их. Поскольку сервер NodeJS находится в другом домене, чем мое веб-приложение, я должен встроить iframe в iframe прокси. Я перепробовал много разных методов, и я смог найти только один, который работал с тихой печатью, которую мне также пришлось немного подправить. Хотя эта функция работает идеально, я стараюсь избегать одной вещи: эта функция не удаляет iframe из тела документа после завершения печати. Я попытался использовать событие onafterprint, но не смог заставить его работать. Оригинальное решение, которое я настроил, здесь: http://blog.davidjs.com/2018/03/print-document-from-cross-origin-iframe/

Я попытался использовать исходный код по приведенной выше ссылке, но печать все еще не работала должным образом, поэтому я использовал свойство autoPrint на стороне сервера, которое автоматически открывает окно печати после вывода отчета в любом месте. Все, что осталось сделать - это удалить iframe после закрытия окна печати. Любая помощь будет оценена.

Код функции, которая печатает отчет, приведен ниже:

printIframe: function(url) {
      var proxyIframe = document.createElement('iframe');
      var body = document.getElementsByTagName('body')[0];
      body.appendChild(proxyIframe);
      proxyIframe.style.width = '100%';
      proxyIframe.style.height = '100%';
      proxyIframe.id='iframe'
      proxyIframe.style.display = 'none';

      var contentWindow = proxyIframe.contentWindow;
      contentWindow.document.open();
      // Set dimensions according to your needs.
      // You may need to calculate the dynamically after the content has loaded
      contentWindow.document.write('<iframe src="' + url + '" width="1000" height="1800" frameborder="0" marginheight="0" marginwidth="0">');
      contentWindow.document.close();
    },

Код на стороне сервера ниже:

var options = {
              data: rows,
              paper: 'A5',
              autoPrint: true,
              fullScreen: true
            }
            var myreport=new Report.Report("buffer", options)
              .data(rows)
              .pageHeader(repairheaderFunction)
              .detail(repairdetailFunction)
              .pageFooter(repairfooterFunction)
            myreport.render(function (err, data) {
              callbackfn({authenticated: true, pdf: 'data:application/pdf;base64,' + data.toString('base64')})
            })
...