У меня есть веб-приложение 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')})
})