@@ -7,16 +7,18 @@ export type RenderOptions = {
77 viewport : puppeteer . Viewport ;
88 waitUntil : puppeteer . WaitForOptions [ 'waitUntil' ] ;
99 pdf : puppeteer . PDFOptions ;
10+ image : puppeteer . ScreenshotOptions ;
1011} ;
1112
1213const defaultOptions : RenderOptions = {
1314 emulateScreenMedia : true ,
1415 viewport : { width : 1600 , height : 1200 } ,
1516 waitUntil : 'networkidle2' ,
1617 pdf : { format : 'a4' , printBackground : true } ,
18+ image : { } ,
1719} ;
1820
19- const render = async ( html : string , customOptions ?: Partial < RenderOptions > | null ) => {
21+ export const renderPdf = async ( html : string , customOptions ?: Partial < RenderOptions > | null ) => {
2022 const options = merge ( defaultOptions , customOptions ) ;
2123
2224 // start browser
@@ -57,4 +59,43 @@ const render = async (html: string, customOptions?: Partial<RenderOptions> | nul
5759 return pdf ;
5860} ;
5961
60- export default render ;
62+ export const renderImage = async ( html : string , customOptions ?: Partial < RenderOptions > | null ) => {
63+ const options = merge ( defaultOptions , customOptions ) ;
64+
65+ // start browser
66+ const browser = await getBrowser ( ) ;
67+ // start page
68+ const page = await browser . newPage ( ) ;
69+
70+ // print on console
71+ page . on ( 'console' , ( ...messages ) => console . info ( 'Console logs:' , ...messages ) ) ;
72+
73+ // print on error
74+ page . on ( 'error' , err => {
75+ console . error ( `Error event emitted: ${ err } ` ) ;
76+ console . error ( err . stack ) ;
77+ browser . close ( ) ;
78+ } ) ;
79+
80+ let image : Buffer ;
81+
82+ try {
83+ // set view port
84+ await page . setViewport ( options . viewport ) ;
85+
86+ if ( options . emulateScreenMedia ) {
87+ await page . emulateMediaType ( 'screen' ) ;
88+ }
89+
90+ // set html content
91+ await page . setContent ( html , { waitUntil : options . waitUntil } ) ;
92+
93+ // render to image
94+ image = ( await page . screenshot ( options . image ) ) as Buffer ;
95+ } finally {
96+ // close the page
97+ await page . close ( ) ;
98+ }
99+
100+ return image ;
101+ } ;
0 commit comments