@pdfme/converter 0.0.0
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/README.md +5 -0
- package/dist/cjs/__tests__/index.test.js +189 -0
- package/dist/cjs/__tests__/index.test.js.map +1 -0
- package/dist/cjs/src/img2pdf.js +91 -0
- package/dist/cjs/src/img2pdf.js.map +1 -0
- package/dist/cjs/src/index.browser.js +80 -0
- package/dist/cjs/src/index.browser.js.map +1 -0
- package/dist/cjs/src/index.node.js +67 -0
- package/dist/cjs/src/index.node.js.map +1 -0
- package/dist/cjs/src/pdf2img.js +35 -0
- package/dist/cjs/src/pdf2img.js.map +1 -0
- package/dist/cjs/src/pdf2size.js +17 -0
- package/dist/cjs/src/pdf2size.js.map +1 -0
- package/dist/esm/__tests__/index.test.js +187 -0
- package/dist/esm/__tests__/index.test.js.map +1 -0
- package/dist/esm/src/img2pdf.js +88 -0
- package/dist/esm/src/img2pdf.js.map +1 -0
- package/dist/esm/src/index.browser.js +38 -0
- package/dist/esm/src/index.browser.js.map +1 -0
- package/dist/esm/src/index.node.js +25 -0
- package/dist/esm/src/index.node.js.map +1 -0
- package/dist/esm/src/pdf2img.js +32 -0
- package/dist/esm/src/pdf2img.js.map +1 -0
- package/dist/esm/src/pdf2size.js +14 -0
- package/dist/esm/src/pdf2size.js.map +1 -0
- package/dist/types/__tests__/index.test.d.ts +1 -0
- package/dist/types/src/img2pdf.d.ts +12 -0
- package/dist/types/src/index.browser.d.ts +8 -0
- package/dist/types/src/index.node.d.ts +8 -0
- package/dist/types/src/pdf2img.d.ts +17 -0
- package/dist/types/src/pdf2size.d.ts +10 -0
- package/eslint.config.mjs +22 -0
- package/package.json +80 -0
- package/src/img2pdf.ts +110 -0
- package/src/index.browser.ts +51 -0
- package/src/index.node.ts +33 -0
- package/src/pdf2img.ts +64 -0
- package/src/pdf2size.ts +33 -0
- package/src/types.d.ts +1 -0
- package/tsconfig.cjs.json +10 -0
- package/tsconfig.esm.json +11 -0
- package/tsconfig.json +6 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
// @ts-ignore
|
|
2
|
+
import { generate } from '@pdfme/generator';
|
|
3
|
+
import { pdf2img as nodePdf2Img, pdf2size as nodePdf2Size, img2pdf } from '../src/index.node.js';
|
|
4
|
+
describe('pdf2img tests', () => {
|
|
5
|
+
let pdfArrayBuffer;
|
|
6
|
+
beforeAll(async () => {
|
|
7
|
+
const pdf = await generate({
|
|
8
|
+
template: {
|
|
9
|
+
schemas: [
|
|
10
|
+
[
|
|
11
|
+
{
|
|
12
|
+
name: 'field1',
|
|
13
|
+
type: 'text',
|
|
14
|
+
content: 'Type Something...',
|
|
15
|
+
position: { x: 10, y: 20 },
|
|
16
|
+
width: 45,
|
|
17
|
+
height: 10,
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
],
|
|
21
|
+
basePdf: { width: 210, height: 297, padding: [20, 10, 20, 10] },
|
|
22
|
+
pdfmeVersion: '5.2.16',
|
|
23
|
+
},
|
|
24
|
+
inputs: [{}, {}, {}, {}],
|
|
25
|
+
});
|
|
26
|
+
pdfArrayBuffer = new Uint8Array(pdf.buffer);
|
|
27
|
+
});
|
|
28
|
+
test('Node.js version - returns array of images', async () => {
|
|
29
|
+
const images = await nodePdf2Img(pdfArrayBuffer, { scale: 1 });
|
|
30
|
+
expect(Array.isArray(images)).toBe(true);
|
|
31
|
+
expect(images.length).toBe(4);
|
|
32
|
+
expect(images[0]).toBeInstanceOf(ArrayBuffer);
|
|
33
|
+
expect(images[0].byteLength).toBeGreaterThan(0);
|
|
34
|
+
});
|
|
35
|
+
test('pageNumbers option - should render only specified pages', async () => {
|
|
36
|
+
const images = await nodePdf2Img(pdfArrayBuffer, {
|
|
37
|
+
scale: 1,
|
|
38
|
+
range: { start: 0, end: 1 },
|
|
39
|
+
});
|
|
40
|
+
expect(Array.isArray(images)).toBe(true);
|
|
41
|
+
expect(images.length).toBe(2);
|
|
42
|
+
images.forEach((img) => {
|
|
43
|
+
expect(img).toBeInstanceOf(ArrayBuffer);
|
|
44
|
+
expect(img.byteLength).toBeGreaterThan(0);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
test('invalid PDF input - should throw error', async () => {
|
|
48
|
+
const invalidBuffer = new ArrayBuffer(10);
|
|
49
|
+
await expect(nodePdf2Img(invalidBuffer, { scale: 1 })).rejects.toThrow('Invalid PDF');
|
|
50
|
+
});
|
|
51
|
+
test('empty buffer input - should throw error', async () => {
|
|
52
|
+
const emptyBuffer = new ArrayBuffer(0);
|
|
53
|
+
await expect(nodePdf2Img(emptyBuffer, { scale: 1 })).rejects.toThrow('The PDF file is empty, i.e. its size is zero by');
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe('img2pdf tests', () => {
|
|
57
|
+
let jpegImage;
|
|
58
|
+
let pngImage;
|
|
59
|
+
beforeAll(async () => {
|
|
60
|
+
// Create test images using pdf2img for testing
|
|
61
|
+
const pdf = await generate({
|
|
62
|
+
template: {
|
|
63
|
+
schemas: [
|
|
64
|
+
[
|
|
65
|
+
{
|
|
66
|
+
name: 'field1',
|
|
67
|
+
type: 'text',
|
|
68
|
+
content: 'Type Something...',
|
|
69
|
+
position: { x: 10, y: 20 },
|
|
70
|
+
width: 45,
|
|
71
|
+
height: 10,
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
],
|
|
75
|
+
basePdf: { width: 210, height: 297, padding: [20, 10, 20, 10] },
|
|
76
|
+
pdfmeVersion: '5.2.16',
|
|
77
|
+
},
|
|
78
|
+
inputs: [{}],
|
|
79
|
+
});
|
|
80
|
+
const images = await nodePdf2Img(new Uint8Array(pdf.buffer), { scale: 1 });
|
|
81
|
+
jpegImage = images[0];
|
|
82
|
+
pngImage = images[0]; // Using same image for both tests
|
|
83
|
+
});
|
|
84
|
+
test('converts single image to PDF', async () => {
|
|
85
|
+
const pdf = await img2pdf([jpegImage]);
|
|
86
|
+
expect(pdf).toBeInstanceOf(ArrayBuffer);
|
|
87
|
+
expect(pdf.byteLength).toBeGreaterThan(0);
|
|
88
|
+
});
|
|
89
|
+
test('converts multiple images to single PDF', async () => {
|
|
90
|
+
const pdf = await img2pdf([jpegImage, pngImage]);
|
|
91
|
+
expect(pdf).toBeInstanceOf(ArrayBuffer);
|
|
92
|
+
expect(pdf.byteLength).toBeGreaterThan(0);
|
|
93
|
+
});
|
|
94
|
+
test('handles scale option', async () => {
|
|
95
|
+
const pdf = await img2pdf([jpegImage], { scale: 0.5 });
|
|
96
|
+
expect(pdf.byteLength).toBeGreaterThan(0);
|
|
97
|
+
});
|
|
98
|
+
test('throws error for empty input', async () => {
|
|
99
|
+
await expect(img2pdf([])).rejects.toThrow('Input must be a non-empty array');
|
|
100
|
+
});
|
|
101
|
+
test('throws error for invalid image', async () => {
|
|
102
|
+
const invalidImage = new ArrayBuffer(10);
|
|
103
|
+
await expect(img2pdf([invalidImage])).rejects.toThrow('Failed to process image');
|
|
104
|
+
});
|
|
105
|
+
test('handles size option', async () => {
|
|
106
|
+
const customSize = { width: 100, height: 150 }; // in millimeters
|
|
107
|
+
const pdf = await img2pdf([jpegImage], { size: customSize });
|
|
108
|
+
expect(pdf).toBeInstanceOf(ArrayBuffer);
|
|
109
|
+
expect(pdf.byteLength).toBeGreaterThan(0);
|
|
110
|
+
});
|
|
111
|
+
test('handles margin option', async () => {
|
|
112
|
+
const margins = [10, 20, 30, 40]; // in millimeters [top, right, bottom, left]
|
|
113
|
+
const pdf = await img2pdf([jpegImage], { margin: margins });
|
|
114
|
+
expect(pdf).toBeInstanceOf(ArrayBuffer);
|
|
115
|
+
expect(pdf.byteLength).toBeGreaterThan(0);
|
|
116
|
+
});
|
|
117
|
+
test('handles both size and margin options', async () => {
|
|
118
|
+
const customSize = { width: 100, height: 150 }; // in millimeters
|
|
119
|
+
const margins = [10, 20, 30, 40]; // in millimeters [top, right, bottom, left]
|
|
120
|
+
const pdf = await img2pdf([jpegImage], {
|
|
121
|
+
size: customSize,
|
|
122
|
+
margin: margins
|
|
123
|
+
});
|
|
124
|
+
expect(pdf).toBeInstanceOf(ArrayBuffer);
|
|
125
|
+
expect(pdf.byteLength).toBeGreaterThan(0);
|
|
126
|
+
});
|
|
127
|
+
test('uses default margin [0,0,0,0] when margin is omitted', async () => {
|
|
128
|
+
// This test verifies the default behavior is maintained
|
|
129
|
+
const pdf1 = await img2pdf([jpegImage]);
|
|
130
|
+
const pdf2 = await img2pdf([jpegImage], { margin: [0, 0, 0, 0] });
|
|
131
|
+
// Both PDFs should have the same size
|
|
132
|
+
expect(pdf1.byteLength).toBe(pdf2.byteLength);
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe('pdf2size tests', () => {
|
|
136
|
+
let pdfArrayBuffer;
|
|
137
|
+
beforeAll(async () => {
|
|
138
|
+
const pdf = await generate({
|
|
139
|
+
template: {
|
|
140
|
+
schemas: [
|
|
141
|
+
[
|
|
142
|
+
{
|
|
143
|
+
name: 'field1',
|
|
144
|
+
type: 'text',
|
|
145
|
+
content: 'Type Something...',
|
|
146
|
+
position: { x: 10, y: 20 },
|
|
147
|
+
width: 45,
|
|
148
|
+
height: 10,
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
],
|
|
152
|
+
basePdf: { width: 210, height: 297, padding: [20, 10, 20, 10] },
|
|
153
|
+
pdfmeVersion: '5.2.16',
|
|
154
|
+
},
|
|
155
|
+
inputs: [{}, {}, {}, {}],
|
|
156
|
+
});
|
|
157
|
+
pdfArrayBuffer = new Uint8Array(pdf.buffer);
|
|
158
|
+
});
|
|
159
|
+
test('returns array of page sizes', async () => {
|
|
160
|
+
const sizes = await nodePdf2Size(pdfArrayBuffer, { scale: 1 });
|
|
161
|
+
expect(Array.isArray(sizes)).toBe(true);
|
|
162
|
+
expect(sizes.length).toBe(4);
|
|
163
|
+
sizes.forEach((size) => {
|
|
164
|
+
expect(typeof size.width).toBe('number');
|
|
165
|
+
expect(typeof size.height).toBe('number');
|
|
166
|
+
expect(size.width).toBeGreaterThan(0);
|
|
167
|
+
expect(size.height).toBeGreaterThan(0);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
test('scale option - properly adjusts size', async () => {
|
|
171
|
+
const scale = 0.5;
|
|
172
|
+
const sizes = await nodePdf2Size(pdfArrayBuffer, { scale });
|
|
173
|
+
sizes.forEach((size) => {
|
|
174
|
+
expect(size.width).toBeLessThan(200);
|
|
175
|
+
expect(size.height).toBeLessThan(300);
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
test('invalid PDF input - should throw error', async () => {
|
|
179
|
+
const invalidBuffer = new ArrayBuffer(10);
|
|
180
|
+
await expect(nodePdf2Size(invalidBuffer, { scale: 1 })).rejects.toThrow('Invalid PDF');
|
|
181
|
+
});
|
|
182
|
+
test('empty buffer input - should throw error', async () => {
|
|
183
|
+
const emptyBuffer = new ArrayBuffer(0);
|
|
184
|
+
await expect(nodePdf2Size(emptyBuffer, { scale: 1 })).rejects.toThrow('The PDF file is empty, i.e. its size is zero by');
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../__tests__/index.test.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,QAAQ,IAAI,YAAY,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEjG,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,cAAwC,CAAC;IAE7C,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC;YACzB,QAAQ,EAAE;gBACR,OAAO,EAAE;oBACP;wBACE;4BACE,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,mBAAmB;4BAC5B,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;4BAC1B,KAAK,EAAE,EAAE;4BACT,MAAM,EAAE,EAAE;yBACX;qBACF;iBACF;gBACD,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;gBAC/D,YAAY,EAAE,QAAQ;aACvB;YACD,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;SACzB,CAAC,CAAC;QACH,cAAc,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE;YAC/C,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;SAC5B,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE9B,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACrB,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,aAAa,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAClE,iDAAiD,CAClD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AACH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,SAAsB,CAAC;IAC3B,IAAI,QAAqB,CAAC;IAE1B,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,+CAA+C;QAC/C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC;YACzB,QAAQ,EAAE;gBACR,OAAO,EAAE;oBACP;wBACE;4BACE,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,mBAAmB;4BAC5B,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;4BAC1B,KAAK,EAAE,EAAE;4BACT,MAAM,EAAE,EAAE;yBACX;qBACF;iBACF;gBACD,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;gBAC/D,YAAY,EAAE,QAAQ;aACvB;YACD,MAAM,EAAE,CAAC,EAAE,CAAC;SACb,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3E,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC;IAC1D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACrC,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,iBAAiB;QACjE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,OAAO,GAAqC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,4CAA4C;QAChH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,iBAAiB;QACjE,MAAM,OAAO,GAAqC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,4CAA4C;QAChH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE;YACrC,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACtE,wDAAwD;QACxD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAqC,EAAE,CAAC,CAAC;QACtG,sCAAsC;QACtC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,cAAwC,CAAC;IAE7C,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC;YACzB,QAAQ,EAAE;gBACR,OAAO,EAAE;oBACP;wBACE;4BACE,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,mBAAmB;4BAC5B,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;4BAC1B,KAAK,EAAE,EAAE;4BACT,MAAM,EAAE,EAAE;yBACX;qBACF;iBACF;gBACD,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;gBAC/D,YAAY,EAAE,QAAQ;aACvB;YACD,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;SACzB,CAAC,CAAC;QACH,cAAc,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,KAAK,GAAG,GAAG,CAAC;QAClB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,aAAa,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACnE,iDAAiD,CAClD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { PDFDocument } from '@pdfme/pdf-lib';
|
|
2
|
+
import { mm2pt } from '@pdfme/common';
|
|
3
|
+
function detectImageType(buffer) {
|
|
4
|
+
const bytes = new Uint8Array(buffer);
|
|
5
|
+
if (bytes.length >= 2 && bytes[0] === 0xff && bytes[1] === 0xd8) {
|
|
6
|
+
return 'jpeg';
|
|
7
|
+
}
|
|
8
|
+
if (bytes.length >= 8 &&
|
|
9
|
+
bytes[0] === 0x89 &&
|
|
10
|
+
bytes[1] === 0x50 &&
|
|
11
|
+
bytes[2] === 0x4e &&
|
|
12
|
+
bytes[3] === 0x47 &&
|
|
13
|
+
bytes[4] === 0x0d &&
|
|
14
|
+
bytes[5] === 0x0a &&
|
|
15
|
+
bytes[6] === 0x1a &&
|
|
16
|
+
bytes[7] === 0x0a) {
|
|
17
|
+
return 'png';
|
|
18
|
+
}
|
|
19
|
+
return 'unknown';
|
|
20
|
+
}
|
|
21
|
+
export async function img2pdf(imgs, options = {}) {
|
|
22
|
+
try {
|
|
23
|
+
const { scale = 1, size, margin = [0, 0, 0, 0] } = options;
|
|
24
|
+
if (!Array.isArray(imgs) || imgs.length === 0) {
|
|
25
|
+
throw new Error('Input must be a non-empty array of image buffers');
|
|
26
|
+
}
|
|
27
|
+
const doc = await PDFDocument.create();
|
|
28
|
+
for (const img of imgs) {
|
|
29
|
+
try {
|
|
30
|
+
let image;
|
|
31
|
+
const type = detectImageType(img);
|
|
32
|
+
if (type === 'jpeg') {
|
|
33
|
+
image = await doc.embedJpg(img);
|
|
34
|
+
}
|
|
35
|
+
else if (type === 'png') {
|
|
36
|
+
image = await doc.embedPng(img);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
try {
|
|
40
|
+
image = await doc.embedJpg(img);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
image = await doc.embedPng(img);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const page = doc.addPage();
|
|
47
|
+
const { width: imgWidth, height: imgHeight } = image.scale(scale);
|
|
48
|
+
// Set page size based on size option or image dimensions
|
|
49
|
+
const pageWidth = size ? mm2pt(size.width) : imgWidth;
|
|
50
|
+
const pageHeight = size ? mm2pt(size.height) : imgHeight;
|
|
51
|
+
page.setSize(pageWidth, pageHeight);
|
|
52
|
+
// Convert margins from mm to points
|
|
53
|
+
const [topMargin, rightMargin, bottomMargin, leftMargin] = margin.map(mm2pt);
|
|
54
|
+
// Calculate available space for the image after applying margins
|
|
55
|
+
const availableWidth = pageWidth - leftMargin - rightMargin;
|
|
56
|
+
const availableHeight = pageHeight - topMargin - bottomMargin;
|
|
57
|
+
// Calculate scaling to fit image within available space while maintaining aspect ratio
|
|
58
|
+
const widthRatio = availableWidth / imgWidth;
|
|
59
|
+
const heightRatio = availableHeight / imgHeight;
|
|
60
|
+
const ratio = Math.min(widthRatio, heightRatio, 1); // Don't upscale images
|
|
61
|
+
// Calculate final image dimensions and position
|
|
62
|
+
const finalWidth = imgWidth * ratio;
|
|
63
|
+
const finalHeight = imgHeight * ratio;
|
|
64
|
+
const x = leftMargin + (availableWidth - finalWidth) / 2; // Center horizontally
|
|
65
|
+
const y = bottomMargin + (availableHeight - finalHeight) / 2; // Center vertically
|
|
66
|
+
page.drawImage(image, {
|
|
67
|
+
x,
|
|
68
|
+
y,
|
|
69
|
+
width: finalWidth,
|
|
70
|
+
height: finalHeight,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
throw new Error(`Failed to process image: ${error.message}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const pdfUint8Array = await doc.save();
|
|
78
|
+
// Create a new ArrayBuffer from the Uint8Array to ensure we return only ArrayBuffer
|
|
79
|
+
const buffer = new ArrayBuffer(pdfUint8Array.byteLength);
|
|
80
|
+
const view = new Uint8Array(buffer);
|
|
81
|
+
view.set(pdfUint8Array);
|
|
82
|
+
return buffer;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
throw new Error(`[@pdfme/converter] img2pdf failed: ${error.message}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=img2pdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"img2pdf.js","sourceRoot":"","sources":["../../../src/img2pdf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as pdfjsLib from 'pdfjs-dist';
|
|
2
|
+
// @ts-expect-error - PDFJSWorker import is not properly typed but required for functionality
|
|
3
|
+
import PDFJSWorker from 'pdfjs-dist/build/pdf.worker.entry.js';
|
|
4
|
+
import { pdf2img as _pdf2img } from './pdf2img.js';
|
|
5
|
+
import { pdf2size as _pdf2size } from './pdf2size.js';
|
|
6
|
+
pdfjsLib.GlobalWorkerOptions.workerSrc = PDFJSWorker;
|
|
7
|
+
function dataURLToArrayBuffer(dataURL) {
|
|
8
|
+
// Split out the actual base64 string from the data URL scheme
|
|
9
|
+
const base64String = dataURL.split(',')[1];
|
|
10
|
+
// Decode the Base64 string to get the binary data
|
|
11
|
+
const byteString = atob(base64String);
|
|
12
|
+
// Create a typed array from the binary string
|
|
13
|
+
const arrayBuffer = new ArrayBuffer(byteString.length);
|
|
14
|
+
const uintArray = new Uint8Array(arrayBuffer);
|
|
15
|
+
for (let i = 0; i < byteString.length; i++) {
|
|
16
|
+
uintArray[i] = byteString.charCodeAt(i);
|
|
17
|
+
}
|
|
18
|
+
return arrayBuffer;
|
|
19
|
+
}
|
|
20
|
+
export const pdf2img = async (pdf, options = {}) => _pdf2img(pdf, options, {
|
|
21
|
+
getDocument: (pdf) => pdfjsLib.getDocument({ data: pdf, isEvalSupported: false }).promise,
|
|
22
|
+
createCanvas: (width, height) => {
|
|
23
|
+
const canvas = document.createElement('canvas');
|
|
24
|
+
canvas.width = width;
|
|
25
|
+
canvas.height = height;
|
|
26
|
+
return canvas;
|
|
27
|
+
},
|
|
28
|
+
canvasToArrayBuffer: (canvas, imageType) => {
|
|
29
|
+
// Using type assertion to handle the canvas method
|
|
30
|
+
const dataUrl = canvas.toDataURL(`image/${imageType}`);
|
|
31
|
+
return dataURLToArrayBuffer(dataUrl);
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
export const pdf2size = async (pdf, options = {}) => _pdf2size(pdf, options, {
|
|
35
|
+
getDocument: (pdf) => pdfjsLib.getDocument({ data: pdf, isEvalSupported: false }).promise,
|
|
36
|
+
});
|
|
37
|
+
export { img2pdf } from './img2pdf.js';
|
|
38
|
+
//# sourceMappingURL=index.browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../../../src/index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,6FAA6F;AAC7F,OAAO,WAAW,MAAM,sCAAsC,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAkB,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAmB,MAAM,eAAe,CAAC;AAEvE,QAAQ,CAAC,mBAAmB,CAAC,SAAS,GAAG,WAAgC,CAAC;AAE1E,SAAS,oBAAoB,CAAC,OAAe;IAC3C,8DAA8D;IAC9D,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3C,kDAAkD;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IAEtC,8CAA8C;IAC9C,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAC1B,GAA6B,EAC7B,UAA0B,EAAE,EACJ,EAAE,CAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE;IACrB,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO;IACzF,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,mBAAmB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;QACzC,mDAAmD;QACnD,MAAM,OAAO,GAAI,MAA4B,CAAC,SAAS,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC;QAC9E,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;CACF,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,GAA6B,EAAE,UAA2B,EAAE,EAAE,EAAE,CAC7F,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE;IACtB,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO;CAC1F,CAAC,CAAC;AAEL,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf';
|
|
2
|
+
// @ts-expect-error - PDFJSWorker import is not properly typed but required for functionality
|
|
3
|
+
import PDFJSWorker from 'pdfjs-dist/legacy/build/pdf.worker.js';
|
|
4
|
+
import { createCanvas } from 'canvas';
|
|
5
|
+
import { pdf2img as _pdf2img } from './pdf2img.js';
|
|
6
|
+
import { pdf2size as _pdf2size } from './pdf2size.js';
|
|
7
|
+
pdfjsLib.GlobalWorkerOptions.workerSrc = PDFJSWorker;
|
|
8
|
+
export const pdf2img = async (pdf, options = {}) => _pdf2img(pdf, options, {
|
|
9
|
+
getDocument: (pdf) => pdfjsLib.getDocument({ data: pdf, isEvalSupported: false }).promise,
|
|
10
|
+
createCanvas: (width, height) => createCanvas(width, height),
|
|
11
|
+
canvasToArrayBuffer: (canvas) => {
|
|
12
|
+
// Using a more specific type for the canvas from the 'canvas' package
|
|
13
|
+
const nodeCanvas = canvas;
|
|
14
|
+
// Get buffer from the canvas - using the synchronous version without parameters
|
|
15
|
+
// This will use the default PNG format
|
|
16
|
+
const buffer = nodeCanvas.toBuffer();
|
|
17
|
+
// Convert to ArrayBuffer
|
|
18
|
+
return new Uint8Array(buffer).buffer;
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
export const pdf2size = async (pdf, options = {}) => _pdf2size(pdf, options, {
|
|
22
|
+
getDocument: (pdf) => pdfjsLib.getDocument({ data: pdf, isEvalSupported: false }).promise,
|
|
23
|
+
});
|
|
24
|
+
export { img2pdf } from './img2pdf.js';
|
|
25
|
+
//# sourceMappingURL=index.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.node.js","sourceRoot":"","sources":["../../../src/index.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,6BAA6B,CAAC;AACxD,6FAA6F;AAC7F,OAAO,WAAW,MAAM,uCAAuC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAkB,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAmB,MAAM,eAAe,CAAC;AAEvE,QAAQ,CAAC,mBAAmB,CAAC,SAAS,GAAG,WAAgC,CAAC;AAE1E,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAC1B,GAA6B,EAC7B,UAA0B,EAAE,EACJ,EAAE,CAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE;IACrB,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO;IACzF,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAiC;IAC5F,mBAAmB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC9B,sEAAsE;QACtE,MAAM,UAAU,GAAG,MAA4C,CAAC;QAChE,gFAAgF;QAChF,uCAAuC;QACvC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QACrC,yBAAyB;QACzB,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IACvC,CAAC;CACF,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,GAA6B,EAAE,UAA2B,EAAE,EAAE,EAAE,CAC7F,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE;IACtB,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO;CAC1F,CAAC,CAAC;AAEL,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export async function pdf2img(pdf, options = {}, env) {
|
|
2
|
+
try {
|
|
3
|
+
const { scale = 1, imageType = 'jpeg', range = {} } = options;
|
|
4
|
+
const { start = 0, end = Infinity } = range;
|
|
5
|
+
const { getDocument, createCanvas, canvasToArrayBuffer } = env;
|
|
6
|
+
const pdfDoc = await getDocument(pdf);
|
|
7
|
+
const numPages = pdfDoc.numPages;
|
|
8
|
+
const startPage = Math.max(start + 1, 1);
|
|
9
|
+
const endPage = Math.min(end + 1, numPages);
|
|
10
|
+
const results = [];
|
|
11
|
+
for (let pageNum = startPage; pageNum <= endPage; pageNum++) {
|
|
12
|
+
const page = await pdfDoc.getPage(pageNum);
|
|
13
|
+
const viewport = page.getViewport({ scale });
|
|
14
|
+
const canvas = createCanvas(viewport.width, viewport.height);
|
|
15
|
+
if (!canvas) {
|
|
16
|
+
throw new Error('Failed to create canvas');
|
|
17
|
+
}
|
|
18
|
+
const context = canvas.getContext('2d');
|
|
19
|
+
if (!context) {
|
|
20
|
+
throw new Error('Failed to get canvas context');
|
|
21
|
+
}
|
|
22
|
+
await page.render({ canvasContext: context, viewport }).promise;
|
|
23
|
+
const arrayBuffer = canvasToArrayBuffer(canvas, imageType);
|
|
24
|
+
results.push(arrayBuffer);
|
|
25
|
+
}
|
|
26
|
+
return results;
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
throw new Error(`[@pdfme/converter] pdf2img failed: ${error.message}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=pdf2img.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf2img.js","sourceRoot":"","sources":["../../../src/pdf2img.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAA6B,EAC7B,UAA0B,EAAE,EAC5B,GAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,GAAG,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC;QAC9D,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC;QAE5C,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,GAAG,CAAC;QAE/D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;QAE5C,MAAM,OAAO,GAAkB,EAAE,CAAC;QAElC,KAAK,IAAI,OAAO,GAAG,SAAS,EAAE,OAAO,IAAI,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;YAC5D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAE7C,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAA6B,CAAC;YACpE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC;YAChE,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,sCAAuC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACpF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { pt2mm } from '@pdfme/common';
|
|
2
|
+
export async function pdf2size(pdf, options = {}, env) {
|
|
3
|
+
const { scale = 1 } = options;
|
|
4
|
+
const { getDocument } = env;
|
|
5
|
+
const pdfDoc = await getDocument(pdf);
|
|
6
|
+
const promises = Promise.all(new Array(pdfDoc.numPages).fill('').map(async (_, i) => {
|
|
7
|
+
return await pdfDoc.getPage(i + 1).then((page) => {
|
|
8
|
+
const { height, width } = page.getViewport({ scale, rotation: 0 });
|
|
9
|
+
return { height: pt2mm(height), width: pt2mm(width) };
|
|
10
|
+
});
|
|
11
|
+
}));
|
|
12
|
+
return promises;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=pdf2size.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf2size.js","sourceRoot":"","sources":["../../../src/pdf2size.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,EAAE,MAAM,eAAe,CAAC;AAU5C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,GAA6B,EAC7B,UAA2B,EAAE,EAC7B,GAAgB;IAEhB,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;IAE5B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAC1B,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QACrD,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YAC/C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;YAEnE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ImageType } from './types.js';
|
|
2
|
+
interface Img2PdfOptions {
|
|
3
|
+
scale?: number;
|
|
4
|
+
imageType?: ImageType;
|
|
5
|
+
size?: {
|
|
6
|
+
height: number;
|
|
7
|
+
width: number;
|
|
8
|
+
};
|
|
9
|
+
margin?: [number, number, number, number];
|
|
10
|
+
}
|
|
11
|
+
export declare function img2pdf(imgs: ArrayBuffer[], options?: Img2PdfOptions): Promise<ArrayBuffer>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Pdf2ImgOptions } from './pdf2img.js';
|
|
2
|
+
import { Pdf2SizeOptions } from './pdf2size.js';
|
|
3
|
+
export declare const pdf2img: (pdf: ArrayBuffer | Uint8Array, options?: Pdf2ImgOptions) => Promise<ArrayBuffer[]>;
|
|
4
|
+
export declare const pdf2size: (pdf: ArrayBuffer | Uint8Array, options?: Pdf2SizeOptions) => Promise<{
|
|
5
|
+
height: number;
|
|
6
|
+
width: number;
|
|
7
|
+
}[]>;
|
|
8
|
+
export { img2pdf } from './img2pdf.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Pdf2ImgOptions } from './pdf2img.js';
|
|
2
|
+
import { Pdf2SizeOptions } from './pdf2size.js';
|
|
3
|
+
export declare const pdf2img: (pdf: ArrayBuffer | Uint8Array, options?: Pdf2ImgOptions) => Promise<ArrayBuffer[]>;
|
|
4
|
+
export declare const pdf2size: (pdf: ArrayBuffer | Uint8Array, options?: Pdf2SizeOptions) => Promise<{
|
|
5
|
+
height: number;
|
|
6
|
+
width: number;
|
|
7
|
+
}[]>;
|
|
8
|
+
export { img2pdf } from './img2pdf.js';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { PDFDocumentProxy } from 'pdfjs-dist';
|
|
2
|
+
import type { ImageType } from './types.js';
|
|
3
|
+
interface Environment {
|
|
4
|
+
getDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PDFDocumentProxy>;
|
|
5
|
+
createCanvas: (width: number, height: number) => HTMLCanvasElement | OffscreenCanvas;
|
|
6
|
+
canvasToArrayBuffer: (canvas: HTMLCanvasElement | OffscreenCanvas, imageType: ImageType) => ArrayBuffer;
|
|
7
|
+
}
|
|
8
|
+
export interface Pdf2ImgOptions {
|
|
9
|
+
scale?: number;
|
|
10
|
+
imageType?: ImageType;
|
|
11
|
+
range?: {
|
|
12
|
+
start?: number;
|
|
13
|
+
end?: number;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export declare function pdf2img(pdf: ArrayBuffer | Uint8Array, options: Pdf2ImgOptions | undefined, env: Environment): Promise<ArrayBuffer[]>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PDFDocumentProxy } from 'pdfjs-dist';
|
|
2
|
+
import { Size } from '@pdfme/common';
|
|
3
|
+
interface Environment {
|
|
4
|
+
getDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PDFDocumentProxy>;
|
|
5
|
+
}
|
|
6
|
+
export interface Pdf2SizeOptions {
|
|
7
|
+
scale?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function pdf2size(pdf: ArrayBuffer | Uint8Array, options: Pdf2SizeOptions | undefined, env: Environment): Promise<Size[]>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { fileURLToPath } from 'url';
|
|
2
|
+
import { dirname, resolve } from 'path';
|
|
3
|
+
|
|
4
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
5
|
+
const __dirname = dirname(__filename);
|
|
6
|
+
|
|
7
|
+
// Import the root config
|
|
8
|
+
const rootConfigPath = resolve(__dirname, '../../eslint.config.mjs');
|
|
9
|
+
const rootConfig = await import(rootConfigPath);
|
|
10
|
+
|
|
11
|
+
export default [
|
|
12
|
+
...rootConfig.default,
|
|
13
|
+
{
|
|
14
|
+
files: ['src/**/*.ts'],
|
|
15
|
+
languageOptions: {
|
|
16
|
+
parserOptions: {
|
|
17
|
+
project: ['./tsconfig.esm.json'],
|
|
18
|
+
tsconfigRootDir: __dirname,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
];
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pdfme/converter",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"sideEffects": false,
|
|
5
|
+
"author": "hand-dot",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"pdf",
|
|
9
|
+
"pdf-generation",
|
|
10
|
+
"pdf-designer",
|
|
11
|
+
"pdf-viewer",
|
|
12
|
+
"typescript",
|
|
13
|
+
"react"
|
|
14
|
+
],
|
|
15
|
+
"description": "TypeScript base PDF generator and React base UI. Open source, developed by the community, and completely free to use under the MIT license!",
|
|
16
|
+
"homepage": "https://pdfme.com",
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git@github.com:pdfme/pdfme.git"
|
|
20
|
+
},
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://github.com/pdfme/pdfme/issues"
|
|
23
|
+
},
|
|
24
|
+
"main": "dist/cjs/src/index.js",
|
|
25
|
+
"module": "dist/esm/src/index.js",
|
|
26
|
+
"types": "dist/types/src/index.node.d.ts",
|
|
27
|
+
"exports": {
|
|
28
|
+
".": {
|
|
29
|
+
"browser": "./dist/esm/src/index.browser.js",
|
|
30
|
+
"node": "./dist/cjs/src/index.node.js",
|
|
31
|
+
"default": "./dist/esm/src/index.browser.js",
|
|
32
|
+
"types": "./dist/types/src/index.node.d.ts"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"dev": "tsc -p tsconfig.esm.json -w",
|
|
37
|
+
"build": "run-p build:cjs build:esm",
|
|
38
|
+
"build:cjs": "tsc -p tsconfig.cjs.json",
|
|
39
|
+
"build:esm": "tsc -p tsconfig.esm.json",
|
|
40
|
+
"clean": "rimraf dist",
|
|
41
|
+
"lint": "eslint --ext .ts src --config eslint.config.mjs",
|
|
42
|
+
"test": "jest",
|
|
43
|
+
"prune": "ts-prune src",
|
|
44
|
+
"prettier": "prettier --write 'src/**/*.ts'"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"@pdfme/common": "*",
|
|
48
|
+
"@pdfme/pdf-lib": "*",
|
|
49
|
+
"pdfjs-dist": "^3.11.174"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@pdfme/generator": "*",
|
|
53
|
+
"@types/estree": "^1.0.6",
|
|
54
|
+
"canvas": "^2.11.2"
|
|
55
|
+
},
|
|
56
|
+
"optionalDependencies": {
|
|
57
|
+
"canvas": "^2.11.0"
|
|
58
|
+
},
|
|
59
|
+
"jest": {
|
|
60
|
+
"resolver": "ts-jest-resolver",
|
|
61
|
+
"moduleFileExtensions": [
|
|
62
|
+
"js",
|
|
63
|
+
"ts"
|
|
64
|
+
],
|
|
65
|
+
"transform": {
|
|
66
|
+
"^.+\\.ts?$": [
|
|
67
|
+
"ts-jest",
|
|
68
|
+
{
|
|
69
|
+
"tsconfig": "tsconfig.esm.json"
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
"testMatch": [
|
|
74
|
+
"**/*.test.ts"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"publishConfig": {
|
|
78
|
+
"access": "public"
|
|
79
|
+
}
|
|
80
|
+
}
|