@@ -5,7 +5,7 @@ const path = require('path')
55const argv = require ( 'yargs' ) . argv
66const { v4 : uuidv4 } = require ( 'uuid' )
77
8- const pdf = require ( 'html-pdf ' )
8+ const puppeteer = require ( 'puppeteer ' )
99
1010const MainPdfWriter = require (
1111 'bfx-report/workers/loc.api/generate-report-file/pdf-writer'
@@ -46,6 +46,7 @@ class PdfWriter extends MainPdfWriter {
4646 this . processMessageManager = processMessageManager
4747
4848 this . isElectronjsEnv = argv . isElectronjsEnv
49+ this . shouldZoomBeAdjusted = false
4950
5051 this . addTemplates ( {
5152 fileNames : TEMPLATE_FILE_NAMES ,
@@ -61,9 +62,7 @@ class PdfWriter extends MainPdfWriter {
6162 const {
6263 template = 'No data' ,
6364 format = 'portrait' ,
64- orientation = 'Letter' ,
65- headerHeight = '65mm' ,
66- footerHeight = '28mm'
65+ orientation = 'Letter'
6766 } = args ?? { }
6867
6968 if ( this . isElectronjsEnv ) {
@@ -74,30 +73,29 @@ class PdfWriter extends MainPdfWriter {
7473 } )
7574 }
7675
77- const headerOpt = headerHeight
78- ? { header : { height : headerHeight } }
79- : { }
80- const footerOpt = footerHeight
81- ? { footer : { height : footerHeight } }
82- : { }
83-
84- return await new Promise ( ( resolve , reject ) => {
85- pdf . create ( template , {
86- ...headerOpt ,
87- ...footerOpt ,
88-
89- format,
90- orientation,
91- type : 'pdf' ,
92- timeout : 90000 ,
93- childProcessOptions : {
94- env : { OPENSSL_CONF : '/dev/null' }
95- }
96- } ) . toBuffer ( ( error , buffer ) => {
97- if ( error ) return reject ( error )
98- resolve ( buffer )
99- } )
76+ const browser = await puppeteer . launch ( {
77+ args : [ '--no-sandbox' , '--disable-gpu' ]
78+ } )
79+ const page = await browser . newPage ( )
80+ await page . setContent ( template , {
81+ waitUntil : 'domcontentloaded'
10082 } )
83+ await page . emulateMediaType ( 'print' )
84+ const u8ArrayPdf = await page . pdf ( {
85+ landscape : format !== 'portrait' ,
86+ format : orientation ,
87+ margins : {
88+ top : 0 ,
89+ bottom : 0 ,
90+ left : 0 ,
91+ right : 0
92+ } ,
93+ displayHeaderFooter : true ,
94+ footerTemplate : this . #getFooterTemplate( args )
95+ } )
96+ await browser . close ( )
97+
98+ return Buffer . from ( u8ArrayPdf )
10199 }
102100
103101 async createPDFBufferUnderElectron ( args ) {
@@ -145,6 +143,21 @@ class PdfWriter extends MainPdfWriter {
145143
146144 return Buffer . from ( buffer )
147145 }
146+
147+ #getFooterTemplate ( args ) {
148+ const translate = this . getTranslator ( args ?. language ?? 'en' )
149+
150+ return `\
151+ <span style="
152+ position: absolute;
153+ right: 10px;
154+ bottom: 10px;
155+ font-weight: 400;
156+ font-size: 8px;
157+ ">
158+ ${ translate ( 'Page' , 'template.page' ) } <span class=pageNumber></span> ${ translate ( 'from' , 'template.from' ) } <span class=totalPages></span>
159+ </span>`
160+ }
148161}
149162
150163decorateInjectable ( PdfWriter , depsTypes )
0 commit comments