page2pdf_server 1.1.2 → 2.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.
Files changed (70) hide show
  1. package/README.md +6 -5
  2. package/package.json +5 -70
  3. package/src/index.ts +10 -18
  4. package/src/types.d.ts +161 -97
  5. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -28
  6. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -15
  7. package/.github/ISSUE_TEMPLATE/refactoring.md +0 -15
  8. package/.github/PULL_REQUEST_TEMPLATE.md +0 -18
  9. package/.github/stale.yml +0 -17
  10. package/.github/workflows/cd.yml +0 -75
  11. package/.github/workflows/ci.yml +0 -36
  12. package/.prettierrc +0 -8
  13. package/.vscode/settings.json +0 -3
  14. package/config/default.json +0 -10
  15. package/config/development.json +0 -3
  16. package/config/production.json +0 -3
  17. package/config/test.json +0 -3
  18. package/ecosystem.config.js +0 -41
  19. package/jest.config.js +0 -35
  20. package/nodemon.json +0 -6
  21. package/src/CSS/345/205/274/345/256/271/346/200/247.txt +0 -125
  22. package/src/__tests__/UrltoPdf/generatePdf.test.d.ts +0 -1
  23. package/src/__tests__/UrltoPdf/generatePdf.test.ts +0 -207
  24. package/src/__tests__/UrltoPdf/pdfSplit.test.d.ts +0 -1
  25. package/src/__tests__/UrltoPdf/pdfSplit.test.ts +0 -69
  26. package/src/__tests__/helpers/index.d.ts +0 -2
  27. package/src/__tests__/helpers/index.ts +0 -21
  28. package/src/__tests__/home.test.d.ts +0 -1
  29. package/src/__tests__/home.test.ts +0 -77
  30. package/src/app.ts +0 -49
  31. package/src/components/home/controller.ts +0 -32
  32. package/src/components/home/index.ts +0 -4
  33. package/src/components/home/pdfController.ts +0 -118
  34. package/src/components/home/services.ts +0 -31
  35. package/src/components/home/splitController.ts +0 -134
  36. package/src/components/home/validators.ts +0 -12
  37. package/src/configEnv/index.ts +0 -62
  38. package/src/db/home.ts +0 -14
  39. package/src/helpers/apiResponse.ts +0 -10
  40. package/src/helpers/dataSanitizers.ts +0 -33
  41. package/src/helpers/error/ApiError.ts +0 -25
  42. package/src/helpers/error/ForbiddenError.ts +0 -15
  43. package/src/helpers/error/NotFoundException.ts +0 -15
  44. package/src/helpers/error/TimeOutError.ts +0 -20
  45. package/src/helpers/error/UnauthorizedError.ts +0 -15
  46. package/src/helpers/error/ValidationError.ts +0 -20
  47. package/src/helpers/error/index.ts +0 -15
  48. package/src/helpers/index.ts +0 -2
  49. package/src/helpers/loggers.ts +0 -75
  50. package/src/middlewares/errorHandler.ts +0 -52
  51. package/src/new_tab1.mhtml +0 -722
  52. package/src/routes/index.ts +0 -22
  53. package/src/server.ts +0 -30
  54. package/src/testCSS.html +0 -241
  55. package/src/types/global.d.ts +0 -13
  56. package/src/types/request/config.ts +0 -70
  57. package/src/types/request/home.ts +0 -3
  58. package/src/types/request/split.ts +0 -18
  59. package/src/types/response/AppInformation.ts +0 -9
  60. package/src/types/response/index.ts +0 -5
  61. package/src/utils/array.ts +0 -19
  62. package/src/utils/auth.ts +0 -12
  63. package/src/utils/crypt.ts +0 -25
  64. package/src/utils/filter.ts +0 -59
  65. package/src/utils/object.ts +0 -58
  66. package/src/utils/pdfgen.ts +0 -1045
  67. package/src/utils/url.ts +0 -54
  68. package/src//346/265/213/350/257/225.txt +0 -268
  69. package/test//346/211/223/345/215/260/346/234/215/345/212/241.http +0 -17
  70. package//346/226/207/344/271/246/346/211/223/345/215/260/350/275/254/346/215/242/345/231/250.bat +0 -2
