在我的Web应用程序中,我试图打印屏幕内容。尽管当我单击要打印的按钮时,它会引发以下错误
core.js:15714 ERROR Error: The overlay manager has not yet been initialized.
at ensureOverlay (viewer.js:15555)
at print (viewer.js:15449)
at PrintCoverScanComponent.push../src/app/feature-modules/coverscan/component/print-coverscan.component.ts.PrintCoverScanComponent.printCoverPage (print-coverscan.component.ts:135)
at SafeSubscriber._next (print-coverscan.component.ts:95)
at SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.__tryOrUnsub (Subscriber.js:196)
at SafeSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.SafeSubscriber.next (Subscriber.js:134)
at Subscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber._next (Subscriber.js:77)
at Subscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
at MapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/map.js.MapSubscriber._next (map.js:41)
at MapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
我在Google的所有地方都检查过,但是什么也没找到。我尝试在加载时调用该函数,以确保不是引起任何问题的按钮。
<div *ngIf="!progressSpinnerEnabled" class="d-print-none">
<hr />
<button type="submit" style="float: right; margin-bottom: 10px;" nz-button nzType="primary" (click)="printCoverPage()">Print</button>
</div>
printCoverPage() {
window.print();
}
斯蒂芬·劳(Stephan Rauh)添加的其他信息:该应用程序正在使用Mozilla的pdf.js(更准确地说是<ngx-extended-pdf-viewer>
)。
答案 0 :(得分:1)
我已找到问题的原因,这是对angular.json文件的修改。我正在使用的“ ngx-extended-pdf-viewer”似乎有一个错误。以下是导致“ window.print()”无法正常工作的修改。 The left causes the error, the right fixes the error
答案 1 :(得分:1)
更新06/07/2019 :我已经发布了<ngx-extended-pdf-viewer>
的新版本。请更新到0.9.54或更高版本。此版本停止覆盖window.print()
,并修复了其他一些与打印有关的错误。
原始答案:
ngx-extended-pdf-viewer作者在这里。我不会称它为bug,因为pdf.js团队显然打算覆盖标准print()
函数。但是,我必须承认这是您的应用程序中的错误,因此我们应该对其进行修复。
我已经开始研究该主题。我已经使用ngx-pdf-viewer 0.9.53发布了初步的错误修复。请参阅https://github.com/stephanrauh/ngx-extended-pdf-viewer/issues/101以及如何激活错误修复程序(仅包含在开发人员预览中)。
成功(或希望如此)修复错误并将其带到ngx-extended-pdf-viewer的主分支后,我将再次编辑此答案。