@spinajs/templates-pdf 2.0.434 → 2.0.436
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/BasePdfTemplate.d.ts +82 -0
- package/lib/cjs/BasePdfTemplate.d.ts.map +1 -0
- package/lib/cjs/BasePdfTemplate.js +270 -0
- package/lib/cjs/BasePdfTemplate.js.map +1 -0
- package/lib/cjs/PdfRenderer.d.ts +20 -0
- package/lib/cjs/PdfRenderer.d.ts.map +1 -0
- package/lib/cjs/PdfRenderer.js +54 -0
- package/lib/cjs/PdfRenderer.js.map +1 -0
- package/lib/cjs/PdfToImageRenderer.d.ts +31 -0
- package/lib/cjs/PdfToImageRenderer.d.ts.map +1 -0
- package/lib/cjs/PdfToImageRenderer.js +65 -0
- package/lib/cjs/PdfToImageRenderer.js.map +1 -0
- package/lib/cjs/index.d.ts +5 -56
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +6 -257
- package/lib/cjs/index.js.map +1 -1
- package/lib/mjs/BasePdfTemplate.d.ts +82 -0
- package/lib/mjs/BasePdfTemplate.d.ts.map +1 -0
- package/lib/mjs/BasePdfTemplate.js +263 -0
- package/lib/mjs/BasePdfTemplate.js.map +1 -0
- package/lib/mjs/PdfRenderer.d.ts +20 -0
- package/lib/mjs/PdfRenderer.d.ts.map +1 -0
- package/lib/mjs/PdfRenderer.js +51 -0
- package/lib/mjs/PdfRenderer.js.map +1 -0
- package/lib/mjs/PdfToImageRenderer.d.ts +31 -0
- package/lib/mjs/PdfToImageRenderer.d.ts.map +1 -0
- package/lib/mjs/PdfToImageRenderer.js +62 -0
- package/lib/mjs/PdfToImageRenderer.js.map +1 -0
- package/lib/mjs/index.d.ts +5 -56
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +8 -256
- package/lib/mjs/index.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +6 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasePdfTemplate.js","sourceRoot":"","sources":["../../src/BasePdfTemplate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PDFOptions } from 'puppeteer';
|
|
2
|
+
import { IInstanceCheck } from '@spinajs/di';
|
|
3
|
+
import { BasePdfTemplate, RenderContext } from './BasePdfTemplate.js';
|
|
4
|
+
import '@spinajs/templates-pug';
|
|
5
|
+
/**
|
|
6
|
+
* PDF renderer that generates PDF files from templates
|
|
7
|
+
*/
|
|
8
|
+
export declare class PdfRenderer extends BasePdfTemplate implements IInstanceCheck {
|
|
9
|
+
protected pdfOptions: PDFOptions;
|
|
10
|
+
get Type(): string;
|
|
11
|
+
get Extension(): string;
|
|
12
|
+
constructor(pdfOptions: PDFOptions);
|
|
13
|
+
__checkInstance__(creationOptions: any): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Perform PDF rendering
|
|
16
|
+
*/
|
|
17
|
+
protected performRender(context: RenderContext, filePath: string): Promise<void>;
|
|
18
|
+
render(_templateName: string, _model: unknown, _language?: string): Promise<string>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=PdfRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdfRenderer.d.ts","sourceRoot":"","sources":["../../src/PdfRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAgC,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,wBAAwB,CAAC;AAGhC;;GAEG;AACH,qBAEa,WAAY,SAAQ,eAAgB,YAAW,cAAc;IAS5D,SAAS,CAAC,UAAU,EAAE,UAAU;IAR5C,IAAW,IAAI,WAEd;IAED,IAAW,SAAS,WAEnB;gBAEqB,UAAU,EAAE,UAAU;IAI5C,iBAAiB,CAAC,eAAe,EAAE,GAAG,GAAG,OAAO;IAIhD;;OAEG;cACa,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzE,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGjG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { NotSupported } from '@spinajs/exceptions';
|
|
11
|
+
import { Injectable, PerInstanceCheck } from '@spinajs/di';
|
|
12
|
+
import { BasePdfTemplate } from './BasePdfTemplate.js';
|
|
13
|
+
import '@spinajs/templates-pug';
|
|
14
|
+
import { TemplateRenderer } from '@spinajs/templates';
|
|
15
|
+
/**
|
|
16
|
+
* PDF renderer that generates PDF files from templates
|
|
17
|
+
*/
|
|
18
|
+
let PdfRenderer = class PdfRenderer extends BasePdfTemplate {
|
|
19
|
+
get Type() {
|
|
20
|
+
return 'pdf';
|
|
21
|
+
}
|
|
22
|
+
get Extension() {
|
|
23
|
+
return '.pdf';
|
|
24
|
+
}
|
|
25
|
+
constructor(pdfOptions) {
|
|
26
|
+
super();
|
|
27
|
+
this.pdfOptions = pdfOptions;
|
|
28
|
+
}
|
|
29
|
+
__checkInstance__(creationOptions) {
|
|
30
|
+
return JSON.stringify(this.pdfOptions) === JSON.stringify(creationOptions);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Perform PDF rendering
|
|
34
|
+
*/
|
|
35
|
+
async performRender(context, filePath) {
|
|
36
|
+
await context.page.pdf({
|
|
37
|
+
path: filePath,
|
|
38
|
+
...this.pdfOptions,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
async render(_templateName, _model, _language) {
|
|
42
|
+
throw new NotSupported('cannot render pdf template to string');
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
PdfRenderer = __decorate([
|
|
46
|
+
Injectable(TemplateRenderer),
|
|
47
|
+
PerInstanceCheck(),
|
|
48
|
+
__metadata("design:paramtypes", [Object])
|
|
49
|
+
], PdfRenderer);
|
|
50
|
+
export { PdfRenderer };
|
|
51
|
+
//# sourceMappingURL=PdfRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdfRenderer.js","sourceRoot":"","sources":["../../src/PdfRenderer.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAkB,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAiB,MAAM,sBAAsB,CAAC;AAEtE,OAAO,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;GAEG;AAGI,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,eAAe;IAC9C,IAAW,IAAI;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,YAAsB,UAAsB;QAC1C,KAAK,EAAE,CAAC;QADY,eAAU,GAAV,UAAU,CAAY;IAE5C,CAAC;IAED,iBAAiB,CAAC,eAAoB;QACpC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC7E,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,aAAa,CAAC,OAAsB,EAAE,QAAgB;QACpE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACrB,IAAI,EAAE,QAAQ;YACd,GAAG,IAAI,CAAC,UAAU;SACnB,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,aAAqB,EAAE,MAAe,EAAE,SAAkB;QAC5E,MAAM,IAAI,YAAY,CAAC,sCAAsC,CAAC,CAAC;IACjE,CAAC;CACF,CAAA;AA9BY,WAAW;IAFvB,UAAU,CAAC,gBAAgB,CAAC;IAC5B,gBAAgB,EAAE;;GACN,WAAW,CA8BvB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { PDFOptions, ScreenshotOptions } from 'puppeteer';
|
|
2
|
+
import { IInstanceCheck } from '@spinajs/di';
|
|
3
|
+
import { BasePdfTemplate, RenderContext } from './BasePdfTemplate.js';
|
|
4
|
+
import '@spinajs/templates-pug';
|
|
5
|
+
export interface PdfToImageOptions {
|
|
6
|
+
/**
|
|
7
|
+
* PDF generation options (used as intermediate step)
|
|
8
|
+
*/
|
|
9
|
+
pdfOptions?: PDFOptions;
|
|
10
|
+
/**
|
|
11
|
+
* Screenshot/image generation options
|
|
12
|
+
*/
|
|
13
|
+
screenshotOptions: ScreenshotOptions;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* PDF-to-Image renderer that generates images from PDF templates
|
|
17
|
+
* First renders to PDF, then captures as image
|
|
18
|
+
*/
|
|
19
|
+
export declare class PdfToImageRenderer extends BasePdfTemplate implements IInstanceCheck {
|
|
20
|
+
protected imageOptions: PdfToImageOptions;
|
|
21
|
+
get Type(): string;
|
|
22
|
+
get Extension(): string;
|
|
23
|
+
constructor(imageOptions: PdfToImageOptions);
|
|
24
|
+
__checkInstance__(creationOptions: any): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Perform image rendering from PDF
|
|
27
|
+
*/
|
|
28
|
+
protected performRender(context: RenderContext, filePath: string): Promise<void>;
|
|
29
|
+
render(_templateName: string, _model: unknown, _language?: string): Promise<string>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=PdfToImageRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdfToImageRenderer.d.ts","sourceRoot":"","sources":["../../src/PdfToImageRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAgC,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGtE,OAAO,wBAAwB,CAAC;AAGhC,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB;;OAEG;IACH,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED;;;GAGG;AACH,qBAEa,kBAAmB,SAAQ,eAAgB,YAAW,cAAc;IAUnE,SAAS,CAAC,YAAY,EAAE,iBAAiB;IATrD,IAAW,IAAI,WAEd;IAED,IAAW,SAAS,WAGnB;gBAEqB,YAAY,EAAE,iBAAiB;IAIrD,iBAAiB,CAAC,eAAe,EAAE,GAAG,GAAG,OAAO;IAIhD;;OAEG;cACa,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBzE,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGjG"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { NotSupported } from '@spinajs/exceptions';
|
|
11
|
+
import { Injectable, PerInstanceCheck } from '@spinajs/di';
|
|
12
|
+
import { BasePdfTemplate } from './BasePdfTemplate.js';
|
|
13
|
+
import { extname } from 'path';
|
|
14
|
+
import '@spinajs/templates-pug';
|
|
15
|
+
import { TemplateRenderer } from '@spinajs/templates';
|
|
16
|
+
/**
|
|
17
|
+
* PDF-to-Image renderer that generates images from PDF templates
|
|
18
|
+
* First renders to PDF, then captures as image
|
|
19
|
+
*/
|
|
20
|
+
let PdfToImageRenderer = class PdfToImageRenderer extends BasePdfTemplate {
|
|
21
|
+
get Type() {
|
|
22
|
+
return 'pdf-image';
|
|
23
|
+
}
|
|
24
|
+
get Extension() {
|
|
25
|
+
const type = this.imageOptions.screenshotOptions.type || 'png';
|
|
26
|
+
return `.${type}`;
|
|
27
|
+
}
|
|
28
|
+
constructor(imageOptions) {
|
|
29
|
+
super();
|
|
30
|
+
this.imageOptions = imageOptions;
|
|
31
|
+
}
|
|
32
|
+
__checkInstance__(creationOptions) {
|
|
33
|
+
return JSON.stringify(this.imageOptions) === JSON.stringify(creationOptions);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Perform image rendering from PDF
|
|
37
|
+
*/
|
|
38
|
+
async performRender(context, filePath) {
|
|
39
|
+
// Determine image type from file extension or options
|
|
40
|
+
const fileExt = extname(filePath).toLowerCase().slice(1);
|
|
41
|
+
const imageType = (fileExt === 'jpg' || fileExt === 'jpeg' || fileExt === 'png' || fileExt === 'webp')
|
|
42
|
+
? fileExt
|
|
43
|
+
: this.imageOptions.screenshotOptions.type || 'png';
|
|
44
|
+
// Take screenshot
|
|
45
|
+
await context.page.screenshot({
|
|
46
|
+
path: filePath,
|
|
47
|
+
type: imageType,
|
|
48
|
+
...this.imageOptions.screenshotOptions,
|
|
49
|
+
});
|
|
50
|
+
this.Log.trace(`Generated image from PDF template: ${filePath}`);
|
|
51
|
+
}
|
|
52
|
+
async render(_templateName, _model, _language) {
|
|
53
|
+
throw new NotSupported('cannot render pdf-image template to string');
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
PdfToImageRenderer = __decorate([
|
|
57
|
+
Injectable(TemplateRenderer),
|
|
58
|
+
PerInstanceCheck(),
|
|
59
|
+
__metadata("design:paramtypes", [Object])
|
|
60
|
+
], PdfToImageRenderer);
|
|
61
|
+
export { PdfToImageRenderer };
|
|
62
|
+
//# sourceMappingURL=PdfToImageRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PdfToImageRenderer.js","sourceRoot":"","sources":["../../src/PdfToImageRenderer.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAkB,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAiB,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AActD;;;GAGG;AAGI,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,eAAe;IACrD,IAAW,IAAI;QACb,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAW,SAAS;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,IAAI,KAAK,CAAC;QAC/D,OAAO,IAAI,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,YAAsB,YAA+B;QACnD,KAAK,EAAE,CAAC;QADY,iBAAY,GAAZ,YAAY,CAAmB;IAErD,CAAC;IAED,iBAAiB,CAAC,eAAoB;QACpC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,aAAa,CAAC,OAAsB,EAAE,QAAgB;QACpE,sDAAsD;QACtD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,MAAM,CAAC;YACpG,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,IAAI,KAAK,CAAC;QAEtD,kBAAkB;QAClB,MAAM,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5B,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAoC;YAC1C,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB;SACvC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;IACnE,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,aAAqB,EAAE,MAAe,EAAE,SAAkB;QAC5E,MAAM,IAAI,YAAY,CAAC,4CAA4C,CAAC,CAAC;IACvE,CAAC;CACF,CAAA;AAzCY,kBAAkB;IAF9B,UAAU,CAAC,gBAAgB,CAAC;IAC5B,gBAAgB,EAAE;;GACN,kBAAkB,CAyC9B"}
|
package/lib/mjs/index.d.ts
CHANGED
|
@@ -1,67 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Page, PDFOptions } from 'puppeteer';
|
|
2
|
+
import { PuppeteerRenderer, IPuppeteerRendererOptions } from '@spinajs/templates-puppeteer';
|
|
3
3
|
import { IInstanceCheck } from '@spinajs/di';
|
|
4
|
-
|
|
5
|
-
import * as http from 'http';
|
|
6
|
-
import '@spinajs/templates-pug';
|
|
7
|
-
interface IPdfRendererOptions {
|
|
8
|
-
static: {
|
|
9
|
-
portRange: number[];
|
|
10
|
-
};
|
|
11
|
-
args: LaunchOptions;
|
|
12
|
-
/**
|
|
13
|
-
* Optional path to Chrome/Chromium executable.
|
|
14
|
-
* Useful when running in environments where Puppeteer cannot download Chromium.
|
|
15
|
-
* If provided, overrides args.executablePath.
|
|
16
|
-
*/
|
|
17
|
-
executablePath?: string;
|
|
18
|
-
renderDurationWarning: number;
|
|
19
|
-
navigationTimeout?: number;
|
|
20
|
-
renderTimeout?: number;
|
|
21
|
-
/**
|
|
22
|
-
* Debug options
|
|
23
|
-
*/
|
|
24
|
-
debug?: {
|
|
25
|
-
/**
|
|
26
|
-
* If true, browser will remain open after rendering for inspection
|
|
27
|
-
* Use it with headless: false in args to see the browser window ( puppetter.launch args )
|
|
28
|
-
*/
|
|
29
|
-
close?: boolean;
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
export declare class PdfRenderer extends TemplateRenderer implements IInstanceCheck {
|
|
4
|
+
export declare class PdfRenderer extends PuppeteerRenderer implements IInstanceCheck {
|
|
33
5
|
protected pdfOptions: PDFOptions;
|
|
34
6
|
/**
|
|
35
7
|
* General options from configuration
|
|
36
8
|
*/
|
|
37
|
-
protected Options:
|
|
38
|
-
protected Log: Log;
|
|
39
|
-
protected TemplatingService: Templates;
|
|
40
|
-
protected static USED_PORTS: number[];
|
|
9
|
+
protected Options: IPuppeteerRendererOptions;
|
|
41
10
|
get Type(): string;
|
|
42
11
|
get Extension(): string;
|
|
43
12
|
constructor(pdfOptions: PDFOptions);
|
|
44
13
|
__checkInstance__(creationOptions: any): boolean;
|
|
45
|
-
|
|
46
|
-
render(_templateName: string, _model: unknown, _language?: string): Promise<string>;
|
|
47
|
-
protected compile(_path: string): Promise<void>;
|
|
48
|
-
protected runLocalServer(basePath: string): Promise<http.Server>;
|
|
49
|
-
/**
|
|
50
|
-
* Enhanced browser cleanup with error handling
|
|
51
|
-
*/
|
|
52
|
-
private safeBrowserCleanup;
|
|
53
|
-
/**
|
|
54
|
-
* Force close browser with process termination
|
|
55
|
-
*/
|
|
56
|
-
private forceCloseBrowser;
|
|
57
|
-
/**
|
|
58
|
-
* Enhanced server cleanup with timeout
|
|
59
|
-
*/
|
|
60
|
-
private safeServerCleanup;
|
|
61
|
-
/**
|
|
62
|
-
* Add page event listeners with cleanup function
|
|
63
|
-
*/
|
|
64
|
-
private addPageEventListeners;
|
|
14
|
+
protected performRender(page: Page, filePath: string): Promise<void>;
|
|
65
15
|
}
|
|
66
|
-
export {};
|
|
67
16
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/mjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAG5F,OAAO,EAAE,cAAc,EAAgC,MAAM,aAAa,CAAC;AAE3E,qBAEa,WAAY,SAAQ,iBAAkB,YAAW,cAAc;IAe9D,SAAS,CAAC,UAAU,EAAE,UAAU;IAd5C;;OAEG;IAEH,SAAS,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAE7C,IAAW,IAAI,WAEd;IAED,IAAW,SAAS,WAEnB;gBAEqB,UAAU,EAAE,UAAU;IAI5C,iBAAiB,CAAC,eAAe,EAAE,GAAG,GAAG,OAAO;cAIhC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM3E"}
|
package/lib/mjs/index.js
CHANGED
|
@@ -7,18 +7,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { TemplateRenderer, Templates } from '@spinajs/templates';
|
|
10
|
+
import { PuppeteerRenderer } from '@spinajs/templates-puppeteer';
|
|
11
|
+
import { TemplateRenderer } from '@spinajs/templates';
|
|
13
12
|
import { Config } from '@spinajs/configuration';
|
|
14
|
-
import { Injectable,
|
|
15
|
-
|
|
16
|
-
import { Log, Logger } from '@spinajs/log';
|
|
17
|
-
import Express from 'express';
|
|
18
|
-
import cors from 'cors';
|
|
19
|
-
import '@spinajs/templates-pug';
|
|
20
|
-
import _ from 'lodash';
|
|
21
|
-
let PdfRenderer = class PdfRenderer extends TemplateRenderer {
|
|
13
|
+
import { Injectable, PerInstanceCheck } from '@spinajs/di';
|
|
14
|
+
let PdfRenderer = class PdfRenderer extends PuppeteerRenderer {
|
|
22
15
|
get Type() {
|
|
23
16
|
return 'pdf';
|
|
24
17
|
}
|
|
@@ -32,258 +25,17 @@ let PdfRenderer = class PdfRenderer extends TemplateRenderer {
|
|
|
32
25
|
__checkInstance__(creationOptions) {
|
|
33
26
|
return JSON.stringify(this.pdfOptions) === JSON.stringify(creationOptions);
|
|
34
27
|
}
|
|
35
|
-
async
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
this.Log.timeStart(`pdf-template-rendering-${filePath}`);
|
|
40
|
-
this.Log.trace(`Rendering pdf template ${template} to file ${filePath}`);
|
|
41
|
-
const templateBasePath = dirname(template);
|
|
42
|
-
// fire up local http server for serving images etc
|
|
43
|
-
// becouse chromium prevents from reading local files when not
|
|
44
|
-
// rendering file with file:// protocol for security reasons
|
|
45
|
-
server = await this.runLocalServer(templateBasePath);
|
|
46
|
-
const httpPort = server.address().port;
|
|
47
|
-
const compiledTemplate = await this.TemplatingService.render(join(templateBasePath, basename(template, '.pdf')) + '.pug', {
|
|
48
|
-
// add template temporary server port
|
|
49
|
-
// so we can use it to render images in template
|
|
50
|
-
__http_template_port__: httpPort,
|
|
51
|
-
// for convinience add full url to local http server
|
|
52
|
-
__http_template_address__: `http://localhost:${httpPort}`,
|
|
53
|
-
...model,
|
|
54
|
-
}, language);
|
|
55
|
-
const launchOptions = {
|
|
56
|
-
...this.Options.args,
|
|
57
|
-
...(this.Options.executablePath && {
|
|
58
|
-
executablePath: this.Options.executablePath,
|
|
59
|
-
}),
|
|
60
|
-
};
|
|
61
|
-
browser = await puppeteer.launch(launchOptions);
|
|
62
|
-
const page = await browser.newPage();
|
|
63
|
-
// Skip timeouts in debug mode
|
|
64
|
-
if (!this.Options.debug?.close) {
|
|
65
|
-
page.setDefaultNavigationTimeout(this.Options.navigationTimeout || 30000); // Default 30s
|
|
66
|
-
page.setDefaultTimeout(this.Options.renderTimeout || 30000); // Default 30s
|
|
67
|
-
}
|
|
68
|
-
// Set up render timeout (skip in debug mode)
|
|
69
|
-
let renderTimeout;
|
|
70
|
-
if (!this.Options.debug?.close) {
|
|
71
|
-
const timeoutMs = this.Options.renderTimeout || 30000;
|
|
72
|
-
renderTimeout = setTimeout(async () => {
|
|
73
|
-
this.Log.warn(`PDF render timeout (${timeoutMs}ms) - forcing cleanup`);
|
|
74
|
-
try {
|
|
75
|
-
if (page)
|
|
76
|
-
await page.close().catch(() => { });
|
|
77
|
-
if (browser)
|
|
78
|
-
await this.forceCloseBrowser(browser);
|
|
79
|
-
}
|
|
80
|
-
catch (err) {
|
|
81
|
-
this.Log.error('Error during timeout cleanup:', err);
|
|
82
|
-
}
|
|
83
|
-
}, timeoutMs);
|
|
84
|
-
}
|
|
85
|
-
// Add event listeners with explicit cleanup tracking
|
|
86
|
-
const eventCleanup = this.addPageEventListeners(page);
|
|
87
|
-
try {
|
|
88
|
-
await page.setBypassCSP(true);
|
|
89
|
-
await page.setContent(compiledTemplate);
|
|
90
|
-
await page.pdf({
|
|
91
|
-
path: filePath,
|
|
92
|
-
...this.pdfOptions,
|
|
93
|
-
});
|
|
94
|
-
// Clear timeout on successful completion
|
|
95
|
-
if (renderTimeout) {
|
|
96
|
-
clearTimeout(renderTimeout);
|
|
97
|
-
renderTimeout = undefined;
|
|
98
|
-
}
|
|
99
|
-
// Clean up event listeners
|
|
100
|
-
eventCleanup();
|
|
101
|
-
}
|
|
102
|
-
catch (renderError) {
|
|
103
|
-
// Clear timeout on error
|
|
104
|
-
if (renderTimeout) {
|
|
105
|
-
clearTimeout(renderTimeout);
|
|
106
|
-
renderTimeout = undefined;
|
|
107
|
-
}
|
|
108
|
-
this.Log.error(renderError, `Error during PDF rendering for template ${template}`);
|
|
109
|
-
throw renderError;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
catch (err) {
|
|
113
|
-
this.Log.error(err, `Error rendering pdf template ${template} to file ${filePath}`);
|
|
114
|
-
throw err;
|
|
115
|
-
}
|
|
116
|
-
finally {
|
|
117
|
-
const duration = this.Log.timeEnd(`pdf-template-rendering-${filePath}`);
|
|
118
|
-
this.Log.trace(`Ended rendering pdf template ${template} to file ${filePath}, took: ${duration}ms`);
|
|
119
|
-
if (duration > this.Options.renderDurationWarning) {
|
|
120
|
-
this.Log.warn(`Rendering pdf template ${template} to file ${filePath} took too long.`);
|
|
121
|
-
}
|
|
122
|
-
// Skip browser cleanup if debug.close is false (keep browser open for inspection)
|
|
123
|
-
if (browser && this.Options.debug?.close !== false) {
|
|
124
|
-
await this.safeBrowserCleanup(browser);
|
|
125
|
-
}
|
|
126
|
-
else if (browser) {
|
|
127
|
-
this.Log.info('Browser kept open for debugging (debug.close=false)');
|
|
128
|
-
}
|
|
129
|
-
if (server) {
|
|
130
|
-
await this.safeServerCleanup(server);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
async render(_templateName, _model, _language) {
|
|
135
|
-
throw new NotSupported('cannot render pdf template to string');
|
|
136
|
-
}
|
|
137
|
-
// no compilation at start
|
|
138
|
-
async compile(_path) { }
|
|
139
|
-
async runLocalServer(basePath) {
|
|
140
|
-
const self = this;
|
|
141
|
-
const app = Express();
|
|
142
|
-
app.use(cors());
|
|
143
|
-
app.use(Express.static(basePath));
|
|
144
|
-
return new Promise((resolve, reject) => {
|
|
145
|
-
const server = app
|
|
146
|
-
// if no port is provided express will choose random port to start (available)
|
|
147
|
-
// if not, we will get random from range in config
|
|
148
|
-
.listen(this.Options.static.portRange.length === 0
|
|
149
|
-
? 0
|
|
150
|
-
: _.random(this.Options.static.portRange[0], this.Options.static.portRange[1]))
|
|
151
|
-
.on('listening', function () {
|
|
152
|
-
self.Log.trace(`PDF image server started on port ${this.address().port}`);
|
|
153
|
-
self.Log.trace(`PDF static file dir at ${basePath}`);
|
|
154
|
-
resolve(this);
|
|
155
|
-
})
|
|
156
|
-
.on('error', (err) => {
|
|
157
|
-
self.Log.error(err, `PDF image server cannot start`);
|
|
158
|
-
// Clean up the failed server
|
|
159
|
-
if (server) {
|
|
160
|
-
server.close(() => {
|
|
161
|
-
reject(err);
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
reject(err);
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
// Set a timeout for server startup
|
|
169
|
-
setTimeout(() => {
|
|
170
|
-
if (!server.listening) {
|
|
171
|
-
server.close();
|
|
172
|
-
reject(new Error('Server startup timeout'));
|
|
173
|
-
}
|
|
174
|
-
}, 10000);
|
|
28
|
+
async performRender(page, filePath) {
|
|
29
|
+
await page.pdf({
|
|
30
|
+
path: filePath,
|
|
31
|
+
...this.pdfOptions,
|
|
175
32
|
});
|
|
176
33
|
}
|
|
177
|
-
/**
|
|
178
|
-
* Enhanced browser cleanup with error handling
|
|
179
|
-
*/
|
|
180
|
-
async safeBrowserCleanup(browser) {
|
|
181
|
-
try {
|
|
182
|
-
// First try to close all pages
|
|
183
|
-
const pages = await browser.pages();
|
|
184
|
-
await Promise.allSettled(pages.map(page => page.close()));
|
|
185
|
-
// Then close the browser normally
|
|
186
|
-
await browser.close();
|
|
187
|
-
}
|
|
188
|
-
catch (err) {
|
|
189
|
-
this.Log.warn(`Error during normal browser cleanup: ${err.message}`);
|
|
190
|
-
// Force kill if normal close fails
|
|
191
|
-
try {
|
|
192
|
-
await this.forceCloseBrowser(browser);
|
|
193
|
-
}
|
|
194
|
-
catch (killErr) {
|
|
195
|
-
this.Log.error(`Failed to force kill browser: ${killErr.message}`);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Force close browser with process termination
|
|
201
|
-
*/
|
|
202
|
-
async forceCloseBrowser(browser) {
|
|
203
|
-
try {
|
|
204
|
-
const process = browser.process();
|
|
205
|
-
if (process) {
|
|
206
|
-
process.kill('SIGKILL');
|
|
207
|
-
this.Log.warn('Browser process force killed');
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
catch (err) {
|
|
211
|
-
this.Log.error(`Error force killing browser process: ${err.message}`);
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Enhanced server cleanup with timeout
|
|
216
|
-
*/
|
|
217
|
-
async safeServerCleanup(server) {
|
|
218
|
-
try {
|
|
219
|
-
await new Promise((resolve, reject) => {
|
|
220
|
-
const timeout = setTimeout(() => {
|
|
221
|
-
reject(new Error('Server close timeout'));
|
|
222
|
-
}, 5000);
|
|
223
|
-
server.close((err) => {
|
|
224
|
-
clearTimeout(timeout);
|
|
225
|
-
if (err)
|
|
226
|
-
reject(err);
|
|
227
|
-
else
|
|
228
|
-
resolve();
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
catch (err) {
|
|
233
|
-
this.Log.warn(`Error closing server: ${err.message}`);
|
|
234
|
-
// Force close connections if available
|
|
235
|
-
try {
|
|
236
|
-
if ('closeAllConnections' in server) {
|
|
237
|
-
server.closeAllConnections();
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
catch (forceErr) {
|
|
241
|
-
this.Log.error(`Error force closing server connections: ${forceErr.message}`);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Add page event listeners with cleanup function
|
|
247
|
-
*/
|
|
248
|
-
addPageEventListeners(page) {
|
|
249
|
-
const listeners = {
|
|
250
|
-
console: (message) => this.Log.trace(`${message.type().substr(0, 3).toUpperCase()} ${message.text()}`),
|
|
251
|
-
pageerror: ({ message }) => this.Log.error(message),
|
|
252
|
-
response: (response) => this.Log.trace(`${response.status()} ${response.url()}`),
|
|
253
|
-
requestfailed: (request) => this.Log.error(`${request.failure().errorText} ${request.url()}`)
|
|
254
|
-
};
|
|
255
|
-
// Add listeners
|
|
256
|
-
page.on('console', listeners.console);
|
|
257
|
-
page.on('pageerror', listeners.pageerror);
|
|
258
|
-
page.on('response', listeners.response);
|
|
259
|
-
page.on('requestfailed', listeners.requestfailed);
|
|
260
|
-
// Return cleanup function
|
|
261
|
-
return () => {
|
|
262
|
-
try {
|
|
263
|
-
page.removeListener('console', listeners.console);
|
|
264
|
-
page.removeListener('pageerror', listeners.pageerror);
|
|
265
|
-
page.removeListener('response', listeners.response);
|
|
266
|
-
page.removeListener('requestfailed', listeners.requestfailed);
|
|
267
|
-
}
|
|
268
|
-
catch (err) {
|
|
269
|
-
this.Log.warn(`Error removing page listeners: ${err.message}`);
|
|
270
|
-
}
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
34
|
};
|
|
274
|
-
PdfRenderer.USED_PORTS = [];
|
|
275
35
|
__decorate([
|
|
276
36
|
Config('templates.pdf'),
|
|
277
37
|
__metadata("design:type", Object)
|
|
278
38
|
], PdfRenderer.prototype, "Options", void 0);
|
|
279
|
-
__decorate([
|
|
280
|
-
Logger('pdf-templates'),
|
|
281
|
-
__metadata("design:type", Log)
|
|
282
|
-
], PdfRenderer.prototype, "Log", void 0);
|
|
283
|
-
__decorate([
|
|
284
|
-
LazyInject(),
|
|
285
|
-
__metadata("design:type", Templates)
|
|
286
|
-
], PdfRenderer.prototype, "TemplatingService", void 0);
|
|
287
39
|
PdfRenderer = __decorate([
|
|
288
40
|
Injectable(TemplateRenderer),
|
|
289
41
|
PerInstanceCheck(),
|
package/lib/mjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,iBAAiB,EAA6B,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAkB,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpE,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,iBAAiB;IAOhD,IAAW,IAAI;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,YAAsB,UAAsB;QAC1C,KAAK,EAAE,CAAC;QADY,eAAU,GAAV,UAAU,CAAY;IAE5C,CAAC;IAED,iBAAiB,CAAC,eAAoB;QACpC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC7E,CAAC;IAES,KAAK,CAAC,aAAa,CAAC,IAAU,EAAE,QAAgB;QACxD,MAAM,IAAI,CAAC,GAAG,CAAC;YACb,IAAI,EAAE,QAAQ;YACd,GAAG,IAAI,CAAC,UAAU;SACnB,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAxBW;IADT,MAAM,CAAC,eAAe,CAAC;;4CACqB;AALlC,WAAW;IAFvB,UAAU,CAAC,gBAAgB,CAAC;IAC5B,gBAAgB,EAAE;;GACN,WAAW,CA6BvB"}
|