From 5e8abaa5b4ec88c9c8ff8f1060b45cb18be8703f Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Wed, 29 May 2019 19:49:23 +0200 Subject: [PATCH] fix(core): update --- test/test.ts | 5 +++++ ts/smartpdf.classes.smartpdf.ts | 34 +++++++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/test/test.ts b/test/test.ts index 132de2f..8988f7b 100644 --- a/test/test.ts +++ b/test/test.ts @@ -24,6 +24,11 @@ tap.test('should create a pdf from website as single page PDF', async () => { await testSmartPdf.getFullWebsiteAsSinglePdf('https://maintainedby.lossless.com'); }); +tap.test('should create a valid PDFResult', async () => { + const pdfResult = await testSmartPdf.getFullWebsiteAsSinglePdf('https://maintainedby.lossless.com'); + expect(pdfResult.buffer).to.be.instanceOf(Buffer); +}); + tap.test('should be able to close properly', async () => { await testSmartPdf.stop(); }); diff --git a/ts/smartpdf.classes.smartpdf.ts b/ts/smartpdf.classes.smartpdf.ts index d09eff2..866c0ad 100644 --- a/ts/smartpdf.classes.smartpdf.ts +++ b/ts/smartpdf.classes.smartpdf.ts @@ -5,6 +5,12 @@ import { PdfCandidate } from './smartpdf.classes.pdfcandidate'; declare const document; +export interface IPdfResult { + name: string, + id: string, + buffer: Buffer; +} + export class SmartPdf { htmlServerInstance: Server; serverPort: number; @@ -47,7 +53,7 @@ export class SmartPdf { /** * returns a pdf for a given html string; */ - async getPdfForHtmlString(htmlStringArg: string) { + async getPdfForHtmlString(htmlStringArg: string): Promise { await this._readyDeferred.promise; const pdfCandidate = new PdfCandidate(htmlStringArg); this._candidates[pdfCandidate.pdfId] = pdfCandidate; @@ -63,29 +69,37 @@ export class SmartPdf { console.log(`id security check passed for ${pdfCandidate.pdfId}`); } - await page.pdf({ - path: plugins.path.join(paths.pdfDir, `${pdfCandidate.pdfId}.pdf`), + const pdfBuffer = await page.pdf({ format: 'A4' }); await page.close(); delete this._candidates[pdfCandidate.pdfId]; pdfCandidate.doneDeferred.resolve(); await pdfCandidate.doneDeferred.promise; + return { + id: pdfCandidate.pdfId, + name: `${pdfCandidate.pdfId}.js`, + buffer: pdfBuffer + } } - async getPdfForWebsite(websiteUrl: string) { + async getPdfForWebsite(websiteUrl: string): Promise { const page = await this.headlessBrowser.newPage(); page.emulateMedia('screen'); const response = await page.goto(websiteUrl, { waitUntil: 'networkidle2' }); const pdfId = plugins.smartunique.shortId(); - await page.pdf({ - path: plugins.path.join(paths.pdfDir, `${pdfId}.pdf`), + const pdfBuffer = await page.pdf({ format: 'A4', printBackground: true, displayHeaderFooter: false, preferCSSPageSize: true }); await page.close(); + return { + id: pdfId, + name: `${pdfId}.js`, + buffer: pdfBuffer + } } async getFullWebsiteAsSinglePdf(websiteUrl: string) { @@ -100,8 +114,7 @@ export class SmartPdf { documentWidth: document.width }; }); - await page.pdf({ - path: plugins.path.join(paths.pdfDir, `${pdfId}.pdf`), + const pdfBuffer = await page.pdf({ height: documentWidth, width: documentWidth, printBackground: true, @@ -109,5 +122,10 @@ export class SmartPdf { preferCSSPageSize: true }); await page.close(); + return { + id: pdfId, + name: `${pdfId}.js`, + buffer: pdfBuffer + } } }