chromiumly 2.8.0 → 2.10.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 +38 -0
- package/dist/chromium/converters/html.converter.d.ts +12 -2
- package/dist/chromium/converters/html.converter.js +5 -3
- package/dist/chromium/converters/html.converter.js.map +1 -1
- package/dist/chromium/converters/markdown.converter.d.ts +12 -2
- package/dist/chromium/converters/markdown.converter.js +5 -3
- package/dist/chromium/converters/markdown.converter.js.map +1 -1
- package/dist/chromium/converters/url.converter.d.ts +12 -2
- package/dist/chromium/converters/url.converter.js +5 -3
- package/dist/chromium/converters/url.converter.js.map +1 -1
- package/dist/chromium/interfaces/converter.types.d.ts +2 -1
- package/dist/chromium/screenshots/html.screenshot.js +2 -2
- package/dist/chromium/screenshots/html.screenshot.js.map +1 -1
- package/dist/chromium/screenshots/markdown.screenshot.js +2 -2
- package/dist/chromium/screenshots/markdown.screenshot.js.map +1 -1
- package/dist/chromium/screenshots/url.screenshot.js +2 -2
- package/dist/chromium/screenshots/url.screenshot.js.map +1 -1
- package/dist/chromium/utils/converter.utils.js +3 -0
- package/dist/chromium/utils/converter.utils.js.map +1 -1
- package/dist/common/constants.d.ts +4 -0
- package/dist/common/constants.js +4 -0
- package/dist/common/constants.js.map +1 -1
- package/dist/common/index.d.ts +1 -1
- package/dist/common/types.d.ts +3 -0
- package/dist/libre-office/interfaces/libre-office.types.d.ts +1 -0
- package/dist/libre-office/utils/constants.js +103 -53
- package/dist/libre-office/utils/constants.js.map +1 -1
- package/dist/libre-office/utils/libre-office.utils.js +3 -0
- package/dist/libre-office/utils/libre-office.utils.js.map +1 -1
- package/dist/main.config.d.ts +5 -1
- package/dist/main.config.js +5 -1
- package/dist/main.config.js.map +1 -1
- package/dist/pdf-engines/pdf.engine.d.ts +23 -1
- package/dist/pdf-engines/pdf.engine.js +34 -4
- package/dist/pdf-engines/pdf.engine.js.map +1 -1
- package/package.json +7 -7
- package/src/chromium/converters/html.converter.ts +20 -3
- package/src/chromium/converters/markdown.converter.ts +20 -3
- package/src/chromium/converters/url.converter.ts +20 -3
- package/src/chromium/interfaces/converter.types.ts +2 -1
- package/src/chromium/utils/converter.utils.ts +3 -0
- package/src/chromium/utils/tests/converter.utils.test.ts +21 -2
- package/src/common/constants.ts +4 -0
- package/src/common/index.ts +1 -1
- package/src/common/types.ts +4 -0
- package/src/libre-office/interfaces/libre-office.types.ts +1 -0
- package/src/libre-office/utils/constants.ts +103 -53
- package/src/libre-office/utils/libre-office.utils.ts +7 -0
- package/src/libre-office/utils/tests/libre-office.utils.test.ts +15 -0
- package/src/main.config.ts +6 -2
- package/src/pdf-engines/pdf.engine.ts +52 -1
- package/src/pdf-engines/tests/pdf.engine.test.ts +36 -0
|
@@ -1,82 +1,132 @@
|
|
|
1
1
|
export const LIBRE_OFFICE_EXTENSIONS = [
|
|
2
|
+
'123',
|
|
3
|
+
'602',
|
|
4
|
+
'abw',
|
|
2
5
|
'bib',
|
|
6
|
+
'bmp',
|
|
7
|
+
'cdr',
|
|
8
|
+
'cgm',
|
|
9
|
+
'cmx',
|
|
10
|
+
'csv',
|
|
11
|
+
'cwk',
|
|
12
|
+
'dbf',
|
|
13
|
+
'dif',
|
|
3
14
|
'doc',
|
|
4
|
-
'
|
|
15
|
+
'docm',
|
|
5
16
|
'docx',
|
|
6
|
-
'
|
|
7
|
-
'
|
|
8
|
-
'
|
|
9
|
-
'
|
|
10
|
-
'odt',
|
|
11
|
-
'ott',
|
|
12
|
-
'pdb',
|
|
13
|
-
'pdf',
|
|
14
|
-
'psw',
|
|
15
|
-
'rtf',
|
|
16
|
-
'sdw',
|
|
17
|
-
'stw',
|
|
18
|
-
'sxw',
|
|
19
|
-
'uot',
|
|
20
|
-
'vor',
|
|
21
|
-
'wps',
|
|
22
|
-
'epub',
|
|
23
|
-
'png',
|
|
24
|
-
'bmp',
|
|
17
|
+
'dot',
|
|
18
|
+
'dotm',
|
|
19
|
+
'dotx',
|
|
20
|
+
'dxf',
|
|
25
21
|
'emf',
|
|
26
22
|
'eps',
|
|
23
|
+
'epub',
|
|
27
24
|
'fodg',
|
|
25
|
+
'fodp',
|
|
26
|
+
'fods',
|
|
27
|
+
'fodt',
|
|
28
|
+
'fopd',
|
|
28
29
|
'gif',
|
|
30
|
+
'htm',
|
|
31
|
+
'html',
|
|
32
|
+
'hwp',
|
|
33
|
+
'jpeg',
|
|
29
34
|
'jpg',
|
|
35
|
+
'key',
|
|
36
|
+
'ltx',
|
|
37
|
+
'lwp',
|
|
38
|
+
'mcw',
|
|
30
39
|
'met',
|
|
40
|
+
'mml',
|
|
41
|
+
'mw',
|
|
42
|
+
'numbers',
|
|
31
43
|
'odd',
|
|
44
|
+
'odg',
|
|
45
|
+
'odm',
|
|
46
|
+
'odp',
|
|
47
|
+
'ods',
|
|
48
|
+
'odt',
|
|
32
49
|
'otg',
|
|
50
|
+
'oth',
|
|
51
|
+
'otp',
|
|
52
|
+
'ots',
|
|
53
|
+
'ott',
|
|
54
|
+
'pages',
|
|
33
55
|
'pbm',
|
|
56
|
+
'pcd',
|
|
34
57
|
'pct',
|
|
58
|
+
'pcx',
|
|
59
|
+
'pdb',
|
|
60
|
+
'pdf',
|
|
35
61
|
'pgm',
|
|
62
|
+
'png',
|
|
63
|
+
'pot',
|
|
64
|
+
'potm',
|
|
65
|
+
'potx',
|
|
36
66
|
'ppm',
|
|
67
|
+
'pps',
|
|
68
|
+
'ppt',
|
|
69
|
+
'pptm',
|
|
70
|
+
'pptx',
|
|
71
|
+
'psd',
|
|
72
|
+
'psw',
|
|
73
|
+
'pub',
|
|
74
|
+
'pwp',
|
|
75
|
+
'pxl',
|
|
37
76
|
'ras',
|
|
77
|
+
'rtf',
|
|
78
|
+
'sda',
|
|
79
|
+
'sdc',
|
|
80
|
+
'sdd',
|
|
81
|
+
'sdp',
|
|
82
|
+
'sdw',
|
|
83
|
+
'sgl',
|
|
84
|
+
'slk',
|
|
85
|
+
'smf',
|
|
86
|
+
'stc',
|
|
38
87
|
'std',
|
|
88
|
+
'sti',
|
|
89
|
+
'stw',
|
|
39
90
|
'svg',
|
|
40
91
|
'svm',
|
|
41
92
|
'swf',
|
|
93
|
+
'sxc',
|
|
42
94
|
'sxd',
|
|
95
|
+
'sxg',
|
|
96
|
+
'sxi',
|
|
97
|
+
'sxm',
|
|
43
98
|
'sxw',
|
|
99
|
+
'tga',
|
|
100
|
+
'tif',
|
|
44
101
|
'tiff',
|
|
45
|
-
'
|
|
46
|
-
'
|
|
47
|
-
'fodp',
|
|
48
|
-
'pages',
|
|
49
|
-
'potm',
|
|
50
|
-
'pot',
|
|
51
|
-
'pptx',
|
|
52
|
-
'pps',
|
|
53
|
-
'ppt',
|
|
54
|
-
'pwp',
|
|
55
|
-
'sda',
|
|
56
|
-
'sdd',
|
|
57
|
-
'sti',
|
|
58
|
-
'sxi',
|
|
102
|
+
'txt',
|
|
103
|
+
'uof',
|
|
59
104
|
'uop',
|
|
60
|
-
'wmf',
|
|
61
|
-
'csv',
|
|
62
|
-
'dbf',
|
|
63
|
-
'dif',
|
|
64
|
-
'fods',
|
|
65
|
-
'ods',
|
|
66
|
-
'ots',
|
|
67
|
-
'pxl',
|
|
68
|
-
'sdc',
|
|
69
|
-
'slk',
|
|
70
|
-
'stc',
|
|
71
|
-
'sxc',
|
|
72
105
|
'uos',
|
|
106
|
+
'uot',
|
|
107
|
+
'vdx',
|
|
108
|
+
'vor',
|
|
109
|
+
'vsd',
|
|
110
|
+
'vsdm',
|
|
111
|
+
'vsdx',
|
|
112
|
+
'wb2',
|
|
113
|
+
'wk1',
|
|
114
|
+
'wks',
|
|
115
|
+
'wmf',
|
|
116
|
+
'wpd',
|
|
117
|
+
'wpg',
|
|
118
|
+
'wps',
|
|
119
|
+
'xbm',
|
|
120
|
+
'xhtml',
|
|
73
121
|
'xls',
|
|
74
|
-
'
|
|
122
|
+
'xlsb',
|
|
123
|
+
'xlsm',
|
|
75
124
|
'xlsx',
|
|
76
|
-
'
|
|
77
|
-
'
|
|
78
|
-
'
|
|
79
|
-
'
|
|
80
|
-
'
|
|
81
|
-
'
|
|
125
|
+
'xlt',
|
|
126
|
+
'xltm',
|
|
127
|
+
'xltx',
|
|
128
|
+
'xlw',
|
|
129
|
+
'xml',
|
|
130
|
+
'xpm',
|
|
131
|
+
'zabw'
|
|
82
132
|
];
|
|
@@ -81,5 +81,12 @@ export class LibreOfficeUtils {
|
|
|
81
81
|
`${pageProperties.nativePageRanges.from}-${pageProperties.nativePageRanges.to}`
|
|
82
82
|
);
|
|
83
83
|
}
|
|
84
|
+
|
|
85
|
+
if (pageProperties.exportFormFields === false) {
|
|
86
|
+
data.append(
|
|
87
|
+
'exportFormFields',
|
|
88
|
+
String(pageProperties.exportFormFields)
|
|
89
|
+
);
|
|
90
|
+
}
|
|
84
91
|
}
|
|
85
92
|
}
|
|
@@ -109,6 +109,21 @@ describe('LibreOfficeUtils', () => {
|
|
|
109
109
|
});
|
|
110
110
|
});
|
|
111
111
|
|
|
112
|
+
describe('Export form fields', () => {
|
|
113
|
+
describe('when exportFormFields parameter is set', () => {
|
|
114
|
+
it('should append exportFormFields to data', () => {
|
|
115
|
+
LibreOfficeUtils.addPageProperties(data, {
|
|
116
|
+
exportFormFields: false
|
|
117
|
+
});
|
|
118
|
+
expect(mockFormDataAppend).toHaveBeenCalledTimes(1);
|
|
119
|
+
expect(data.append).toHaveBeenCalledWith(
|
|
120
|
+
'exportFormFields',
|
|
121
|
+
'false'
|
|
122
|
+
);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
|
|
112
127
|
describe('Page ranges', () => {
|
|
113
128
|
describe('when nativePageRanges is valid', () => {
|
|
114
129
|
it('should append nativePageRanges to data', () => {
|
package/src/main.config.ts
CHANGED
|
@@ -15,7 +15,9 @@ export enum ChromiumRoute {
|
|
|
15
15
|
* @enum {string}
|
|
16
16
|
*/
|
|
17
17
|
enum PdfEngineRoute {
|
|
18
|
-
MERGE = 'merge'
|
|
18
|
+
MERGE = 'merge',
|
|
19
|
+
READ_METADATA = 'metadata/read',
|
|
20
|
+
WRITE_METADATA = 'metadata/write'
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
/**
|
|
@@ -75,7 +77,9 @@ export class Chromiumly {
|
|
|
75
77
|
* @type {Object}
|
|
76
78
|
*/
|
|
77
79
|
public static readonly PDF_ENGINE_ROUTES = {
|
|
78
|
-
merge: PdfEngineRoute.MERGE
|
|
80
|
+
merge: PdfEngineRoute.MERGE,
|
|
81
|
+
readMetadata: PdfEngineRoute.READ_METADATA,
|
|
82
|
+
writeMetadata: PdfEngineRoute.WRITE_METADATA
|
|
79
83
|
};
|
|
80
84
|
|
|
81
85
|
/**
|
|
@@ -4,7 +4,12 @@ import path from 'path';
|
|
|
4
4
|
import FormData from 'form-data';
|
|
5
5
|
|
|
6
6
|
import { Chromiumly } from '../main.config';
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
GotenbergUtils,
|
|
9
|
+
PathLikeOrReadStream,
|
|
10
|
+
PdfFormat,
|
|
11
|
+
Metadata
|
|
12
|
+
} from '../common';
|
|
8
13
|
import { LibreOfficeUtils, PageProperties } from '../libre-office';
|
|
9
14
|
import { PDFEngineUtils } from './utils/engine.utils';
|
|
10
15
|
|
|
@@ -50,6 +55,10 @@ export class PDFEngine {
|
|
|
50
55
|
}: {
|
|
51
56
|
files: PathLikeOrReadStream[];
|
|
52
57
|
properties?: PageProperties;
|
|
58
|
+
/**
|
|
59
|
+
* @deprecated Starting from Gotenberg version 8.0.0, LibreOffice no longer provides support for pdfFormat.
|
|
60
|
+
* @see {@link https://github.com/gotenberg/gotenberg/releases/tag/v8.0.0}
|
|
61
|
+
*/
|
|
53
62
|
pdfFormat?: PdfFormat;
|
|
54
63
|
pdfUA?: boolean;
|
|
55
64
|
merge?: boolean;
|
|
@@ -79,6 +88,48 @@ export class PDFEngine {
|
|
|
79
88
|
return GotenbergUtils.fetch(endpoint, data);
|
|
80
89
|
}
|
|
81
90
|
|
|
91
|
+
/**
|
|
92
|
+
* Reads metadata from the provided files.
|
|
93
|
+
*
|
|
94
|
+
* @param {PathLikeOrReadStream[]} files An array of PathLikes or ReadStreams to the PDF files.
|
|
95
|
+
* @returns {Promise<Buffer>} A Promise resolving to the metadata buffer.
|
|
96
|
+
*/
|
|
97
|
+
public static async readMetadata(
|
|
98
|
+
files: PathLikeOrReadStream[]
|
|
99
|
+
): Promise<Buffer> {
|
|
100
|
+
const data = new FormData();
|
|
101
|
+
|
|
102
|
+
await PDFEngineUtils.addFiles(files, data);
|
|
103
|
+
|
|
104
|
+
const endpoint = `${Chromiumly.GOTENBERG_ENDPOINT}/${Chromiumly.PDF_ENGINES_PATH}/${Chromiumly.PDF_ENGINE_ROUTES.readMetadata}`;
|
|
105
|
+
|
|
106
|
+
return GotenbergUtils.fetch(endpoint, data);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Writes metadata to the provided PDF files.
|
|
111
|
+
*
|
|
112
|
+
* @param {PathLikeOrReadStream[]} files - An array of PathLikes or ReadStreams to the PDF files.
|
|
113
|
+
* @param {Metadata} metadata - Metadata to be written.
|
|
114
|
+
* @returns {Promise<Buffer>} A Promise that resolves to the PDF file containing metadata as a buffer.
|
|
115
|
+
*/
|
|
116
|
+
public static async writeMetadata({
|
|
117
|
+
files,
|
|
118
|
+
metadata
|
|
119
|
+
}: {
|
|
120
|
+
files: PathLikeOrReadStream[];
|
|
121
|
+
metadata: Metadata;
|
|
122
|
+
}): Promise<Buffer> {
|
|
123
|
+
const data = new FormData();
|
|
124
|
+
data.append('metadata', JSON.stringify(metadata));
|
|
125
|
+
|
|
126
|
+
await PDFEngineUtils.addFiles(files, data);
|
|
127
|
+
|
|
128
|
+
const endpoint = `${Chromiumly.GOTENBERG_ENDPOINT}/${Chromiumly.PDF_ENGINES_PATH}/${Chromiumly.PDF_ENGINE_ROUTES.writeMetadata}`;
|
|
129
|
+
|
|
130
|
+
return GotenbergUtils.fetch(endpoint, data);
|
|
131
|
+
}
|
|
132
|
+
|
|
82
133
|
/**
|
|
83
134
|
* Generates a PDF file from a buffer and saves it to the "__generated__" directory.
|
|
84
135
|
*
|
|
@@ -68,6 +68,42 @@ describe('PDFEngine', () => {
|
|
|
68
68
|
});
|
|
69
69
|
});
|
|
70
70
|
|
|
71
|
+
describe('readMetadata', () => {
|
|
72
|
+
it('should return a buffer', async () => {
|
|
73
|
+
mockPromisesAccess.mockResolvedValue();
|
|
74
|
+
mockFetch.mockResolvedValue(new Response('content'));
|
|
75
|
+
const buffer = await PDFEngine.readMetadata(['path/to/file.pdf']);
|
|
76
|
+
expect(buffer).toEqual(Buffer.from('content'));
|
|
77
|
+
expect(mockFormDataAppend).toHaveBeenCalledTimes(1);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
describe('writeMetadata', () => {
|
|
82
|
+
it('should return a buffer', async () => {
|
|
83
|
+
mockPromisesAccess.mockResolvedValue();
|
|
84
|
+
mockFetch.mockResolvedValue(new Response('content'));
|
|
85
|
+
const buffer = await PDFEngine.writeMetadata({
|
|
86
|
+
files: ['path/to/file.pdf'],
|
|
87
|
+
metadata: {
|
|
88
|
+
Author: 'John Doe',
|
|
89
|
+
Copyright: 'John Doe',
|
|
90
|
+
CreationDate: Date.now(),
|
|
91
|
+
Creator: 'Chromiumly',
|
|
92
|
+
Keywords: ['first', 'second'],
|
|
93
|
+
Marked: true,
|
|
94
|
+
ModDate: Date.now(),
|
|
95
|
+
PDFVersion: 1.7,
|
|
96
|
+
Producer: 'Chromiumly',
|
|
97
|
+
Subject: 'Sample',
|
|
98
|
+
Title: 'Sample',
|
|
99
|
+
Trapped: 'Unknown'
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
expect(buffer).toEqual(Buffer.from('content'));
|
|
103
|
+
expect(mockFormDataAppend).toHaveBeenCalledTimes(2);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
|
|
71
107
|
describe('generate', () => {
|
|
72
108
|
const mockFilename = 'test.pdf';
|
|
73
109
|
const mockBuffer = Buffer.from('mock pdf content');
|