Tengo una página de reacción bastante compleja, con elementos de lienzo, svg's, draftjs (editor WISIYG) y componentes MUI regulares. Quiero exportar esta página como pdf. La opción window.print es demasiado rígida y crea problemas cuando el usuario va más allá de una página en el pdf con su contenido WYSIWYG. No quiero convertir el contenido WYSIWYG en una imagen y luego ponerlo en el pdf, ya que es imposible crear una interfaz de usuario agradable en el pdf con esta opción. ¿Existe una forma "fácil" de exportar dicha página? Alternativamente, si alguien sabe cómo exportar el contenido como un archivo HTML, también sería genial.
Querrás renderizar el html como PDF. En el nodo, la mejor manera de hacerlo es usar un navegador sin interfaz gráfica para representar el html y usar esas herramientas para exportarlo como PDF.
Puppeteer es un cromo sin cabeza que puede usar https://github.com/puppeteer/puppeteer . Deberá representar su página de reacción como HTML y pasársela al titiritero:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://news.ycombinator.com', { waitUntil: 'networkidle2', }); await page.pdf({ path: 'hn.pdf', format: 'a4' }); await browser.close(); })();Hay algunas bibliotecas que envuelven esta funcionalidad https://www.npmjs.com/package/html-pdf-node .
He usado la representación de PDF basada en PhantomJS en el pasado, y le recomiendo que use Puppeteer.