aqui você pode ver a compatibilidade da função window.print() ela é compatível com todos os navegadores em todos os dispositivos.
https://developer.mozilla.org/en-US/docs/Web/API/Window/print#browser_compatibility
é claro que pode existir casos em que ela não é a melhor opção, mas deve ser pensada como primeira escolha pois é a mais simples.
mesmo no caso do e-mail, ele pode conter um link que abre o navegador e gera o pdf. até porque isso é muito melhor e mais simples do que ter que gerar e anexar um arquivo.
as vezes a resposta mais simples é a melhor mesmo! se um dispositivo for tão antigo a ponto não suportar essa api ele provavelmente não lida bem com pdf também.
eu já precisei fazer um sistema de envio de certificados em pdf por e-mail e a melhor solução foi enviando o link pra uma página que usava a função print para salvarem o pdf. ninguém reclamou, foi usado em android, iOS e computadores. foi uma solução mágica, pois um sistema simples de envio de certificado foi simplesmente feito em php, em vez de querer complicar de mais e gerar o PDF no backend pra depois enviar.