El Atributo ONAFTERPRINT

Se activa después de que un usuario imprime un documento o cierra la vista previa de impresión.
El atributo onafterprint es un evento de JavaScript que se activa después de que un usuario imprime un documento o cierra la vista previa de impresión. Es útil para ejecutar acciones tras completar una operación de impresión, como restaurar elementos de la interfaz, registrar actividad o mostrar mensajes al usuario.
¿Cómo funciona?
-
Disparador: Se ejecuta cuando:
-
El usuario imprime el documento (acepta la impresión).
-
El usuario cierra el cuadro de diálogo de impresión o la vista previa (incluso si cancela).
-
-
Contexto: Funciona principalmente en el objeto
window, pero puede usarse como atributo HTML en<body>o<iframe>.
Sintaxis básica
Como atributo HTML:
<body onafterprint="miFuncion()"> <!-- Contenido --> </body>
Con JavaScript (recomendado):
window.onafterprint = function() {
console.log("La impresión ha finalizado");
};
// O usando addEventListener:
window.addEventListener("afterprint", function() {
// Acciones...
});
Ejemplos prácticos
Ejemplo 1: Mostrar un mensaje al usuario
<script>
window.onafterprint = () => {
alert("¡Documento impreso con éxito!");
};
</script>
Ejemplo 2: Restaurar estilos después de imprimir
<style>
.no-print { display: block; }
@media print {
.no-print { display: none; }
}
</style>
<script>
window.onbeforeprint = () => {
document.title = "Documento para imprimir";
};
window.onafterprint = () => {
document.title = "Documento normal";
document.querySelector(".no-print").style.color = "green";
};
</script>
Diferencias clave: onafterprint vs onbeforeprint
| Evento | Momento de activación | Casos de uso típicos |
|---|---|---|
onbeforeprint |
Al abrirse el cuadro de impresión | Preparar el documento para imprimir |
onafterprint |
Al cerrarse el cuadro de impresión | Restaurar cambios, registrar logs |
Casos de uso comunes
Registro de actividad:
window.onafterprint = () => {
console.log("Impresión solicitada a las:", new Date().toLocaleTimeString());
};
Revertir cambios visuales:
let originalBackground;
window.onbeforeprint = () => {
originalBackground = document.body.style.background;
document.body.style.background = "white";
};
window.onafterprint = () => {
document.body.style.background = originalBackground;
};
Mostrar/ocultar elementos:
<div id="mensaje-postimpresion" style="display: none;">
¿Necesitas otra copia? <button onclick="window.print()">Reimprimir</button>
</div>
<script>
window.onafterprint = () => {
document.getElementById("mensaje-postimpresion").style.display = "block";
};
</script>
Mejores prácticas
Usar addEventListener:
Para separar el HTML del JavaScript y manejar múltiples listeners:
window.addEventListener("afterprint", manejarPostImpresion);
Combinar con onbeforeprint:
Para un flujo completo:
window.onbeforeprint = () => { /* Pre-impresión */ };
window.onafterprint = () => { /* Post-impresión */ };
No asumir que el usuario imprimió:
El evento se activa incluso si cancela.
Evitar operaciones bloqueantes:
No uses alert() o confirm() directamente, ya que pueden resultar molestos.
Errores comunes
<!-- MAL: Usarlo en elementos no soportados -->
<div onafterprint="..."></div> <!-- No funciona -->
<!-- CONFUSIÓN: Esperar que distinga entre impresión y cancelación -->
<script>
window.onafterprint = () => {
// ¡Se ejecutará tanto si imprime como si cancela!
};
</script>
<!-- OLVIDAR compatibilidad -->
<!-- Algunos navegadores no lo soportan en móviles -->
Compatibilidad
| Navegador | Soporte | Notas |
|---|---|---|
| Chrome | ✅ Sí | Versión 63+ |
| Firefox | ✅ Sí | Versión 6+ |
| Safari | ⚠️ Parcial | Solo en escritorio |
| Edge | ✅ Sí | Versión 12+ |
| Móviles | ⚠️ Limitado | No soportado en muchos navegadores |
Alternativas para mayor control
Si necesitas detectar si realmente se realizó la impresión, considera:
API de Impresión nativa:
const mediaQuery = window.matchMedia('print');
mediaQuery.addListener((mql) => {
if (!mql.matches) {
console.log("Impresión completada");
}
});
Conclusión
El atributo onafterprint es útil para:
- Restaurar cambios visuales después de imprimir.
- Realizar seguimiento de actividades de impresión.
- Mejorar la experiencia del usuario con feedback.
Recuerda:
- No es 100% confiable: Algunos navegadores no lo implementan consistentemente.
- Siempre prueba: Verifica el comportamiento en tus navegadores objetivo.
- Combínalo con
onbeforeprint: Para un manejo completo del ciclo de impresión.
¡Ahora puedes controlar las acciones post-impresión como un profesional!