@@ -1,36 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- pull_request:
5
- types: [ opened, synchronize, reopened ]
6
-
7
- jobs:
8
- test:
9
- runs-on: ubuntu-latest
10
-
11
- strategy:
12
- matrix:
13
- node-version: [ '16' ]
14
-
15
- steps:
16
- - name: Checkout repository
17
- uses: actions/checkout@v2.3.4
18
-
19
- - name: Set up Node.js ${{ matrix.node-version }}
20
- uses: actions/setup-node@v2.4.1
21
- with:
22
- node-version: ${{ matrix.node-version }}
23
-
24
- - name: Install Dependencies
25
- run: yarn
26
-
27
- - name: Run Lint
28
- run: yarn lint
29
-
30
- - name: Run Test code
31
- run: yarn test
32
-
33
- - name: Build module
34
- run: yarn build
35
-
36
-
package/.prettierrc DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "parser": "typescript",
3
- "semi": true,
4
- "singleQuote": false,
5
- "tabWidth": 2,
6
- "trailingComma": "all",
7
- "printWidth": 80
8
- }
@@ -1,3 +0,0 @@
1
- {
2
- "editor.stickyScroll.enabled": true
3
- }
@@ -1,10 +0,0 @@
1
- {
2
- "base_path": "C:\\page2pdf-server\\pdfs",
3
- "default_file": "合并后的文档",
4
- "server_port": 9389,
5
- "chrome_port": 9872,
6
- "size":[
7
- {"name":"D8", "css": "4in 6in","w": 4,"h": 6},
8
- {"name":"D4", "css": "10.4in 12.6in","w": 10.4,"h": 12.6}
9
- ]
10
- }
@@ -1,3 +0,0 @@
1
- {
2
-
3
- }
@@ -1,3 +0,0 @@
1
- {
2
-
3
- }
package/config/test.json DELETED
@@ -1,3 +0,0 @@
1
- {
2
-
3
- }
@@ -1,41 +0,0 @@
1
- module.exports = {
2
- apps: [
3
- {
4
- name: '<app-name>',
5
- script: 'dist/src/index.js',
6
- // Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
7
- exec_mode: 'cluster',
8
- instances: 2,
9
- kill_timeout: 5000,
10
- autorestart: true,
11
- max_restarts: 10,
12
- watch: true,
13
- watch_options: {
14
- followSymlinks: false,
15
- },
16
- max_memory_restart: '1G',
17
- env: {
18
- NODE_ENV: 'development',
19
- },
20
- env_production: {
21
- NODE_ENV: 'production',
22
- port: 8080,
23
- },
24
- merge_logs: true,
25
- log_date_format: 'YYYY-MM-DDTHH:mm:ss.sssZ',
26
- },
27
- ],
28
- // https://pm2.keymetrics.io/docs/usage/deployment/
29
- deploy: {
30
- production: {
31
- key: process.env.EC2_PEM_PATH,
32
- host: process.env.EC2_HOST,
33
- user: 'ubuntu',
34
- ref: 'origin/main',
35
- repo: 'git@github.com:<username>/<repo-name>.git',
36
- path: '/home/ubuntu',
37
- 'post-deploy':
38
- 'yarn && yarn clean && yarn build && pm2 startOrRestart ecosystem.config.js --env production && pm2 set pm2:autodump true && pm2 save',
39
- },
40
- },
41
- };
package/jest.config.js DELETED
@@ -1,35 +0,0 @@
1
- const { defaults: tsjPreset } = require("ts-jest/presets");
2
-
3
- module.exports = {
4
- preset: "ts-jest",
5
- moduleFileExtensions: ["ts", "js", "json"],
6
- transform: {
7
- "^.+\\.(ts|tsx)$": [
8
- "ts-jest",
9
- {
10
- tsconfig: "tsconfig.json",
11
- diagnostics: false,
12
- },
13
- ],
14
- ...tsjPreset.transform,
15
- },
16
- testPathIgnorePatterns: ["dist"],
17
- testMatch: ["**/__tests__/**/*.test.(ts|js)"],
18
- testEnvironment: "node",
19
- moduleNameMapper: {
20
- "@/(.*)": "<rootDir>/src/$1",
21
- },
22
- watchPlugins: [
23
- "jest-watch-typeahead/filename",
24
- "jest-watch-typeahead/testname",
25
- ],
26
- coverageThreshold: {
27
- global: {
28
- branches: 1,
29
- functions: 1,
30
- lines: 1,
31
- statements: 1,
32
- },
33
- },
34
- coverageReporters: ["json", "lcov", "text", "clover"],
35
- };
package/nodemon.json DELETED
@@ -1,6 +0,0 @@
1
- {
2
- "watch": ["src/**/*.ts", ".env"],
3
- "ext": "ts,js,.env",
4
- "verbose": false,
5
- "exec": "ts-node -r tsconfig-paths/register --files src/index.ts"
6
- }
@@ -1,125 +0,0 @@
1
- CSS内容层次可以输出页脚页眉留白的,浏览器打印给pdf也能输出页脚页眉左右上下留白,最终打印环节真实打印机还可以设置装订线尺寸占用区以及页脚页码输出区域的。
2
- Chrome浏览器已经 可支持的有这些:
3
- <style>
4
- @page :left { #偶数页的 右边流出装订线尺寸位置的
5
- margin-right: 7cm;
6
- }
7
- @page :right { ##封面,奇数页;
8
- margin-left: 7cm;
9
- }
10
- @page :first {
11
- margin-top: 5cm;
12
- }
13
- </style>
14
-
15
-
16
- 目前浏览器Chrome还不支持的有这些: ! !
17
- @page:right{
18
- @bottom-left {
19
- content: "Our Cats";
20
- }
21
- @bottom-right {
22
- content: counter(page);
23
- }
24
- @top-right {
25
- content: string(doctitle);
26
- }
27
- }
28
- @bottom-center {
29
- content: "asdaqq7q";
30
- }
31
- @page :right {
32
- @bottom-center {
33
- content: "aEdaqq7q";
34
- }
35
- }
36
-
37
-
38
- 【局限】 尝试在CDP打印命令Page.printToPDF,往参数headerTemplate footerTemplate加入脚本,可加了脚本<script>全都不会运行啊。
39
- 也就是说页眉页脚<span class=pageNumber></span>/<span class=totalPages></span>这两个数字Page.printToPDF({生成的话我没法改动它。
40
- 它只会武断的1/3 2/3 3/3的编号,甚至不会省略掉首页页码的,每一页都要计入总页数的。也没法适应双面打印把输出的位置左右对调一下,左右边上位置如何处置。
41
-
42
- [后续] 正因为Page.printToPDF()不能支持多个url一次性生成pdf的, @page :right @bottom-right,,
43
- 这些CSS3标准在这里需要合并多个文档的打印要求中,实际这些都变得没有意义了。
44
- 奇数页偶数页的不是针对部分某一个url来讲的,右边流出装订线尺寸位置的,双面打印也需要挪到真实物理打印机最后环节去设置才合适。
45
- 所以,打印靠css不能解决复杂问题。
46
- printToPDF()追溯上去依赖的Page.navigate({url}),这个操作实际和打印预览完全没一点关系,这个函数完全就是普通网页导航进入一个链接<a/>;
47
- 还有追溯上去另外一种是Page.setDocumentContent({ frameId, html: html })设置 Page 的 html 内容的,
48
- 而该操作的html这个参数也不可能随意合并多页面(应用层的事情)文档DOM还有层次结构的, Iframe标签?。终归无法合并多个url内容打印。
49
- Page.close 可以关闭页面Tab ,Page实际就是浏览器的单一网站窗口; 通过 CDP 来和 chromium 通信。
50
- 连续2次setDocumentContent(html)只能显示最后一次操作的html内容的;
51
- 如果是setDocumentContent({html:html1+html2})内容的可能混乱:脚本css以及DOM的id都可能交叉影响了,最终强制合并输出效果可能不是预期的网页内容。
52
- 连续两次Page.navigate({url})? 明显无法合并输出的。
53
- .navigate和.setDocumentContent交叉顺序的,也都是会被最后的操作冲掉覆盖前面的url或html的,肯定无法合并后给.printToPDF()搞一次合并打印的。
54
- CDP({})前后两次CDP打开新的Page若前面没有close(),那么旧Page.printToPDF也会被后面新Page.navigate所覆盖的,浏览器不支持合并打印的!
55
- Page.printToPDF({})实际也只能类似Chrome打印预览菜单一致,只能打印当前页面,动态内容页面也是随着鼠标用户操作有可能不一样的打印结果。
56
-
57
- 【精准控制打印位置思路】
58
- 简单直接做法<span position: absolute; bottom: -1200vh;">尾巴</span>但须知道整个文档打印几张纸的,然后在作为参数优化css的计算再来决定做控制,可能会有重叠paint需强制断开页。
59
- 中间区域<div style="position: relative; page-break-before: always;">¥..<span style="position: absolute;top: calc(200vh - 3rem);">尾巴</span>
60
- 必须知道该区域有几张纸;可能会有重叠paint需强制断开页。
61
- 浮动布局<div style="display: flex; flex-direction: column; align-content: flex-end; height: 1300vh;"><div height: 100%;>¥</div><div display: inline-flex;>尾巴</div>必须知道该区域有几张纸,不用担心会有重叠paint。
62
- 后面一定有强制页断开的情景,把紧邻前面的元素定位到纸张的底部位置?【关键】是强制分页能确保独立性。
63
- <div css={{"@media print": {pageBreakBefore: 'always'}}}><span style="position: absolute;top: -3rem;">尾巴</span><Text>紧跟的新页</Text></div>不需要算区域有几张,不用担心会有重叠paint。
64
- 最后一页情况乱特例<div style="height: 0vh; position: relative; page-break-before: always;"><span style="display: block; position:absolute; bottom:0;">尾巴</span></div>最后多个尾随的空白页!多出一个空白页情况的不打印?
65
- 2023/11/23:验证这下的代码还是无法正常打印页码 位置的。每一个重复div标签计数一次,只显示一次。
66
- <div css={{"@media print": {pageBreakBefore: 'always'}}}>
67
- <div
68
- css={{
69
- position: 'absolute',
70
- top: '-2rem',
71
- "@media print": {
72
- ":after": {
73
- content: 'counter(page)',
74
- },
75
- counterIncrement: 'page',
76
- // position: 'absolute',
77
- // bottom: '8rem',
78
- right: '-1rem',
79
- fontSize: '12px',
80
- color: '#777',
81
- padding: '5px',
82
- backgroundColor: '#f7f7f7',
83
- border: '1px solid #ddd',
84
- borderRadius: '2px',
85
- // pageBreakAfter: 'always',
86
- }
87
- }}
88
- >
89
- 尾巴
90
- </div>
91
- <Text>紧跟的新页</Text>
92
- </div>
93
- 【动态内容遇到的打印问题】末尾插入方式“只能支持页面启动就明确打印页数的才有效;用副作用中间纯动态变更的就不行了,打印页数早就被限制死了,后面无法再改了。
94
- const [vtpage, setVtpage] = React.useState(Math.ceil((yBdv0?.top!-yHolw?.bottom!)/yHolw?.width!) || 0);
95
- React.useEffect(() => {
96
- if((yBdv0?.top!-yHolw?.bottom!)>0 && (yHolw?.width!)<yBdv0?.width! && (yHolw?.bottom!)>0)
97
- {
98
- console.log(`撞见该是却也显示了情形:`, yHolw,"虚拟断开",yBdv0, "系数有=", (yBdv0?.top!-yHolw?.bottom!)/yHolw?.width!);
99
- //没处理【报错】Too many re-renders. React limits the number of renders to prevent an infinite loop.
100
- setVtpage(Math.ceil((yBdv0?.top!-yHolw?.bottom!)/yHolw?.width!) || 0);
101
- }
102
- }, [yBdv0, yHolw, setVtpage]);
103
- return <div ref={refBdv0} css={{"@media print": {pageBreakBefore:'always'}}}/>
104
- { (new Array(vtpage)).fill(null).map((_, i:number) => {
105
- console.log(`该是却也显示了情形加虚拟纸张数=`, vtpage,"断页i=",i);
106
- return <div key={i} css={{"@media print": {pageBreakBefore:'always'}}}/>;
107
- }) }
108
- foot: [
109
- '<div style=\\"position: relative; width: 100%; text-align: left; margin: 10px 0px 1.5mm; font-size: 8pt;\\">',
110
- '<div style=\\"position: absolute; text-align: left; top: 5px;left: 60px;\\"></div>',
111
- '<div style=\\"position: absolute; width: 100%; text-align: center; top: 5px;\\"></div>',
112
- '<div style=\\"-NOT_DISPLAY- position: absolute; text-align: right;top: 5px;right: 20px;\\">共 <span>~totalPages~</span> 页 / 第 <span>~pageNumber~</span> 页</div>',
113
- "</div>",
114
- ],
115
- 不同版本的Chrome可能对CSS样式、字体渲染或布局引擎存在差异,导致生成的PDF不一致。若网页使用的字体在目标电脑上未安装,Chrome可能自动替换为默认字体,网络延迟资源加载失败,所以用Puppeteer替代浏览器原生打印。
116
-
117
- 失败,Error: 开启窗口尝试2次失败: 【因为】浏览器启动参数要配置特定端口号的。
118
-
119
- [功能按钮]
120
- 打印预览{非检验员也能用},
121
- 本地转Pdf{非检验员也能用,未盖章,安装node等},
122
- 后端转Pdf{未盖章,立刻下载,用户需排队},
123
- 上传Pdf盖章,
124
- 代理转Pdf{异步的,不能提前获得结果,独立服务器},
125
- 下载盖章后Pdf{假如有存储Pdf};
@@ -1 +0,0 @@
1
- export {};
@@ -1,207 +0,0 @@
1
- import { SuperAgentTest } from "supertest";
2
- import { OK } from "http-status/lib";
3
- import { initAgent } from "../helpers/index";
4
-
5
- //prettify真叼: 每个地方都给您报出 红色
6
- const TIMEOUT = 260000; //设置超时,避免单步歇菜
7
- let agent: SuperAgentTest;
8
-
9
- beforeAll(async () => {
10
- agent = await initAgent();
11
- });
12
-
13
- /**替代: 浏览器postman等工具发送包后,后端服务器Debug模式运行单步调试模式已经没能使用了。只好改为jest来对付了。
14
- 后面的/${CONFIG.APP.VER} 就是加了/v1结尾的该服务工程的版本号;
15
- * */
16
- describe("[PDF] => Gen", () => {
17
- describe("Post: '/api/pdf'", () => {
18
- it(
19
- "通用基本的",
20
- async () => {
21
- const response = await agent.post(`/api/pdf`).send({
22
- name: "asjsak啊实打实",
23
- lay: {
24
- head: [
25
- '<div style=\\"position: relative; width:100%; text-align:center; border-bottom: 1pt solid #eeeeee; margin: 3.5mm 0px 10px; font-size: 10pt\\"></span>',
26
- '<div style=\\"position: absolute; width:100%; text-align: center; bottom: 5px;\\"><span class=title></div>',
27
- '<div style=\\"position: absolute; text-align: right; bottom: 5px;right: 20px;\\">version: 1.0</div>',
28
- "</div>",
29
- ],
30
- foot: [
31
- '<div style=\\"position: relative; width: 100%; text-align: left; border-top: 1pt solid #eeeeee; margin: 10px 0px 1.5mm; font-size: 8pt;\\">',
32
- '<div style=\\"position: absolute; text-align: left; top: 5px;left: 60px;\\">YYYY-MM-DD</div>',
33
- '<div style=\\"position: absolute; width: 100%; text-align: center; top: 5px;\\">&copy;2022 ABCD</div>',
34
- '<div style=\\"position: absolute; text-align: right;top: 5px;right: 20px;\\"> <span>${pageNumber}</span> / <span>${totalPages}</span></div>',
35
- "</div>",
36
- ],
37
- },
38
- files: [
39
- {
40
- url: "testHtmlPrint.html",
41
- out: "testHtmlPrint转",
42
- headFrom: 4,
43
- frNo: 0,
44
- },
45
- {
46
- url: "横页脚的.pdf",
47
- displayHeaderFooter: true,
48
- rightHand: true,
49
- },
50
- ],
51
- });
52
- expect(response.status).toBe(OK);
53
- expect(Object.keys(response.body.data)).toEqual(["result"]);
54
- },
55
- TIMEOUT,
56
- );
57
-
58
- it(
59
- "汇总阶段第二个url独立pdf输出",
60
- async () => {
61
- const response = await agent.post(`/api/pdf`).send({
62
- name: "asjsak啊实打实",
63
- lay: {
64
- head: [
65
- '<div style=\\"position: relative; width:100%; text-align:center; border-bottom: 1pt solid #eeeeee; margin: 3.5mm 0px 10px; font-size: 10pt\\"></span>',
66
- '<div style=\\"position: absolute; width:100%; text-align: center; bottom: 5px;\\"><span class=title></div>',
67
- '<div style=\\"position: absolute; text-align: right; bottom: 5px;right: 20px;\\">version: 1.0</div>',
68
- "</div>",
69
- ],
70
- foot: [
71
- '<div style=\\"position: relative; width: 100%; text-align: left; border-top: 1pt solid #eeeeee; margin: 10px 0px 1.5mm; font-size: 8pt;\\">',
72
- '<div style=\\"position: absolute; text-align: left; top: 5px;left: 60px;\\">YYYY-MM-DD</div>',
73
- '<div style=\\"position: absolute; width: 100%; text-align: center; top: 5px;\\">&copy;2022 ABCD</div>',
74
- '<div style=\\"position: absolute; text-align: right;top: 5px;right: 20px;\\"> <span>${pageNumber}</span> / <span>${totalPages}</span></div>',
75
- "</div>",
76
- ],
77
- },
78
- files: [
79
- {
80
- url: "testHtmlPrint.html",
81
- out: "testHtmlPrint转",
82
- lay: {
83
- marginTop: 0.55,
84
- marginBottom: 0.45,
85
- },
86
- },
87
- {
88
- url: "横页脚的.pdf",
89
- merge: false,
90
- displayHeaderFooter: true,
91
- rightHand: true,
92
- lay: {
93
- marginTop: 0.55,
94
- marginBottom: 0.45,
95
- },
96
- },
97
- ],
98
- });
99
- expect(response.status).toBe(OK);
100
- expect(Object.keys(response.body.data)).toEqual(["result"]);
101
- },
102
- TIMEOUT,
103
- );
104
-
105
- it(
106
- "双面打印的页码_总的",
107
- async () => {
108
- const response = await agent.post(`/api/pdf`).send({
109
- name: "asjsak啊实打实",
110
- lay: {
111
- head: [
112
- '<div style=\\"position: relative; width:100%; text-align:center; border-bottom: 1pt solid #eeeeee; margin: 3.5mm 0px 10px; font-size: 10pt\\"></span>',
113
- '<div style=\\"position: absolute; width:100%; text-align: center; bottom: 5px;\\"><span id=\\"titlespan\\" class=title></div>',
114
- '<div style=\\"-NOT_DISPLAY- position: absolute; text-align: right; bottom: 5px;right: 20px;\\">',
115
- "<span>${pageNumber}</span> / <span>${totalPages}</span></div>",
116
- "</div>",
117
- ],
118
- foot: [
119
- '<div style=\\"position: relative; width: 100%; text-align: left; border-top: 1pt solid #eeeeee; margin: 10px 0px 1.5mm; font-size: 8pt;\\">',
120
- '<div style=\\"position: absolute; text-align: left; top: 5px;left: 60px;\\">YYYY-MM-DD</div>',
121
- '<div style=\\"position: absolute; width: 100%; text-align: center; top: 5px;\\">&copy;2022 ABCD</div>',
122
- '<div style=\\"position: absolute; text-align: right;top: 5px;right: 20px;\\"> <span>${pageNumber}</span> / <span>${totalPages}</span></div>',
123
- "</div>",
124
- ],
125
- },
126
- files: [
127
- {
128
- url: "testHtmlPrint.html",
129
- out: "testHtmlPrint转",
130
- headFrom: 4,
131
- frNo: 5,
132
- },
133
- {
134
- url: "横页脚的.pdf",
135
- displayHeaderFooter: true,
136
- rightHand: true,
137
- },
138
- ],
139
- });
140
- expect(response.status).toBe(OK);
141
- expect(Object.keys(response.body.data)).toEqual(["result"]);
142
- },
143
- TIMEOUT,
144
- );
145
-
146
- it(
147
- "双面打印的页码_单URL",
148
- async () => {
149
- const response = await agent.post(`/api/pdf`).send({
150
- name: "asjsak啊实打实",
151
- lay: {},
152
- files: [
153
- {
154
- url: "report.pdf",
155
- out: "热效率详细测试",
156
- headFrom: 4,
157
- frNo: 5,
158
- localSumNo: true,
159
- roman: true,
160
- lay: {
161
- head: [
162
- '<div style=\\"position: relative; width:100%; text-align:center; border-bottom: 1pt solid #eeeeee; margin: 3.5mm 0px 10px; font-size: 10pt\\"></span>',
163
- '<div style=\\"position: absolute; width:100%; text-align: center; bottom: 5px;\\"><span id=\\"titlespan\\" class=title></div>',
164
- '<div style=\\"-NOT_DISPLAY- position: absolute; text-align: right; bottom: 5px;right: 20px;\\">',
165
- "<span>${pageNumber}</span> / <span>${totalPages}</span></div>",
166
- "</div>",
167
- ],
168
- foot: [
169
- '<div style=\\"position: relative; width: 100%; text-align: left; border-top: 1pt solid #eeeeee; margin: 10px 0px 1.5mm; font-size: 8pt;\\">',
170
- '<div style=\\"position: absolute; text-align: left; top: 5px;left: 60px;\\">YYYY-MM-DD</div>',
171
- '<div style=\\"position: absolute; width: 100%; text-align: center; top: 5px;\\">&copy;2022 ABCD</div>',
172
- '<div style=\\"-NOT_DISPLAY- position: absolute; text-align: right;top: 5px;right: 20px;\\"> <span>${pageNumber}</span> / <span>${totalPages}</span></div>',
173
- "</div>",
174
- ],
175
- },
176
- },
177
- {
178
- url: "横页脚的.pdf",
179
- displayHeaderFooter: true,
180
- rightHand: true,
181
- lay: {
182
- head: [
183
- '<div style=\\"position: relative; width:100%; text-align:center; border-bottom: 1pt solid #eeeeee; margin: 3.5mm 0px 10px; font-size: 10pt\\"></span>',
184
- '<div style=\\"position: absolute; width:100%; text-align: center; bottom: 5px;\\"><span id=\\"titlespan\\" class=title></div>',
185
- '<div style=\\"-NOT_DISPLAY- position: absolute; text-align: right; bottom: 5px;right: 20px;\\">',
186
- "<span>${pageNumber}</span> / <span>${totalPages}</span></div>",
187
- "</div>",
188
- ],
189
- foot: [
190
- '<div style=\\"position: relative; width: 100%; text-align: left; border-top: 1pt solid #eeeeee; margin: 10px 0px 1.5mm; font-size: 8pt;\\">',
191
- '<div style=\\"position: absolute; text-align: left; top: 5px;left: 60px;\\">YYYY-MM-DD</div>',
192
- '<div style=\\"position: absolute; width: 100%; text-align: center; top: 5px;\\">&copy;2022 ABCD</div>',
193
- '<div style=\\"-NOT_DISPLAY- position: absolute; text-align: right;top: 5px;right: 20px;\\"> <span>${pageNumber}</span> / <span>${totalPages}</span></div>',
194
- "</div>",
195
- ],
196
- },
197
- },
198
- ],
199
- });
200
- expect(response.status).toBe(OK);
201
- expect(Object.keys(response.body.data)).toEqual(["result"]);
202
- console.log("结果:", response.body.data);
203
- },
204
- TIMEOUT,
205
- );
206
- });
207
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,69 +0,0 @@
1
- import { SuperAgentTest } from "supertest";
2
- import { OK } from "http-status/lib";
3
- import { initAgent } from "../helpers/index";
4
- // import CONFIG from "../../src/configEnv";
5
-
6
- //prettify真叼: 每个地方都给您报出 红色
7
- const TIMEOUT = 260000; //设置超时,避免单步歇菜
8
- let agent: SuperAgentTest;
9
-
10
- beforeAll(async () => {
11
- agent = await initAgent();
12
- });
13
-
14
- /**替代: 浏览器postman等工具发送包后,后端服务器Debug模式运行单步调试模式已经没能使用了。只好改为jest来对付了。
15
- 后面的/${CONFIG.APP.VER} 就是加了/v1结尾的该服务工程的版本号;
16
- * */
17
- describe("[PDF] => Gen", () => {
18
- describe("Post: '/api/pdf'", () => {
19
- it(
20
- "全部合并工作目录的所有pdf文件",
21
- async () => {
22
- const response = await agent.post(`/api/pdf`).send({});
23
- expect(response.status).toBe(OK);
24
- expect(Object.keys(response.body.data)).toEqual(["result"]);
25
- },
26
- TIMEOUT,
27
- );
28
-
29
- it(
30
- "pdf建议拆分成多个pdf",
31
- async () => {
32
- const response = await agent.post(`/api/split`).send({
33
- input: "产生的22.pdf",
34
- files: [
35
- {
36
- pageRanges: "1-3,7-8",
37
- out: "拆分achaRErint转",
38
- },
39
- {
40
- pageRanges: "7,6,1",
41
- out: "最小那3QWDS",
42
- },
43
- ],
44
- });
45
- expect(response.status).toBe(OK);
46
- expect(Object.keys(response.body.data)).toEqual(["result"]);
47
- expect(response.body.data).toEqual({ result: "成功!" });
48
- console.log("结果:", response.body.data);
49
- },
50
- TIMEOUT,
51
- );
52
- });
53
- });
54
-
55
- /*这里发送的和IDEA工具发送差异: .post(`/api/split`).send({})是对象化的。
56
- {
57
- "input": "产生的22.pdf",
58
- "files": [
59
- {
60
- "pageRanges": "1-3,5,8",
61
- "out": "ch拆分achaRErint转"
62
- },
63
- {
64
- "pageRanges": "4,8",
65
- "out": "tesrint2323QWDS"
66
- }
67
- ]
68
- }
69
- * */
@@ -1,2 +0,0 @@
1
- import { SuperAgentTest } from "supertest";
2
- export declare const initAgent: () => Promise<SuperAgentTest>;
@@ -1,21 +0,0 @@
1
- import supertest, { SuperAgentTest } from "supertest";
2
-
3
- import { createApp } from "@/app";
4
-
5
- // let dbConnection: Mongoose;
6
-
7
- export const initAgent = async (): Promise<SuperAgentTest> => {
8
- const app = createApp();
9
- const agent = supertest.agent(app);
10
- // dbConnection = await mongoDbConnection();
11
- // await agent.post("/api/v2/auth/signin").send({
12
- // email: testUser.email,
13
- // password: testUser.password,
14
- // });
15
-
16
- return agent;
17
- };
18
-
19
- // export const closeClients = async (): Promise<void> => {
20
- // await dbConnection.disconnect();
21
- // };
@@ -1 +0,0 @@
1
- export {};