@things-factory/integration-headless 7.0.37 → 7.0.38
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/dist-server/engine/connector/headless-connector.js +1 -1
- package/dist-server/engine/connector/headless-connector.js.map +1 -1
- package/dist-server/engine/task/headless-pdf-capture.js +11 -7
- package/dist-server/engine/task/headless-pdf-capture.js.map +1 -1
- package/dist-server/engine/task/headless-pdf-open.js +36 -11
- package/dist-server/engine/task/headless-pdf-open.js.map +1 -1
- package/dist-server/engine/task/headless-pdf-save.js +3 -2
- package/dist-server/engine/task/headless-pdf-save.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/server/engine/connector/headless-connector.ts +1 -1
- package/server/engine/task/headless-pdf-capture.ts +11 -7
- package/server/engine/task/headless-pdf-open.ts +39 -13
- package/server/engine/task/headless-pdf-save.ts +4 -2
- package/translations/en.json +2 -0
- package/translations/ja.json +2 -0
- package/translations/ko.json +2 -0
- package/translations/ms.json +2 -0
- package/translations/zh.json +2 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/integration-headless",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.38",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"things-factory": true,
|
|
6
6
|
"author": "heartyoh <heartyoh@hatiolab.com>",
|
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
"clean": "npm run clean:server"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@things-factory/integration-base": "^7.0.
|
|
25
|
+
"@things-factory/integration-base": "^7.0.38",
|
|
26
26
|
"@things-factory/pdf": "^7.0.37",
|
|
27
27
|
"ejs": "^3.1.10",
|
|
28
28
|
"pdf-lib": "^1.17.1"
|
|
29
29
|
},
|
|
30
|
-
"gitHead": "
|
|
30
|
+
"gitHead": "735942469a12f77ed857ad617b97148d178d162d"
|
|
31
31
|
}
|
|
@@ -140,7 +140,7 @@ async function HeadlessPDFCapture(step, context) {
|
|
|
140
140
|
|
|
141
141
|
HeadlessPDFCapture.parameterSpec = [
|
|
142
142
|
{
|
|
143
|
-
type: '
|
|
143
|
+
type: 'textarea',
|
|
144
144
|
name: 'htmlContent',
|
|
145
145
|
label: 'html-content'
|
|
146
146
|
},
|
|
@@ -148,24 +148,28 @@ HeadlessPDFCapture.parameterSpec = [
|
|
|
148
148
|
type: 'select',
|
|
149
149
|
name: 'format',
|
|
150
150
|
label: 'page-format',
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
151
|
+
property: {
|
|
152
|
+
options: [
|
|
153
|
+
{ display: 'A4', value: 'A4' },
|
|
154
|
+
{ display: 'A3', value: 'A3' },
|
|
155
|
+
{ display: 'Letter', value: 'Letter' },
|
|
156
|
+
{ display: 'Legal', value: 'Legal' }
|
|
157
|
+
]
|
|
158
|
+
},
|
|
157
159
|
description: 'Select the paper format for the PDF'
|
|
158
160
|
},
|
|
159
161
|
{
|
|
160
162
|
type: 'string',
|
|
161
163
|
name: 'width',
|
|
162
164
|
label: 'page-width',
|
|
165
|
+
placeholder: '(e.g., "8.5in", "21cm", "600px")',
|
|
163
166
|
description: 'Specify the width of the page (e.g., "8.5in", "21cm", "600px")'
|
|
164
167
|
},
|
|
165
168
|
{
|
|
166
169
|
type: 'string',
|
|
167
170
|
name: 'height',
|
|
168
171
|
label: 'page-height',
|
|
172
|
+
placeholder: '(e.g., "11in", "29.7cm", "800px")',
|
|
169
173
|
description: 'Specify the height of the page (e.g., "11in", "29.7cm", "800px")'
|
|
170
174
|
},
|
|
171
175
|
{
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as ejs from 'ejs'
|
|
2
2
|
import { PDFDocument } from 'pdf-lib'
|
|
3
|
-
|
|
4
3
|
import { TaskRegistry } from '@things-factory/integration-base'
|
|
5
4
|
import { ConnectionManager } from '@things-factory/integration-base'
|
|
6
5
|
|
|
@@ -15,11 +14,38 @@ async function HeadlessPDFOpen(step, context) {
|
|
|
15
14
|
fileName // 추가된 파일 이름
|
|
16
15
|
} = stepOptions || {}
|
|
17
16
|
|
|
18
|
-
// var { domain, data, variables } = context
|
|
19
|
-
// var headlessPool = ConnectionManager.getConnectionInstanceByName(domain, connectionName)
|
|
20
|
-
|
|
21
17
|
const pdf = await PDFDocument.create()
|
|
22
18
|
|
|
19
|
+
const headlessPool = ConnectionManager.getConnectionInstanceByName(context.domain, connectionName)
|
|
20
|
+
let browser
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
browser = await headlessPool.acquire()
|
|
24
|
+
const page = await browser.newPage()
|
|
25
|
+
|
|
26
|
+
// Cover Page를 PDF로 변환
|
|
27
|
+
if (coverPage) {
|
|
28
|
+
await page.setContent(coverPage)
|
|
29
|
+
const coverPageBuffer = await page.pdf()
|
|
30
|
+
coverPage = coverPageBuffer
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Last Page를 PDF로 변환
|
|
34
|
+
if (lastPage) {
|
|
35
|
+
await page.setContent(lastPage)
|
|
36
|
+
const lastPageBuffer = await page.pdf()
|
|
37
|
+
lastPage = lastPageBuffer
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
await page.close()
|
|
41
|
+
headlessPool.release(browser)
|
|
42
|
+
} catch (error) {
|
|
43
|
+
if (browser) {
|
|
44
|
+
await browser.close()
|
|
45
|
+
}
|
|
46
|
+
throw error
|
|
47
|
+
}
|
|
48
|
+
|
|
23
49
|
const data = {
|
|
24
50
|
pdf,
|
|
25
51
|
coverPage,
|
|
@@ -27,8 +53,8 @@ async function HeadlessPDFOpen(step, context) {
|
|
|
27
53
|
header,
|
|
28
54
|
footer,
|
|
29
55
|
watermark,
|
|
30
|
-
fileName,
|
|
31
|
-
pageCount: 0
|
|
56
|
+
fileName,
|
|
57
|
+
pageCount: 0
|
|
32
58
|
}
|
|
33
59
|
|
|
34
60
|
context.__headless_pdf = data
|
|
@@ -40,27 +66,27 @@ async function HeadlessPDFOpen(step, context) {
|
|
|
40
66
|
|
|
41
67
|
HeadlessPDFOpen.parameterSpec = [
|
|
42
68
|
{
|
|
43
|
-
type: '
|
|
69
|
+
type: 'textarea',
|
|
44
70
|
name: 'coverPage',
|
|
45
71
|
label: 'pdf-cover-page'
|
|
46
72
|
},
|
|
47
73
|
{
|
|
48
|
-
type: '
|
|
74
|
+
type: 'textarea',
|
|
49
75
|
name: 'lastPage',
|
|
50
76
|
label: 'pdf-last-page'
|
|
51
77
|
},
|
|
52
78
|
{
|
|
53
|
-
type: '
|
|
79
|
+
type: 'textarea',
|
|
54
80
|
name: 'header',
|
|
55
81
|
label: 'header' // header template
|
|
56
82
|
},
|
|
57
83
|
{
|
|
58
|
-
type: '
|
|
84
|
+
type: 'textarea',
|
|
59
85
|
name: 'footer',
|
|
60
86
|
label: 'footer' // footer template
|
|
61
87
|
},
|
|
62
88
|
{
|
|
63
|
-
type: '
|
|
89
|
+
type: 'textarea',
|
|
64
90
|
name: 'watermark',
|
|
65
91
|
label: 'watermark' // watermark
|
|
66
92
|
},
|
|
@@ -70,6 +96,6 @@ HeadlessPDFOpen.parameterSpec = [
|
|
|
70
96
|
label: 'filename' // 파일 이름 지정
|
|
71
97
|
}
|
|
72
98
|
]
|
|
73
|
-
HeadlessPDFOpen.help = 'integration/task/headless-open'
|
|
99
|
+
HeadlessPDFOpen.help = 'integration/task/headless-pdf-open'
|
|
74
100
|
|
|
75
|
-
TaskRegistry.registerTaskHandler('headless-open', HeadlessPDFOpen)
|
|
101
|
+
TaskRegistry.registerTaskHandler('headless-pdf-open', HeadlessPDFOpen)
|
|
@@ -7,10 +7,12 @@ import { TaskRegistry } from '@things-factory/integration-base'
|
|
|
7
7
|
async function HeadlessPDFSave(step, context) {
|
|
8
8
|
var { params: stepOptions } = step
|
|
9
9
|
var { outputPath } = stepOptions || {}
|
|
10
|
-
var {
|
|
10
|
+
var { domain, data, __headless_pdf } = context
|
|
11
|
+
|
|
12
|
+
var { pdf, coverPage, lastPage, watermark, fileName } = __headless_pdf
|
|
11
13
|
|
|
12
14
|
// 파일 이름이 설정되지 않았을 경우 기본 파일 이름 생성
|
|
13
|
-
const finalFileName =
|
|
15
|
+
const finalFileName = fileName || `document-${Date.now()}.pdf`
|
|
14
16
|
const savePath = path.join(outputPath || '/path/to/default/storage', finalFileName)
|
|
15
17
|
|
|
16
18
|
// PDF 문서에 coverPage 및 lastPage 추가
|
package/translations/en.json
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
"label.page-width": "page width",
|
|
13
13
|
"label.pdf-cover-page": "cover page template",
|
|
14
14
|
"label.pdf-last-page": "last page template",
|
|
15
|
+
"label.pool-size-max": "maximum pool size",
|
|
16
|
+
"label.pool-size-min": "minimum pool size",
|
|
15
17
|
"label.prefer-css-page-size": "prefer css page size",
|
|
16
18
|
"label.print-background": "print background",
|
|
17
19
|
"label.scale": "scale",
|
package/translations/ja.json
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
"label.page-width": "ページ幅",
|
|
13
13
|
"label.pdf-cover-page": "表紙テンプレート",
|
|
14
14
|
"label.pdf-last-page": "最終ページテンプレート",
|
|
15
|
+
"label.pool-size-max": "最大プールサイズ",
|
|
16
|
+
"label.pool-size-min": "最小プールサイズ",
|
|
15
17
|
"label.prefer-css-page-size": "cssページサイズを優先",
|
|
16
18
|
"label.print-background": "背景を印刷",
|
|
17
19
|
"label.scale": "スケール",
|
package/translations/ko.json
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
"label.page-width": "페이지 폭",
|
|
13
13
|
"label.pdf-cover-page": "표지 템플릿",
|
|
14
14
|
"label.pdf-last-page": "뒷표지 템플릿",
|
|
15
|
+
"label.pool-size-max": "최소 풀(Pool) 사이즈",
|
|
16
|
+
"label.pool-size-min": "최대 풀(Pool) 사이즈",
|
|
15
17
|
"label.prefer-css-page-size": "선호 CSS 페이지 크기",
|
|
16
18
|
"label.print-background": "배경 포함여부",
|
|
17
19
|
"label.scale": "페이지 비율",
|
package/translations/ms.json
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
"label.page-width": "lebar halaman",
|
|
13
13
|
"label.pdf-cover-page": "templat muka surat depan",
|
|
14
14
|
"label.pdf-last-page": "templat muka surat terakhir",
|
|
15
|
+
"label.pool-size-max": "saiz pool maksimum",
|
|
16
|
+
"label.pool-size-min": "saiz pool minimum",
|
|
15
17
|
"label.prefer-css-page-size": "utamakan saiz halaman css",
|
|
16
18
|
"label.print-background": "cetak latar belakang",
|
|
17
19
|
"label.scale": "skala",
|
package/translations/zh.json
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
"label.page-width": "页面宽度",
|
|
13
13
|
"label.pdf-cover-page": "封面模板",
|
|
14
14
|
"label.pdf-last-page": "尾页模板",
|
|
15
|
+
"label.pool-size-max": "最大池大小",
|
|
16
|
+
"label.pool-size-min": "最小池大小",
|
|
15
17
|
"label.prefer-css-page-size": "偏好 css 页面大小",
|
|
16
18
|
"label.print-background": "打印背景",
|
|
17
19
|
"label.scale": "缩放",
|