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
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  # Overview
10
10
 
11
- **page2pdf_server** is a `Typescript` + `Express` + `Node` starter kit to develop `REST API` server apps.
11
+ **page2pdf_server** 文书打印转换器的引用类型定义; "repository": "https://gitee.com/heerzhang/page2pdf-server",
12
12
  Nothing new under the sun, just a straight forward combo to make server development a little bit faster. And of course, this make my freelancing days more enjoyable 😎
13
13
  Comes with:
14
14
 
@@ -47,12 +47,10 @@ chrome-remote-interface不会为您启动Chrome。本来想用chrome-remote-inte
47
47
  - [Node.js](https://nodejs.org) (`>= 20.0.0`)
48
48
  - [Yarn](https://yarnpkg.com/en/docs/install) or [NPM](https://docs.npmjs.com/getting-started/installing-node)
49
49
  - 客户电脑必须有Chrome浏览器;
50
- - 要点击谷歌浏览器的链接,要配置端口号,启动命令设置:目标修改: C:\Users\herzhang\AppData\Local\Google\Chrome\Application\chrome.exe --remote-debugging-port=9872
51
- 比如: "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9872
52
50
  - 之后服务期间,需要首先就该点击该链接开启Chrome浏览器。
53
51
  - 特别注意:windows用户若非管理员账户的:桌面上的Chrome快捷方式右键点属性在“兼容性”设置中:必须勾选“管理员身份运行”;
54
52
  注意浏览器的管理员和普通身份运行的效果进入显示都不同的。目标URL网站需要登陆处理的,登陆点击后浏览器没有反馈,需直接关闭该TAB页面。
55
- -报错Error: connect ECONNREFUSED 127.0.0.1:9872 【解决】先在windows任务管理器把chrome.exe的进程全部关闭后重来。
53
+
56
54
  ## Install
57
55
 
58
56
  - Fork or Use [this](https://github.com/filoscoder/tenstack-starter/generate) template repository.
@@ -76,7 +74,7 @@ chrome-remote-interface不会为您启动Chrome。本来想用chrome-remote-inte
76
74
  <br>
77
75
 
78
76
  ## Config
79
-
77
+ 具体API用法, 参考见../server 也即page2pdf_server_run服务器的包。
80
78
  - Copy `.env.example` a file at the root of the application.
81
79
  - Add or modify specific variables and update it according to your need.
82
80
 
@@ -273,3 +271,6 @@ If you have any question or suggestion, don't hesitate to contact me:
273
271
  如上代码会有严重毛病:打印输出实际上只有一次机会render;useMeasure(ref还是空的)div宽度=0导致实际只有输出一列的布局,打印没机会修正了,屏幕情况可以不限次数render,
274
272
  可是打印就不行了,上面这情况太特殊了。
275
273
 
274
+ # 发布更新
275
+ 工具包需要发布,工程目录:page2pdf-server/packages/types 执行 npm publish 发布到npm
276
+
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "page2pdf_server",
3
- "version": "1.1.2",
4
- "description": "文书打印转换器",
3
+ "version": "2.0.0",
4
+ "description": "文书打印转换器的引用类型",
5
5
  "private": false,
6
6
  "authors": "herzhang",
7
7
  "repository": "https://gitee.com/heerzhang/page2pdf-server",
@@ -9,34 +9,7 @@
9
9
  "main": "./dist/index.js",
10
10
  "types": "./dist/types.d.ts",
11
11
  "scripts": {
12
- "yarn": "yarn",
13
- "yarn命令行": "yarn add nodemon -D",
14
- "注意2": "运行prettify来修复代码,免去到处是标记红色的,太严格了",
15
- "prettify": "prettier --write \"src/**/*.{ts,js,json}\" \"src/__tests__/**/*.{ts,js,json}\"",
16
- "start": "NODE_ENV=development run-s prettify lint & nodemon",
17
- "build": "rimraf dist && tsc && rimraf dist/types && ncp src/types.d.ts dist/types",
18
- "手动管理 .d.ts 文件的完整流程": "确保以下路径存源文件:src/types.d.ts 目标目录:dist/types/",
19
- "build3": "rimraf dist && tsc --emitDeclarationOnly && dts-bundle --name 'types' --main dist/types/index.d.ts --out 'dist/types.d.ts'",
20
- "build2": "rimraf dist && tsc --emitDeclarationOnly && ncp src/types.d.ts dist/types",
21
- "build1": "cross-env NODE_ENV=production run-s prettify clean transpile",
22
- "lint": "eslint 'src/**/*.{ts,js}' 'src/__tests__/**/*.{ts,js}'",
23
- "lint:fix": "eslint --fix 'src/**/*.{ts,js}' 'src/__tests__/**/*.{ts,js}' --quiet",
24
- "有些隐藏错误": "需要运行watch才发现",
25
- "watch": "tsc --watch",
26
- "clean": "rimraf dist",
27
- "test": "cross-env NODE_ENV=test jest --coverage --runInBand --detectOpenHandles",
28
- "单步调试": "不必运行test,直接到__test__目录文件直接挑选修改测试项并调试",
29
- "test:watchAll": "cross-env NODE_ENV=test jest --watchAll --runInBand --detectOpenHandles",
30
- "transpile": "tsc",
31
- "service:start": "pm2 start ecosystem.config.js",
32
- "service:reload": "pm2 reload ecosystem.config.js",
33
- "service:startup": "pm2 startup",
34
- "service:stop": "pm2 stop ecosystem.config.js",
35
- "service:list": "pm2 list ecosystem.config.js",
36
- "service:delete": "pm2 delete ecosystem.config.js",
37
- "service:logs": "pm2 logs",
38
- "hook主动运行": "操作系统缘故,将单引号改成双引号,加转义符,提交代码会自动执行;git提交给它勾掉吧,yarn会自动运行prepare",
39
- "安装生产依赖在服务器上执行": "工程npm prune --production 然后目标机npm ci --only=production"
12
+ "build": "rimraf dist && tsc && rimraf dist/types && ncp src/types.d.ts dist/types"
40
13
  },
41
14
  "keywords": [
42
15
  "dynamic page pdf generator",
@@ -49,62 +22,24 @@
49
22
  "server"
50
23
  ],
51
24
  "dependencies": {
52
- "@types/bcrypt": "^5.0.0",
53
- "@types/cors": "^2.8.13",
54
- "@types/express-pino-logger": "^4.0.3",
55
- "@types/jsonwebtoken": "^9.0.2",
56
- "chrome-remote-interface": "^0.33.3",
57
- "config": "^3.3.9",
58
- "connect-timeout": "^1.9.0",
59
- "cors": "^2.8.5",
60
- "cross-env": "^7.0.3",
61
- "dotenv": "^16.3.1",
62
- "express": "^4.18.2",
63
- "express-pino-logger": "^7.0.0",
64
- "express-validator": "^7.0.1",
65
- "helmet": "^7.0.0",
66
- "http-status": "^1.6.2",
67
- "jsonwebtoken": "^9.0.0",
68
- "lodash-es": "^4.17.21",
69
- "morgan": "^1.10.0",
70
- "pdf-lib": "^1.17.1",
71
- "pino-http": "^8.3.3",
72
- "pino-pretty": "^10.0.0",
73
- "rimraf": "^6.0.1",
74
- "save-dev": "^0.0.1-security"
75
25
  },
76
26
  "devDependencies": {
77
27
  "@babel/preset-env": "^7.22.5",
78
28
  "@babel/preset-typescript": "^7.22.5",
79
- "@types/connect-timeout": "^0.0.37",
80
- "@types/express": "^4.17.22",
81
- "@types/jest": "^29.5.2",
82
29
  "@types/lodash-es": "^4.17.7",
83
- "@types/morgan": "^1.9.4",
84
30
  "@types/node": "^22.15.21",
85
31
  "@types/supertest": "^2.0.12",
86
32
  "@typescript-eslint/eslint-plugin": "^5.59.11",
87
33
  "@typescript-eslint/parser": "^5.59.11",
88
- "dts-bundle": "^0.7.3",
89
34
  "eslint": "^8.43.0",
90
35
  "eslint-config-prettier": "^8.8.0",
91
36
  "eslint-plugin-import": "^2.27.5",
92
37
  "eslint-plugin-prettier": "^4.2.1",
93
- "husky": "^8.0.3",
94
- "jest": "^29.5.0",
95
- "jest-watch-typeahead": "^2.2.2",
96
- "ncp": "^2.0.0",
97
- "nodemon": "^3.0.1",
98
- "npm-run-all": "^4.1.5",
99
- "pm2": "^5.3.0",
100
- "prettier": "^2.8.8",
101
- "supertest": "^6.3.3",
102
- "ts-jest": "^29.1.0",
103
38
  "ts-node": "^10.9.1",
104
- "tsconfig-paths": "^4.2.0",
39
+ "ncp": "^2.0.0",
105
40
  "typescript": "^5.8.3"
106
41
  },
107
42
  "engines": {
108
- "node": ">= 20.0.0"
43
+ "node": ">= 24.0.0"
109
44
  }
110
45
  }
package/src/index.ts CHANGED
@@ -1,18 +1,10 @@
1
- // ! Don't convert require into import
2
- // eslint-disable-next-line @typescript-eslint/no-var-requires
3
- //去掉这个了 离开开发环境无法 独立运行服务端,报错module-alias找不到
4
- //去掉这个了 require("module-alias").addAlias("@", __dirname);
5
- //去掉这个了
6
-
7
- import { createApp } from "./app";
8
- import { startServer } from "./server";
9
-
10
- if (process.env.NODE_ENV !== "test") {
11
- const app = createApp();
12
- startServer(app);
13
- }
14
-
15
- //关键文档Chrome DevTools Protocol资料, https://chromedevtools.github.io/devtools-protocol/tot/Page
16
- export * from "./types/request/config";
17
- export { FileTransform } from "./types";
18
- export { ConfigRoot } from "./types";
1
+ // ! Don't convert require into import
2
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
3
+ //去掉这个了 离开开发环境无法 独立运行服务端,报错module-alias找不到
4
+ //去掉这个了 require("module-alias").addAlias("@", __dirname);
5
+
6
+
7
+ export * from "./types";
8
+ // export { FileTransform } from "./types";
9
+ // export { ConfigRoot } from "./types";
10
+ // export { MyPaperSize } from "./types/request/config";
package/src/types.d.ts CHANGED
@@ -1,97 +1,161 @@
1
- import { HeadFooter, PartHeadFooter } from "@/types/request/config";
2
-
3
- /**一次作业的模型配置;
4
- * 若本对象为空{}的话:默认是按照修改时间的顺序简易模式地合并当前工作目录的所有pdf文件。
5
- * 若某个URL不正常的,很可能无法触发页面加载完成,导致作业一致无法继续下去,大大超出预期执行时间。URL对应网页若不是一次性加载完成还会陆陆续续修改内容的就是这种情况造成死等长时间没结果。
6
- * */
7
- export interface ConfigRoot<T> {
8
- //是否生成合并的pdf:正常情况下, 默认=true进行files输出pdf全部做合并的。 除非files[]也是空的情形。
9
- //但若需对任一个URL叠加新页眉页脚的,merge就不能=false的。
10
- merge?: boolean;
11
- //重定义 合并的pdf文件名, 否则默认名。不需要加 .pdf结尾的
12
- name: string;
13
- //双面打印的合并输出pdf, 默认=true, 表示合并输出的pdf考虑到双面打印的页眉页脚的布局差异化情况了。
14
- doubleSide?: boolean;
15
- //统一一整份应该用的页眉页脚
16
- //假如files[]里面有些url自己也定义了lay{localSumNo=false}的页眉页脚输出配置,只能忽略掉它们,页码总数不算他们的,页码连续编号也不算它们的占坑:最好都挪到最后面。
17
- lay?: HeadFooter;
18
- //每一个独立的pdf生成:
19
- files: [T];
20
-
21
- //共用一个浏览器窗口 默认=true
22
- singleTab?: boolean;
23
- //自动关闭浏览器窗口 默认=false
24
- closeTab?: boolean;
25
-
26
- //下面这5个参数不是前端配置发送过来的,而是lay{}对象预先进行转换后保存的汇总页眉页脚,只能内部使用,并非外部接口参数!Page.printToPDF需要的。
27
- headerTemplate?: string;
28
- footerTemplate?: string;
29
- headerTemplateL?: string;
30
- footerTemplateL?: string;
31
- //第二阶段页眉页脚生成的浏览器执行窗口的targetId,不可配置。
32
- CDPtab?: string;
33
- }
34
-
35
- // types.d.ts
36
- /**等待输出的每个独立文件:URL,这些文件可能要合并。
37
- * @前提条件 是:每个url独立文件生成的PDF,它的纸张大小必须保证同一个大小尺寸, size: 必须唯一,但是纸张方向在某些约束条件中可以横屏竖屏混合的。
38
- * 物理打印机:纸张适配,横竖方向还好能自动调节,size 真实打印纸张尺寸就不好自动处理, 不一样的尺寸?最好拆解pdf。
39
- * 标准纸张大小的:静态html内CSS定义横竖纸张方向混合的:用reverseRanges参数设置部分纸张反转纸张方向,pageRanges=''的前提下:配置比如'1-5, 8, 11-13'和landscape参数设置相反方向。
40
- * */
41
- export interface FileTransform {
42
- //[必须配置的] 特殊的前缀是 http:// https:// 没有这俩个的都是本地工作目录的文件全名(含文件类型后缀 *.pdf *.*)。
43
- //任意的本地文件类型,只要可以被Chrome装载并能够支持打印预览的都可以。http打头的网页必须确保已经登录了,也就是遗留cockies token,不能要求交互登录。本地文件不能要求输入口令。
44
- //不支持*.xls *.doc文件;不支持的格式实际在浏览器拖拽窗口后会蜕变成了下载形式的。被加密的文件必须提前解密,网站登录需提前解决。
45
- //【特殊问题】若URL网页动态化太离谱,周期性地不间断地更新页面,没法触发加载结束事件的,只能手动在浏览器查看打印另存pdf,然后把手动生成pdf合并进来。Tab切换会主动刷新的也不触发。
46
- url: string;
47
- //输出本地工作目录的文件名, 不需要加 .pdf结尾的 【注意】如果out为空表示url是pdf的没必要转换的要直接进入合并步骤。
48
- //【特别】必须配置唯一性 的本地 工作目录的文件名,同名的被直接覆盖了。
49
- out: string;
50
-
51
- //是否汇总合并阶段省略本url,不合并进去,那就是单独独立的pdf输出了。默认=true是合并进去。 和是否打印页眉页脚或页眉统计页数没有绝对关系的。
52
- merge?: boolean;
53
-
54
- //默认取值都是=true; 第一阶段不会生成页眉页脚的,汇总第二阶段这个参数才会生效!
55
- //这里配置displayHeaderFooter优先级最高。
56
- //页眉页脚如何分开控制是否打印的: 可以把lay{head,foot}其中一个配置串给设置为null,null就代表不输出。例如head=null就不输出页眉,但是页脚照旧打印的。本url的配置优先于汇总pdf配置。
57
- //若ConfigRoot<T>.merge=false那么必然导致FileTransform.merge强制=false,每个独立pdf页码独立的独立都从1开始编号吗还需要打印吗,页眉页脚需要打印吗?这个情况页眉页脚打印的默认值改成false;
58
- displayHeaderFooter: boolean;
59
-
60
- //【特别注意】frNo 可能和 headFrom 配置矛盾。
61
- //本url打印:从第几页才开始页眉页脚的打印,#页码同样也是在这之后才可能计数和编号!。默认值headFrom=1:就是第一页就开始打印页眉页脚的。
62
- //书本封面页情况的。这个参数有最高优先级。 【注意】和frNo设置相互影响, 没有页眉页脚就失去页码意义了。若真的违反了可能页码不能连续输出的,被隐藏了页码缘故。
63
- headFrom?: number;
64
- //本url打印后,从本URL输出的第几页开始才进行的页码序号的顺序输出的,前面几页不打印页码(但是页眉页脚要打印)。默认值=1全部都打页码。若frNo=0全部不打页码的。
65
- //假如displayHeaderFooter=false也即页码无法显示出来的情况:请申明frNo=0; 不然默认是连续页码的,不打印的也有占用页码的隐藏的连续数字啊。
66
- //注意若有配置 headFrom 的要协调好。
67
- frNo?: number;
68
-
69
- //是否对页码支持连续编号: Continuous numbering 是跟随汇总合并的页码 基数合计。【注意】本配置单个url范围,单个url不能混合本地页码和全局页面两种!
70
- //统计页数是否本URL独立自己范围之内进行的汇总计数。比如书本目录有多页的可以独立统计页码序号以及总页数的。默认=false;
71
- localSumNo?: boolean;
72
- //本url对应的部分应该用的页眉页脚,覆盖掉合并pdf的相对应设置。页面上只能支持输出一次页眉页脚,不重叠做输出。
73
- //若lay{localSumNo=false}只能固定支持本url自己内部的页码统计顺序编号,不考虑合并pdf总页数带来的影响的。 还是?预设其它部分的页数统计总数之后?再做偏移页码编写?
74
- lay: PartHeadFooter;
75
- //前端声明本url在第一阶段打印输出后,生成的pdf应该有几页。 count没有设置的救不会做异常检查的。不是第二阶段的计数:双面情况可能增加空白页
76
- count?: number;
77
- //双面打印的 默认=true, 表示独立分开输出的pdf文件的:考虑到双面打印的页眉页脚的布局差异化情况了。
78
- //合并输出merge=true的情况:该参数无效,要看汇总配置的哪一个 # ConfigRoot<T>{ doubleSide: }字段。
79
- doubleSide: boolean;
80
- //双面打印的情形:必须确保本URL的第一个页是正好右手边(书本翻页的奇数号页码)开始的位置页。正常第一个URL首页面就是双面打印的右手边位置页;默认值=false不必确保.
81
- rightHand: boolean;
82
-
83
- //页码是罗马数字;论文目录需要的;默认=false阿拉伯数字。"I","II","III","IV","V","VI","VII","VIII","IX" "X"XI"XII"表盘符号
84
- //roman只能针对本URL启用;数字转换范围最大支持1到12,超过了便改阿拉伯数字,且只针对pageNumber有效, totalPages不会采用。
85
- roman?: boolean;
86
-
87
- //下面这5个参数不是前端配置发送过来的,而是lay{}对象预先进行转换后保存的汇总页眉页脚,只能内部使用,并非外部接口参数!Page.printToPDF需要的。
88
- headerTemplate?: string;
89
- footerTemplate?: string;
90
- headerTemplateL?: string;
91
- footerTemplateL?: string;
92
- //这针对:可能由于动态布局导致的浏览器打印预览和实际URL纯粹js网页动态布局的真实内容页数不一致的毛病。
93
- //开启的浏览器窗口宽度。默认最大化的。
94
- brwidth?: number;
95
- //第一阶段Url转pdf的浏览器执行窗口的targetId,不可配置。
96
- CDPtab?: string;
97
- }
1
+ /**一次作业的模型配置;
2
+ * 若本对象为空{}的话:默认是按照修改时间的顺序简易模式地合并当前工作目录的所有pdf文件。
3
+ * 若某个URL不正常的,很可能无法触发页面加载完成,导致作业一致无法继续下去,大大超出预期执行时间。URL对应网页若不是一次性加载完成还会陆陆续续修改内容的就是这种情况造成死等长时间没结果。
4
+ * */
5
+ export interface ConfigRoot<T> {
6
+ //是否生成合并的pdf:正常情况下, 默认=true进行files输出pdf全部做合并的。
7
+ //若merge=false的 页码只能跟读单独编号。
8
+ merge?: boolean;
9
+ //重定义 合并的pdf文件名, 否则默认名。不需要加 .pdf结尾的
10
+ //若merge=false的,name没用到。
11
+ name: string;
12
+ //双面打印的合并输出pdf, 默认都=true, 表示合并输出的pdf考虑到双面打印的页眉页脚的布局差异化情况了。
13
+ doubleSide?: boolean;
14
+ //统一一整份应该用的页眉页脚
15
+ //假如files[]里面有些url自己也定义了lay{localSumNo=false}的页眉页脚输出配置,只能忽略掉它们,页码总数不算他们的,页码连续编号也不算它们的占坑:最好都挪到最后面。
16
+ lay?: HeadFooter;
17
+ //每一个独立的pdf生成:
18
+ files: T[];
19
+
20
+ //下面这5个参数不是前端配置发送过来的,而是lay{}对象预先进行转换后保存的汇总页眉页脚,只能内部使用,并非外部接口参数!Page.printToPDF需要的。
21
+ headerTemplate?: string;
22
+ footerTemplate?: string;
23
+ //最后来个压缩 默认=true
24
+ compress?: boolean;
25
+ hHeight?: number; //清空页眉页脚 页眉高度 (points, 30mm ≈ 85 points)默认10mm
26
+ fHeight?: number; //默认==hHeight 清空页脚高度
27
+ //页码区域的模板关联名字 默认=default
28
+ tmpl?: string;
29
+ //页码区域的字体大小
30
+ fontsz?: number;
31
+ //web加载完毕的标志性选择子 默认=".print-section"
32
+ selector?: string;
33
+ }
34
+
35
+ /**等待输出的每个独立文件:URL,这些文件可能要合并。
36
+ * @前提条件 是:每个url独立文件生成的PDF,它的纸张大小必须保证同一个大小尺寸, size: 必须唯一,但是纸张方向在某些约束条件中可以横屏竖屏混合的。
37
+ * 物理打印机:纸张适配,横竖方向还好能自动调节,size 真实打印纸张尺寸就不好自动处理, 不一样的尺寸?最好拆解pdf。
38
+ * 标准纸张大小的:静态html内CSS定义横竖纸张方向混合的:用reverseRanges参数设置部分纸张反转纸张方向,pageRanges=''的前提下:配置比如'1-5, 8, 11-13'和landscape参数设置相反方向。
39
+ * */
40
+ export interface FileTransform {
41
+ //[必须配置的] 特殊的前缀是 http:// https:// 没有这俩个的都是本地工作目录的文件全名(含文件类型后缀 *.pdf *.*)。
42
+ //任意的本地文件类型,只要可以被Chrome装载并能够支持打印预览的都可以。http打头的网页必须确保已经登录了,也就是遗留cockies token,不能要求交互登录。本地文件不能要求输入口令。
43
+ //不支持*.xls *.doc文件;不支持的格式实际在浏览器拖拽窗口后会蜕变成了下载形式的。被加密的文件必须提前解密,网站登录需提前解决。
44
+ //【特殊问题】若URL网页动态化太离谱,周期性地不间断地更新页面,没法触发加载结束事件的,只能手动在浏览器查看打印另存pdf,然后把手动生成pdf合并进来。Tab切换会主动刷新的也不触发。
45
+ url: string;
46
+ //源url的类型: 默认=web网页的, | pdf本地文件 | linkPdf 链接pdf文件。第一阶段的页眉页脚生成仅仅针对web资源才能生效的。
47
+ type?: "web" |"pdf" |"linkPdf";
48
+ //输出本地工作目录的文件名, 不需要加 .pdf结尾的 【注意】如果out为空意味着url字段的文件原本已经是pdf的情况所以没必要转换的要直接进入合并步骤。
49
+ //【特别】必须配置唯一性 的本地 工作目录的文件名,同名的被直接覆盖了。
50
+ out?: string;
51
+ //抽取原始的页码范围;"1-2,5,8-end" 格式示例
52
+ range?: string;
53
+ //默认取值都是=true; 第一阶段不会生成页眉页脚的,汇总第二阶段这个参数才会生效!
54
+ //这里配置displayHeaderFooter优先级最高。
55
+ //页眉页脚如何分开控制是否打印的: 可以把lay{head,foot}其中一个配置串给设置为null,null就代表不输出。例如head=null就不输出页眉,但是页脚照旧打印的。本url的配置优先于汇总pdf配置。
56
+ //若ConfigRoot<T>.merge=false那么必然导致FileTransform.merge强制=false,每个独立pdf页码独立的独立都从1开始编号吗还需要打印吗,页眉页脚需要打印吗?这个情况页眉页脚打印的默认值改成false;
57
+ displayHeaderFooter: boolean;
58
+ //是否对页码支持连续编号: Continuous numbering 是跟随汇总合并的页码 基数合计。【注意】本配置单个url范围,单个url不能混合本地页码和全局页面两种!
59
+ //【特例】统计页数是否本URL独立自己范围之内进行的汇总计数。比如书本目录有多页的可以独立统计序言部分的页码总数以及后面书本正文的页数统计的。默认=false;
60
+ localSumNo?: boolean;
61
+ //本url页抽取完成以后,清除掉页眉页脚的页范围;"1-2,5,8-end",#页码同样也是在这之后才可能计数和编号!。
62
+ //默认值headFrom=1:就是第一页就开始打印页眉页脚的。【特别注意】frNo 可能和 headFrom 配置矛盾。
63
+ //书本封面页情况的。这个参数有最高优先级。 【注意】和frNo设置相互影响, 没有页眉页脚就失去页码意义了。若真的违反了可能页码不能连续输出的,被隐藏了页码缘故。
64
+ cRange?: string;
65
+ //默认值=undefined:=全部都打页码。
66
+ //若frNo=0全部不打页码的。若displayHeaderFooter=false也即页码无法显示出来的情况:请申明frNo=0; 不然默认是连续页码的,不打印的也有占用页码的隐藏的连续数字啊。
67
+ //注意若有配置 headRange 的要协调好。
68
+ frNo?: number;
69
+
70
+ //是否汇总合并阶段省略本url,不合并进去,那就是单独独立的pdf输出了。默认=true是合并进去。 和是否打印页眉页脚或页眉统计页数没有绝对关系的。
71
+ merge?: boolean;
72
+
73
+ //本url对应的部分应该用的页眉页脚,覆盖掉合并pdf的相对应设置。页面上只能支持输出一次页眉页脚,不重叠做输出。
74
+ //若lay{localSumNo=false}只能固定支持本url自己内部的页码统计顺序编号,不考虑合并pdf总页数带来的影响的。 还是?预设其它部分的页数统计总数之后?再做偏移页码编写?
75
+ lay?: PartHeadFooter;
76
+
77
+ //双面打印的 默认=false, 表示独立分开输出的pdf文件的:考虑到双面打印的页眉页脚的# 章节的空白页,可能的需求开始位置必须在右手边位置。
78
+ //合并输出merge=true的情况:该参数无效,要看汇总配置的哪一个 # ConfigRoot<T>{ doubleSide: }字段的取值。
79
+ doubleSide: boolean;
80
+ //双面打印的情形:指明必须确保本URL的第一个页是正好右手边(书本翻页的奇数号页码)开始的位置页。正常第一个URL首页面就是双面打印的右手边位置页;默认值=false不必确保.
81
+ rightHand: boolean;
82
+
83
+ //页码是罗马数字;论文目录需要的;默认=false阿拉伯数字。"I","II","III","IV","V","VI","VII","VIII","IX" "X"XI"XII"表盘符号
84
+ //roman只能针对本URL启用;数字转换范围最大支持1到12,超过了便改阿拉伯数字,且只针对pageNumber有效, totalPages不会采用。
85
+ roman?: boolean;
86
+ //下面这5个参数不是前端配置发送过来的,而是lay{}对象预先进行转换后保存的汇总页眉页脚,只能内部使用,并非外部接口参数!Page.printToPDF需要的。
87
+ headerTemplate?: string;
88
+ footerTemplate?: string;
89
+ hHeight?: number; //清空页眉页脚 页眉高度 (points, 30mm ≈ 85 points)默认10mm
90
+ fHeight?: number; //默认==hHeight 清空页脚高度
91
+ tmpl?: string;
92
+ fontsz?: number;
93
+ //web情况的,加载完毕的标志性选择子 默认=".print-section"
94
+ selector?: string;
95
+ //有些情况需要清除掉旧的页码内容
96
+ clearNum?: boolean;
97
+ clearWidth?: number; //覆盖页码区域的空间宽度
98
+ }
99
+
100
+ /**页眉页脚声明;前提条件是页眉页脚htm描述里面: 上一个版本保留字 ${pageNumber} ${totalPages}
101
+ * 不应该把 -NOT_DISPLAY- ~pageNumber~ ~totalPages~ 这三个 保留字字符串当作普通文字输出的。
102
+ * 前端发送数据包时刻,页眉页脚的脚本需要在 HTML转JSON 工具网站 进行转换处理后的;网站地址 https://uutool.cn/html2json/ 转换htm模板后是数组[string]
103
+ * 实际上也就进行拆分多行字符串拼接数组,还有把html语法中的 ""引号 进行转义 style="position: 变成 style=\\\"position: 处置的。
104
+ * */
105
+ export interface HeadFooter {
106
+ //每一个URL独立设置的 页眉 的 : 若是配置值=null 表示不要打印本页眉: 针对本url。
107
+ head?: string | string[] | null;
108
+ //每一个页 页脚的
109
+ //每一个URL独立设置的 页脚的 : 若是配置值=null 表示不要打印本页脚的, 针对本url。
110
+ foot?: string | string[] | null; //实际前端发过来却是[string]的也可以啊。
111
+ //双面打印:不再区分页眉页脚样式了
112
+ }
113
+
114
+ //来自pupeeter用的浏览器接口:
115
+ export declare interface PDFMargin {
116
+ top?: string | number;
117
+ bottom?: string | number;
118
+ left?: string | number;
119
+ right?: string | number;
120
+ }
121
+ /**实际在第二步骤也即汇总阶段:页眉页脚的生成底下的参数size,landscape,reverseRanges,marginLeft,marginRight几个都不会涉及到了。
122
+ * */
123
+ export interface PartHeadFooter extends HeadFooter {
124
+ //背景, 默认 =false
125
+ printBackground?: boolean;
126
+ margin?: PDFMargin;
127
+ //默认全部打印的,#可自定义部分页面输出的。 Paper ranges to print, one based, e.g., '1-5, 8, 11-13'.
128
+ pageRanges?: string;
129
+ }
130
+
131
+ /**配置自定义的页脚内页码区域使用的字体子集化的文件。 母字体是系统固定的文件名。
132
+ * */
133
+ export interface MyFontSubset {
134
+ //唯一标识名称; 默认都配一个:"default"
135
+ name: string;
136
+ //所有的文字,数字也要的
137
+ text?: string;
138
+ //字体需存储于那一个文件中。
139
+ file?: string;
140
+ }
141
+
142
+ //测试
143
+ export interface SizeMinimize {
144
+ name: string;
145
+ range?: string;
146
+ file?: string;
147
+ }
148
+
149
+ /**配置页码区域 打印模样。
150
+ * pagenum 页码 pagesums 总的页数
151
+ * */
152
+ export interface PageNoTempl {
153
+ //标识名称
154
+ name: string;
155
+ //模板:必须有 pagenum 页码, 但是 pagesums 可省略的。
156
+ tmpl: string;
157
+ //使用字体的名字。
158
+ font: string;
159
+ //偏移 正负的
160
+ ofswd: number;
161
+ }
@@ -1,28 +0,0 @@
1
- ---
2
- name: Bug report
3
- about: Create a report to help us improve
4
- title: ""
5
- labels: "bug"
6
- assignees: ""
7
- ---
8
-
9
- # Description
10
-
11
- _A clear and concise description of what the bug is._
12
-
13
- # Reproduction
14
-
15
- _Steps to reproduce the behavior:_
16
-
17
- _1. Go to '...'_
18
- _2. Click on '....'_
19
- _3. Scroll down to '....'_
20
- _4. See error_
21
-
22
- # Expected
23
-
24
- _A clear and concise description of what you expected to happen._
25
-
26
- # Screenshots
27
-
28
- _If applicable, add screenshots to help explain your problem._
@@ -1,15 +0,0 @@
1
- ---
2
- name: Feature request
3
- about: Suggest an idea for this project
4
- title: ""
5
- labels: "implementation"
6
- assignees: ""
7
- ---
8
-
9
- # Request
10
-
11
- _A clear and concise description of what the problem is._
12
-
13
- # Suggestion
14
-
15
- _A clear and concise description of what you want to happen._
@@ -1,15 +0,0 @@
1
- ---
2
- name: Refactoring
3
- about: Add content to be refactored
4
- title: ""
5
- labels: "refactoring"
6
- assignees: ""
7
- ---
8
-
9
- # Refactor description
10
-
11
- _A clear and concise description of the related Content._
12
-
13
- # Refactor suggestion
14
-
15
- _A clear and concise description of any alternative solutions or features you've considered._
@@ -1,18 +0,0 @@
1
- # Description
2
-
3
- _Explain briefly about the purpose & context of this PR_
4
-
5
- # Screenshots
6
-
7
- _If possible add a screenshot and/or gif_
8
-
9
- # Example | Usage
10
-
11
- _Please share examples and how to reproduce_
12
-
13
- ---
14
-
15
- # Related Issues | Pr
16
-
17
- _`close`|`resolve` <ISSUE> (ex. `resolve #20`)_
18
- _link issues to close automatically_
package/.github/stale.yml DELETED
@@ -1,17 +0,0 @@
1
- # Number of days of inactivity before an issue becomes stale
2
- daysUntilStale: 100
3
- # Number of days of inactivity before a stale issue is closed
4
- daysUntilClose: 7
5
- # Issues with these labels will never be considered stale
6
- exemptLabels:
7
- - pinned
8
- - security
9
- # Label to use when marking an issue as stale
10
- staleLabel: wontfix
11
- # Comment to post when marking an issue as stale. Set to `false` to disable
12
- markComment: >
13
- This issue has been automatically marked as stale because it has not had
14
- recent activity. It will be closed if no further activity occurs. Thank you
15
- for your contributions.
16
- # Comment to post when closing a stale issue. Set to `false` to disable
17
- closeComment: false
@@ -1,75 +0,0 @@
1
- name: CD
2
-
3
- on:
4
- push:
5
- branches: [ main, develop ]
6
-
7
- jobs:
8
- test:
9
- runs-on: ubuntu-latest
10
- steps:
11
- - name: Checkout repository
12
- uses: actions/checkout@v2.3.4
13
-
14
- - name: Set up Node.js
15
- uses: actions/setup-node@v2.4.1
16
- with:
17
- node-version: 16
18
-
19
- - name: Install Dependencies
20
- run: yarn
21
-
22
- - name: Run Lint
23
- run: yarn lint
24
-
25
- - name: Build module
26
- run: yarn build
27
-
28
- - name: Run Test code
29
- run: yarn test
30
-
31
- # ↓↓↓↓ Please edit below according your environment ↓↓↓↓
32
- # deploy:
33
- # runs-on: ubuntu-latest
34
- # needs: test
35
- # steps:
36
- # - name: Checkout repository
37
- # uses: actions/checkout@v2.3.4
38
-
39
- # - name: Deploy DEVELOPMENT
40
- # uses: appleboy/ssh-action@v0.1.4
41
- # if: github.ref == 'refs/heads/develop'
42
- # with:
43
- # key: ${{ secrets.DEV_PEM_KEY }}
44
- # host: ${{ secrets.DEV_HOST }}
45
- # username: ubuntu
46
- # script: |
47
- # cd /home/ubuntu/source
48
- # git checkout develop
49
- # git fetch --all
50
- # git reset --hard origin/develop
51
- # git pull origin develop
52
- # yarn
53
- # yarn build
54
- # export NODE_ENV=development && pm2 startOrReload ecosystem.config.js
55
- # pm2 set pm2:autodump true
56
- # pm2 save
57
-
58
- # - name: Deploy PRODUCTION
59
- # uses: appleboy/ssh-action@v0.1.4
60
- # if: github.ref == 'refs/heads/main'
61
- # with:
62
- # key: ${{ secrets.PROD_PEM_KEY }}
63
- # host: ${{ secrets.PROD_HOST }}
64
- # username: ubuntu
65
- # script: |
66
- # cd /home/ubuntu/source
67
- # git checkout main
68
- # git fetch --all
69
- # git reset --hard origin/main
70
- # git pull origin main
71
- # yarn
72
- # yarn build
73
- # export NODE_ENV=production && pm2 startOrReload ecosystem.config.js
74
- # pm2 set pm2:autodump true
75
- # pm2 save