在我的应用程序中,我有一些应该可以打印的视图.您可以将它们视为报告.我在服务器端生成HTML.
当用户单击"Print"按钮时,我调度API调用,以文本形式检索呈现的html,将其放入<iframe>
中,然后在结果窗口上调用print()
.
在Chrome和Firefox(台式机)上,这是可行的(或多或少...)
但在Chrome手机(安卓)上的行为是very%奇怪的.API调用被正确调度,"系统"打印模式打开,但显示的不是IFRAME内容,而是用于打印的"父"页面内容(包含"打印"按钮的页面).
这就好像我呼叫print()
的iFrame不是移动设备上的正确窗口.我已经判断了Android上的远程开发人员控制台,没有错误或其他消息可以给我任何提示.
如果有帮助,下面是我在服务中使用的代码,用来生成包含可打印内容的iframe:
return this._api.printEntity(entity).pipe(
tap(data => {
const iframe: HTMLIFrameElement = document.createElement('iframe');
document.body.appendChild(iframe);
const printWin: Window = iframe.contentWindow!;
printWin.document.write(data);
setTimeout(() => {
printWin.focus();
printWin.print();
printWin.close();
document.body.removeChild(iframe);
}, 1000);
})
);
正如您可能注意到的,我使用了very个较大的超时时间,以便让iframe有足够的时间在生成的报告中加载样式文件和图像.我试过使用printWin.onload
ETC,但我不能让它工作.
我很难相信,这么简单的任务看起来如此繁琐,我有什么遗漏的吗?