@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/integration-headless",
3
- "version": "7.0.37",
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.33",
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": "28b852bbf7bd1160522195f9db1775db56f18b30"
30
+ "gitHead": "735942469a12f77ed857ad617b97148d178d162d"
31
31
  }
@@ -53,7 +53,7 @@ export class HeadlessConnector implements Connector {
53
53
  }
54
54
 
55
55
  get taskPrefixes() {
56
- return ['headless']
56
+ return ['headless-pdf']
57
57
  }
58
58
 
59
59
  get description() {
@@ -140,7 +140,7 @@ async function HeadlessPDFCapture(step, context) {
140
140
 
141
141
  HeadlessPDFCapture.parameterSpec = [
142
142
  {
143
- type: 'string',
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
- options: [
152
- { label: 'A4', value: 'A4' },
153
- { label: 'A3', value: 'A3' },
154
- { label: 'Letter', value: 'Letter' },
155
- { label: 'Legal', value: 'Legal' }
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, // 파일 이름을 context.data에 저장
31
- pageCount: 0 // 페이지 카운트를 초기화하여 context에 저장
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: 'string',
69
+ type: 'textarea',
44
70
  name: 'coverPage',
45
71
  label: 'pdf-cover-page'
46
72
  },
47
73
  {
48
- type: 'string',
74
+ type: 'textarea',
49
75
  name: 'lastPage',
50
76
  label: 'pdf-last-page'
51
77
  },
52
78
  {
53
- type: 'string',
79
+ type: 'textarea',
54
80
  name: 'header',
55
81
  label: 'header' // header template
56
82
  },
57
83
  {
58
- type: 'string',
84
+ type: 'textarea',
59
85
  name: 'footer',
60
86
  label: 'footer' // footer template
61
87
  },
62
88
  {
63
- type: 'string',
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 { pdf, coverPage, lastPage, header, footer, watermark } = context.data
10
+ var { domain, data, __headless_pdf } = context
11
+
12
+ var { pdf, coverPage, lastPage, watermark, fileName } = __headless_pdf
11
13
 
12
14
  // 파일 이름이 설정되지 않았을 경우 기본 파일 이름 생성
13
- const finalFileName = context.data.fileName || `document-${Date.now()}.pdf`
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 추가
@@ -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",
@@ -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": "スケール",
@@ -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": "페이지 비율",
@@ -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",
@@ -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": "缩放",