Eu utilizei recentemente um sistema em react quando estava seguindo as aulas do NLW return da rockeatseat que pode ser que funcione no seu projeto, pra isso usamos a biblioteca 'html2canvas', a vantagem é que convertemos ela para uma imagem base64 que pode ser usada para armazenar em banco de dados e tal, por ser uma imagem em formato de texto
const canvas = await html2canvas(document.querySelector('html')!);
const base64image = await canvas.toDataURL('image/png');