This commit is contained in:
2025-12-11 10:06:26 +00:00
parent c892dff841
commit 7df1e7cc7a

View File

@@ -594,18 +594,17 @@ export class DeDocumentViewer extends DeesElement {
}
private async handlePrint(): Promise<void> {
// Create a print-specific container
// Create a print-specific container - hidden on screen, visible only in print
const printContainer = document.createElement("div");
printContainer.className = "dedocument-print-container";
printContainer.style.cssText = `
position: fixed;
position: absolute;
left: -9999px;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 999999;
background: white;
overflow: visible;
width: 210mm;
height: auto;
visibility: hidden;
pointer-events: none;
`;
// Create a document element in print mode
@@ -618,7 +617,7 @@ export class DeDocumentViewer extends DeesElement {
printContainer.appendChild(printDoc);
document.body.appendChild(printContainer);
// Add print styles
// Add print styles - hide everything except print container during print
const printStyles = document.createElement("style");
printStyles.id = "dedocument-print-styles";
printStyles.textContent = `
@@ -628,8 +627,11 @@ export class DeDocumentViewer extends DeesElement {
}
.dedocument-print-container {
position: static !important;
left: auto !important;
width: auto !important;
height: auto !important;
visibility: visible !important;
pointer-events: auto !important;
}
dedocument-dedocument {
display: block !important;
@@ -655,24 +657,26 @@ export class DeDocumentViewer extends DeesElement {
// Wait for the document to render
await new Promise((resolve) => setTimeout(resolve, 500));
// Trigger print
window.print();
// Clean up after print dialog closes
// Cleanup function
const cleanup = () => {
printContainer.remove();
printStyles.remove();
if (document.body.contains(printContainer)) {
printContainer.remove();
}
if (document.head.contains(printStyles)) {
printStyles.remove();
}
window.removeEventListener("afterprint", cleanup);
};
// Listen for print dialog close
window.addEventListener("afterprint", cleanup);
// Fallback cleanup after a delay (in case afterprint doesn't fire)
setTimeout(() => {
if (document.body.contains(printContainer)) {
cleanup();
}
}, 60000);
// Trigger print
window.print();
// Fallback: also clean up immediately after print() returns
// (some browsers return from print() after dialog closes)
setTimeout(cleanup, 100);
}
private calculateFitWidth(): void {