page2pdf_server 1.1.1 → 1.1.3
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 +4 -1
- package/package.json +4 -69
- package/src/index.ts +11 -18
- package/tsconfig.json +3 -3
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -28
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -15
- package/.github/ISSUE_TEMPLATE/refactoring.md +0 -15
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -18
- package/.github/stale.yml +0 -17
- package/.github/workflows/cd.yml +0 -75
- package/.github/workflows/ci.yml +0 -36
- package/.prettierrc +0 -8
- package/.vscode/settings.json +0 -3
- package/config/default.json +0 -10
- package/config/development.json +0 -3
- package/config/production.json +0 -3
- package/config/test.json +0 -3
- package/ecosystem.config.js +0 -41
- package/jest.config.js +0 -35
- package/nodemon.json +0 -6
- package/src/CSS/345/205/274/345/256/271/346/200/247.txt +0 -125
- package/src/__tests__/UrltoPdf/generatePdf.test.d.ts +0 -1
- package/src/__tests__/UrltoPdf/generatePdf.test.ts +0 -207
- package/src/__tests__/UrltoPdf/pdfSplit.test.d.ts +0 -1
- package/src/__tests__/UrltoPdf/pdfSplit.test.ts +0 -69
- package/src/__tests__/helpers/index.d.ts +0 -2
- package/src/__tests__/helpers/index.ts +0 -21
- package/src/__tests__/home.test.d.ts +0 -1
- package/src/__tests__/home.test.ts +0 -77
- package/src/app.ts +0 -49
- package/src/components/home/controller.ts +0 -32
- package/src/components/home/index.ts +0 -4
- package/src/components/home/pdfController.ts +0 -113
- package/src/components/home/services.ts +0 -31
- package/src/components/home/splitController.ts +0 -125
- package/src/components/home/validators.ts +0 -12
- package/src/configEnv/index.ts +0 -62
- package/src/db/home.ts +0 -14
- package/src/helpers/apiResponse.ts +0 -10
- package/src/helpers/dataSanitizers.ts +0 -32
- package/src/helpers/error/ApiError.ts +0 -25
- package/src/helpers/error/ForbiddenError.ts +0 -15
- package/src/helpers/error/NotFoundException.ts +0 -15
- package/src/helpers/error/TimeOutError.ts +0 -20
- package/src/helpers/error/UnauthorizedError.ts +0 -15
- package/src/helpers/error/ValidationError.ts +0 -20
- package/src/helpers/error/index.ts +0 -15
- package/src/helpers/index.ts +0 -2
- package/src/helpers/loggers.ts +0 -75
- package/src/middlewares/errorHandler.ts +0 -52
- package/src/new_tab1.mhtml +0 -722
- package/src/routes/index.ts +0 -22
- package/src/server.ts +0 -30
- package/src/testCSS.html +0 -241
- package/src/types/global.d.ts +0 -13
- package/src/types/request/home.ts +0 -3
- package/src/types/request/split.ts +0 -18
- package/src/types/response/AppInformation.ts +0 -9
- package/src/types/response/index.ts +0 -5
- package/src/utils/array.ts +0 -19
- package/src/utils/auth.ts +0 -12
- package/src/utils/crypt.ts +0 -25
- package/src/utils/filter.ts +0 -59
- package/src/utils/object.ts +0 -58
- package/src/utils/pdfgen.ts +0 -1045
- package/src/utils/url.ts +0 -54
- package/src//346/265/213/350/257/225.txt +0 -268
- package/test//346/211/223/345/215/260/346/234/215/345/212/241.http +0 -17
- 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/src/utils/url.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import url from "url";
|
|
2
|
-
import path from "path";
|
|
3
|
-
import { Request } from "express";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @description Retrieve formatted url.
|
|
7
|
-
* @param req
|
|
8
|
-
* @returns {string}
|
|
9
|
-
*/
|
|
10
|
-
export const getFullUrl = (req: Request): string => {
|
|
11
|
-
return url.format({
|
|
12
|
-
protocol: req.protocol,
|
|
13
|
-
host: req.get("host"),
|
|
14
|
-
pathname: req.baseUrl + req.path,
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
/**【特殊错误!】祸首原因:fileUrl变量名字和 重名函数名,导致奇怪啊!!
|
|
19
|
-
* 这才导致的没法直接使用,只好自己引入:复制功能来自 "file-url": "^4.0.0", 应该不需要;
|
|
20
|
-
* 重名:导致的莫名其妙错误!!!
|
|
21
|
-
* const url22 = fileUrl(filenamepath);
|
|
22
|
-
* const fileUrl = encodeURI(tsobj.url);
|
|
23
|
-
* */
|
|
24
|
-
export interface ConvertOptions {
|
|
25
|
-
/**
|
|
26
|
-
Passing `false` will make it not call `path.resolve()` on the path.
|
|
27
|
-
|
|
28
|
-
@default true
|
|
29
|
-
*/
|
|
30
|
-
readonly resolve?: boolean;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**把路径全文件名 本地文件,拖进浏览器窗口后,实际转义显示的URL情况:
|
|
34
|
-
* 返回:浏览器显示的url; filePath输入:本地文件含有路径。
|
|
35
|
-
* */
|
|
36
|
-
export const filePathToUrl = (filePath: string, options?: ConvertOptions) => {
|
|
37
|
-
const { resolve = true } = options || {};
|
|
38
|
-
|
|
39
|
-
let pathName = filePath;
|
|
40
|
-
if (resolve) {
|
|
41
|
-
pathName = path.resolve(filePath);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
pathName = pathName.replace(/\\/g, "/");
|
|
45
|
-
|
|
46
|
-
// Windows drive letter must be prefixed with a slash.
|
|
47
|
-
if (pathName[0] !== "/") {
|
|
48
|
-
pathName = `/${pathName}`;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Escape required characters for path components.
|
|
52
|
-
// See: https://tools.ietf.org/html/rfc3986#section-3.3
|
|
53
|
-
return encodeURI(`file://${pathName}`).replace(/[?#]/g, encodeURIComponent);
|
|
54
|
-
};
|
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
工具包需要发布,工程目录:page2pdf-server/执行 npm publish 发布到npm
|
|
2
|
-
后端没有单步调试模式太不好了,原本直接start就能单步调试,后来不行了,jest来解决:
|
|
3
|
-
__test__/./generatePdf.test.ts问题:jest用Run模式正常,可是若Debug模式单步调试的,.post(`/api/pdf`).send就会提前中止!原因xxxController容不下多个接口函数?
|
|
4
|
-
/?有断点运行卡着的并且xxxController类里有两个函数的?提前中止啊;非得拆分两个文件。
|
|
5
|
-
jest和build命令没有直接关系jest没报错build可能报错的。
|
|
6
|
-
注意jsDoc有毛病的地方,可导致prettier报错,build失败。
|
|
7
|
-
最早框架例子乃是 https://github.com/filoscoder/tenstack-starter/generate
|
|
8
|
-
import CONFIG from "./config";可能不会报错,就是在jest "test:watchAll": 才发现调试无端被终止。
|
|
9
|
-
注意发送请求还可能立刻出错async (req: Req, res: Res, next: NextFn) => {const task = req.body as ConfigRoot<FileTransform>;在发送的工具段看到已经结束,可服务器还在运行状态的
|
|
10
|
-
pdf-lib::DrawText和字体相关,可能报错。
|
|
11
|
-
"yarn命令行": "yarn add cross-env –save-dev",
|
|
12
|
-
如何将迁移tslint至eslint https://fiime.cn/blog/121329
|
|
13
|
-
google-chrome --headless --remote-debugging-port=9222
|
|
14
|
-
启动浏览器后 http://localhost:9222/json 观察。
|
|
15
|
-
非前端浏览器直接.\chrome.exe --headless 打印模式的:
|
|
16
|
-
http://localhost:8080/1/sdsd
|
|
17
|
-
高一层封装库版 : 文档http://blogs.lovemiss.cn/blogs/node/puppeteer/page.html
|
|
18
|
-
const chrome_exe2 = String.raw`${process.env["ProgramFiles(x86)"]}\Google\Chrome\Application\chrome.exe`;
|
|
19
|
-
const chrome_exe =String.raw`${process.env.LocalAppData}\Google\Chrome\Application\chrome.exe`;
|
|
20
|
-
const user_data_path = String.raw`${process.env.LocalAppData}\Google\Chrome\User Data\Default`;
|
|
21
|
-
.\chrome.exe --headless --disable-gpu --no-sandbox --run-all-compositor-stages-before-draw and --virtual-time-budget=10000 --print-to-pdf='E:\test12.pdf' http://192.168.171.3:3765/free/stopInspec/2TDl_QgqQ-e60yG_Bl9IdFJlcXVlc3Q
|
|
22
|
-
wkhtmltopdf --window-status ready_to_print https://blog.csdn.net/javaJxl/article/details/123989786 E:\test12.pdf
|
|
23
|
-
both are need to work --virtual-time-budget without --run-all-compositor-stages-before-draw doesn't seems to work very well.... for me, it's working when both are there –
|
|
24
|
-
other usefull options --hide-scrollbars --disable-translate --disable-gpu
|
|
25
|
-
|
|
26
|
-
web打印//pdf-generator-service-master/直接下载pdf; "pdf-lib": "^1.11.2", "puppeteer": "^13.5.0",
|
|
27
|
-
应该统一使用 yarn add ---;
|
|
28
|
-
非前端浏览器直接.\chrome.exe --headless 打印模式的:
|
|
29
|
-
'js-html2pdf' 包 差别感觉较大的。
|
|
30
|
-
.\chrome.exe --headless --disable-gpu --no-sandbox --run-all-compositor-stages-before-draw and --virtual-time-budget=10000 --print-to-pdf='E:\test12.pdf' http://192.168.171.3:3765/free/stopInspec/2TDl_QgqQ-e60yG_Bl9IdFJlcXVlc3Q
|
|
31
|
-
wkhtmltopdf --window-status ready_to_print https://blog.csdn.net/javaJxl/article/details/123989786 E:\test12.pdf
|
|
32
|
-
both are need to work --virtual-time-budget without --run-all-compositor-stages-before-draw doesn't seems to work very well.... for me, it's working when both are there –
|
|
33
|
-
other usefull options --hide-scrollbars --disable-translate --disable-gpu
|
|
34
|
-
--run-all-compositor-stages-before-draw and --virtual-time-budget=10000.
|
|
35
|
-
对比方案 wkhtmltopdf has a feature --window-status ready_to_print to do so.
|
|
36
|
-
命令行参数存在问题也不会报错啊!延迟时间固定10秒钟以上了。
|
|
37
|
-
.\chrome.exe --headless --disable-gpu --no-sandbox --run-all-compositor-stages-before-draw --virtual-time-budget=10000 --print-to-pdf='E:\test12.pdf' http://192.168.171.3:3765/free/stopInspec/2TDl_QgqQ-e60yG_Bl9IdFJlcXVlc3Q
|
|
38
|
-
根据页面具体长度没法自动调节延迟时间
|
|
39
|
-
.\chrome.exe --headless --disable-gpu --no-sandbox --virtual-time-budget=10000 --print-to-pdf='E:\test12.pdf' http://192.168.171.3:3765/free/stopInspec/2TDl_QgqQ-e60yG_Bl9IdFJlcXVlc3Q
|
|
40
|
-
下面这个不行还是早产了。
|
|
41
|
-
.\chrome.exe --headless --no-sandbox --run-all-compositor-stages-before-draw --print-to-pdf='E:\test12.pdf'
|
|
42
|
-
http://192.168.171.3:3765/free/stopInspec/2TDl_QgqQ-e60yG_Bl9IdFJlcXVlc3Q
|
|
43
|
-
这个 没法结束啊?
|
|
44
|
-
wkhtmltopdf --window-status ready_to_print http://192.168.171.3:3765/free/stopInspec/2TDl_QgqQ-e60yG_Bl9IdFJlcXVlc3Q E:\test14.pdf
|
|
45
|
-
wkhtmltopdf --javascript-delay 5000 http://192.168.171.3:3765/free/stopInspec/2TDl_QgqQ-e60yG_Bl9IdFJlcXVlc3Q E:\test14.pdf
|
|
46
|
-
wkhtmltopdf --javascript-delay 9000 --window-status ready_to_print http://192.168.171.3:3765/free/stopInspec/2TDl_QgqQ-e60yG_Bl9IdFJlcXVlc3Q E:\test019.pdf
|
|
47
|
-
通过配置项:--javascript-delay <msec> 实现,msec单位为毫秒。
|
|
48
|
-
通过配置项:--window-status <windowStatus> 实现,其中 windowStatus 为html页面上的 window.status 值。
|
|
49
|
-
wkhtmltopdf --javascript-delay 9000 --load-error-handling skip http://192.168.171.3:3765/free/stopInspec/2TDl_QgqQ-e60yG_Bl9IdFJlcXVlc3Q E:\test019.pdf
|
|
50
|
-
wkhtmltopdf --javascript-delay 9000 --no-stop-slow-scripts http://192.168.171.3:3765/free/about E:\test019.pdf
|
|
51
|
-
wkhtmltopdf --javascript-delay 9000 --no-stop-slow-scripts E:\SaaS.mhtml E:\test019.pdf
|
|
52
|
-
--load-error-handling --load-media-error-handling --window-status imdone --window-status imdone
|
|
53
|
-
--no-stop-slow-scripts 不停止运行缓慢的javascript代码
|
|
54
|
-
--javascript-delay <msec> 延迟一定的毫秒等待javascript 执行完成(默认值是200)
|
|
55
|
-
--load-error-handling <handler> 指定当页面加载失败后的动作,可以指定为:abort(中止)、
|
|
56
|
-
ignore(忽略)、skip(跳过);(默认值是:abort)
|
|
57
|
-
--load-media-error-handling <handler> 指定当媒体文件加载失败后的动作,可以指定为:
|
|
58
|
-
abort(中止)、ignore(忽略)、skip(跳过);
|
|
59
|
-
(默认值是:ignore)
|
|
60
|
-
wkhtmltopdf 动态网页不好,media print不好。
|
|
61
|
-
gregnb/react-to-print 有没法对接print() 仅仅取得Doms还会加载的。
|
|
62
|
-
import Html2Pdf from 'js-html2pdf'; 对照效果差别特大的, tHead没有。下载的。
|
|
63
|
-
blixxurd/enchanted-scroll Puppeteer's Module 报错'path” has been externalized for browser compatibility and cannot be accessed in client code.服务端环境node的;
|
|
64
|
-
Szpadel/chrome-headless-render-pdf 效果最为接近浏览器另存的。可惜需要node.js服务环境下面跑的。
|
|
65
|
-
https://www.npmjs.com/package/chrome-headless-render-pdf?activeTab=readme
|
|
66
|
-
Edge瀏覽器輸出pdf相似度較高但是不如chrome好。
|
|
67
|
-
更進一步 服務端 https://www.npmjs.com/package/@myrh.fr/html-pdf-chrome
|
|
68
|
-
Puppeter是一个与Chrome交互的API,https://www.npmjs.com/package/prerender是一个web服务器 接受流數據pdf;Uint8Array
|
|
69
|
-
base64 Buffer to .from(pdf.data, 'base64'); https://www.npmjs.com/package/better-html-pdf轉換;
|
|
70
|
-
https://www.likecs.com/show-308534931.html window.URL.createObjectURL(blob); 原生建立<a/链接anchor.download>Blob Uint8Array(n);
|
|
71
|
-
https://github.com/mrrio/jspdf jdPdf对象的可 pdf.save(this.filename);变身文件;
|
|
72
|
-
base64转pdf filePath https://www.foxitsoftware.cn/pdfbianji/jiaocheng/5059.html
|
|
73
|
-
合并两个import { PDFDocument, PDFPage } from "pdf-lib"; https://www.coder.work/article/7773874
|
|
74
|
-
拷贝 https://www.5axxw.com/questions/content/jkmyka new Blob([bufferArray], { type: 'application/pdf' }) saveAs(blob, `Appendix${number}.pdf`)
|
|
75
|
-
加页码 for (const page of contentPages) { content.getPageIndices()); https://www.cnblogs.com/tianliupingzong/p/12703007.html
|
|
76
|
-
专业性质 https://blog.risingstack.com/pdf-from-html-node-js-puppeteer/ 屏幕截图
|
|
77
|
-
jsPDF 和 PDFKit 也不能用!
|
|
78
|
-
选项3+1:CSS打印规则
|
|
79
|
-
await page.type('#password', process.env.PDF_PASSWORD)
|
|
80
|
-
//puppeteer-browser-ready @只要puppeteer/core/必定没法独立于nodejs 、/fs/;
|
|
81
|
-
合并fs puppeteer代码 https://www.npmjs.com/package/pdf-essentials-js?activeTab=readme
|
|
82
|
-
在线预览文件 https://www.npmjs.com/package/react-file-preview-latest?activeTab=readme
|
|
83
|
-
|
|
84
|
-
chrome-headless-render-pdf 拷贝改造看??
|
|
85
|
-
Cannot find module 'net' 而且并不是npmjs搜到的普通包{全局化意思?},原本应该是node自带的东西。
|
|
86
|
-
原本const net = require('net');报错Cannot find module,但是yarn add net也能纠正,怪异不是同一个包、node.js转过来给客户端用。
|
|
87
|
-
google-chrome --remote-debugging-port=9222
|
|
88
|
-
import {CDP} from "chrome-remote-interface"; window.criRequest=function criRequest(options, callback) {}; 报错?
|
|
89
|
-
浏览器需要用import {CDP} from "chrome-remote-interface";替换;
|
|
90
|
-
在浏览器客户模式没法做? CDP is not a function; window.criRequest is not a function 没用例子
|
|
91
|
-
window.criRequest is not a function at e.exports (chrome-remote-interface.js:1:1)
|
|
92
|
-
node服务端接受命令,等待返回一个下载结果?axios{ :3000,:{{}} "../pdf/" save to local??{:应答:异步??,预期应该生成文件名字}}多此一举直接在本机目录生成。岂
|
|
93
|
-
真的是在浏览器客户模式完全没法做?只能搞个本机上的服务或者命令?chrome-headless-render-pdf 包加 了就 Cannot find module 'fs'
|
|
94
|
-
|
|
95
|
-
@特殊打印机规格的打印了?纸张大小纸张形态不是普通的情况,分页?。 还有应用层自己做了合并处理的情况。#批量打印多个文件还是单一个文件的?文件输出队列模式。
|
|
96
|
-
const opn = require('opn');
|
|
97
|
-
opn('C:/Users/hzx/Desktop/日报.txt'); 打印预览。
|
|
98
|
-
(ipp和html-pdf-node)实现连接打印机后端静默打印html文件 https://blog.csdn.net/qq_43618981/article/details/128018767
|
|
99
|
-
kao REST
|
|
100
|
-
基初始点 https://github.com/isneezy/pdf-generator-service 类型可取
|
|
101
|
-
为post之后 https://blog.csdn.net/notBackground/article/details/121944479 跨域问题http://lqblogs.com/node/16
|
|
102
|
-
react-file-preview-latest 嵌入文档阅读器
|
|
103
|
-
“文书打印转换器” page2PdfServer
|
|
104
|
-
可支持SPA APP动态生成的网页多个链接的合并输出,但前提要求这些网页URL在打印信号前必须安静下来亦即准备好视图,后续不会再执行脚本语言修改页面了。
|
|
105
|
-
PM2
|
|
106
|
-
D:\home\page2pdf-server> 下面运行:
|
|
107
|
-
|
|
108
|
-
名称 PID CPU 峰值工作集(内存) 内存(活动的专用工作集) 页面错误增量 I/O 读取字节 I/O 写入字节 I/O 其他字节 命令行
|
|
109
|
-
两个进程node.exe E:\del\nodejs\node.exe D:\home\page2pdf-server\node_modules\pm2\lib\ProcessContainer.js
|
|
110
|
-
杀掉会自动重启的;
|
|
111
|
-
只能杀 node D:\home\page2pdf-server\node_modules\pm2\lib\Daemon.js 杀掉也能自动关闭被管理的2个服务进程的。
|
|
112
|
-
windows设置pm2开机服务自启动nodejs项目 https://www.cnblogs.com/smile008/p/16746375.html
|
|
113
|
-
node.js必须有的,
|
|
114
|
-
npm install pm2 -g
|
|
115
|
-
npm install pm2-windows-startup -g
|
|
116
|
-
若运行 pm2-startup install 报错的
|
|
117
|
-
在系统中搜索Windows PowerShell,用管理员身份打开
|
|
118
|
-
打开窗口输入命令行 set-ExecutionPolicy RemoteSigned 输入y回车确认,再回头运行pm2-startup install。
|
|
119
|
-
pm2 start ./app.js –name xsx ##等于安装服务的工程主目录
|
|
120
|
-
pm2 start D:\home\page2pdf-server\dist\src\index.js --name "文书打印转换器"
|
|
121
|
-
pm2 save #保证重启电脑可以自动跑
|
|
122
|
-
pm2 ls #查看守护服务情况,自带进程node C:\Users\herzhang\AppData\Roaming\npm\node_modules\pm2\lib\Daemon.js
|
|
123
|
-
pm2 stop all # 停止所有服务进程
|
|
124
|
-
pm2 delete 0 # 删除服务(pm2 delete app_id)
|
|
125
|
-
要卸载服务,执行:pm2-service-uninstall 直接杀掉自带进程node;
|
|
126
|
-
const browser = await puppeteer.launch({headless: 'new'});
|
|
127
|
-
不是同一个chrome可执行文件,导致页面登录状态不一致的,
|
|
128
|
-
const browser = await puppeteer.launch({executablePath: '/path/to/Chrome'}); 同一个版本的;
|
|
129
|
-
http://127.0.0.1:9222/json/version 从中复制
|
|
130
|
-
"webSocketDebuggerUrl": "ws://127.0.0.1:9222/devtools/browser/0a179c19-fc6b-4145-8657-7bc79995deb3"
|
|
131
|
-
const puppeteer = require('puppeteer-core')
|
|
132
|
-
免于重新登禹的 cookie继承的,只好采用.connect({browserWSEndpoint方式。。
|
|
133
|
-
高一层封装库版 : 文档http://blogs.lovemiss.cn/blogs/node/puppeteer/page.html
|
|
134
|
-
* 缺点:需要取得cookie啊,网页登录状态丢失。新启动浏览器速度 真的慢 无法忍受!
|
|
135
|
-
* userDataDir: user_data_path,加上后只需要在该模式底下多做登录一次就能保留cookie。
|
|
136
|
-
* 优点:url无效失败的可以抛出异常捕捉的。自己启动浏览器,无需浏览器事先启动好的。
|
|
137
|
-
* 采用puppeteer.connect({ webSocketDebuggerUrl会经常变动啊; 从 http://127.0.0.1:9222/json/version 中复制
|
|
138
|
-
* connect会直接影响到了用户浏览器体验,前台自己跳转页面显示,感觉古怪!而且速度一样很慢。
|
|
139
|
-
* 【评估结论】puppeteer方式性能较差 慢,不采用。
|
|
140
|
-
浏览器打印默认是20.989cmX29.701cm尺寸的信息。 210*297
|
|
141
|
-
CDP默认产生的尺寸: 21.590cm*27.940cm;实际是Letter尺寸的。
|
|
142
|
-
边距:内容距离页面顶部底部侧边的距离,可分别设置默认为全部10mm。
|
|
143
|
-
浏览器直接打印的效果实际上比起CDP答应的效果稍微存在一点差别,CDP转换出来的pdf效果更佳点。无法真正一致!
|
|
144
|
-
页眉页脚和正文重叠了,把上下边距拉大点!
|
|
145
|
-
headerTemplate: '<div style="width:100%; text-align:center; border-bottom: 1pt solid #eeeeee; margin: 20px 10px 10px; font-size: 10pt">
|
|
146
|
-
<span class=title></span></div>'
|
|
147
|
-
|
|
148
|
-
footerTemplate: '<div style="width:100%; text-align:right; border-top: 1pt solid #eeeeee; margin: 10px 10px 20px; font-size: 8pt;">
|
|
149
|
-
<span class=pageNumber></span> of <span class=totalPages></span></div>'
|
|
150
|
-
displayHeaderFooter: true
|
|
151
|
-
在页眉增加 LOGO 标识
|
|
152
|
-
headerTemplate: '<div style="position: relative; width:100%; text-align:center; border-bottom: 1pt solid #eeeeee; margin: 30px 0px 10px; font-size: 10pt"></span>
|
|
153
|
-
<div style="position: absolute; width:100%; text-align: center; bottom: 5px;"><span class=title></div>
|
|
154
|
-
<div style="position: absolute; text-align: right; bottom: 5px;right: 20px;">version: 1.0</div>
|
|
155
|
-
</div>'
|
|
156
|
-
|
|
157
|
-
footerTemplate: '<div style="position: relative; width: 100%; text-align: left; border-top: 1pt solid #eeeeee; margin: 10px 0px 30px; font-size: 8pt;">
|
|
158
|
-
<div style="position: absolute; text-align: left; top: 5px;left: 60px;">YYYY-MM-DD</div>
|
|
159
|
-
<div style="position: absolute; width: 100%; text-align: center; top: 5px;">©2022 ABCD</div>
|
|
160
|
-
<div style="position: absolute; text-align: right;top: 5px;right: 20px;"> <span class=pageNumber></span> of <span class=totalPages></span></div></div>'
|
|
161
|
-
|
|
162
|
-
<div><div> <div>YYYY-MM-DD</div> <div>©2022 ABCD</div> <div> <span></span> of <span></span>
|
|
163
|
-
</div>
|
|
164
|
-
</div></div>
|
|
165
|
-
|
|
166
|
-
<div>
|
|
167
|
-
<div> <img height="30px" src="data:image/png;charset=utf-8;base64,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" alt="">
|
|
168
|
-
</div> <div><span></span></div> <div>version: 1.0</div> </div>
|
|
169
|
-
|
|
170
|
-
headerTemplate = `<div style="position: relative; width:100%; text-align:center; border-bottom: 1pt solid #eeeeee; margin: 3.5mm 0px 10px; font-size: 10pt"></span>
|
|
171
|
-
<div style="position: absolute; width:100%; text-align: center; bottom: 5px;"><span class=title></div>
|
|
172
|
-
<div style="position: absolute; text-align: right; bottom: 5px;right: 20px;">version: 1.0</div>
|
|
173
|
-
</div>`;
|
|
174
|
-
|
|
175
|
-
默认标题 '<div style=\\"position: absolute; width:100%; text-align: center; bottom: 5px;\\"><span id=\\"titlespan\\" class=title></div>',
|
|
176
|
-
使用chrome, 不能以root账号直接使用 https://www.cnblogs.com/kk1893/p/14985512.html
|
|
177
|
-
let browserOptions = { args: ['--no-sandbox', '--disable-setuid-sandbox'] };
|
|
178
|
-
物理打印机系统对话框设置:可能能配置装订线宽度和页码输出的{套中套}可分拆却就不能文件合并。
|
|
179
|
-
考虑首先多url生成多个pdf以后,再来合并pdf以及添加页眉页脚。
|
|
180
|
-
pdf-lib 和 @pdf-lib/fontkit
|
|
181
|
-
厂家的文档: https://pdf-lib.js.org/ https://www.npmjs.com/package/pdf-lib
|
|
182
|
-
|
|
183
|
-
运行上面的脚本会生成下面的PDF。 使用 pdf-lib 非常简单,只有一些陷阱:注意
|
|
184
|
-
PDFDocument#embedPng()和PDFDocument#save()返回Promise,因此你需要使用await。
|
|
185
|
-
browser.on('console', function(type, arg) {
|
|
186
|
-
console.log(type, '::', arg);
|
|
187
|
-
});
|
|
188
|
-
yield browser.goto(`file://${__dirname}/book.html`).
|
|
189
|
-
pdf('./bin/80-20-guide-to-es2015-generators.pdf', { marginsType: 1 }).
|
|
190
|
-
end();
|
|
191
|
-
稀奇做法:
|
|
192
|
-
var thunkify = require('thunkify');
|
|
193
|
-
var fs = require('fs');
|
|
194
|
-
var read = thunkify(fs.readFile);
|
|
195
|
-
read('package.json', 'utf8')(function(err, str){
|
|
196
|
-
});
|
|
197
|
-
另存变身mhtml形式的读取吗;有些cavas整的图片竟然没有被保存下来=丢失!这个解决路径断了;
|
|
198
|
-
厂家说明 http://blogs.lovemiss.cn/blogs/node/puppeteer/page.html#page-pdf
|
|
199
|
-
页眉页脚 https://zhuanlan.zhihu.com/p/493494190
|
|
200
|
-
直接使用不带chrome的puppeteer-core ;; npm install puppeteer --ignore-scripts
|
|
201
|
-
http://127.0.0.1:9872/json/version
|
|
202
|
-
C:\Users\herzhang\AppData\Local\Google\Chrome\Application\chrome.exe --headless --remote-debugging-port=9872
|
|
203
|
-
常用 API 浅析; https://toutiao.io/posts/gea4vfs/preview
|
|
204
|
-
【CDP文档】 https://chromedevtools.github.io/devtools-protocol/tot/Target/
|
|
205
|
-
纸张大小尺寸+布局方向是自定义系列的:
|
|
206
|
-
"file:///E:/%E4%B8%B4%E6%97%B6/web%E6%89%93%E5%8D%B0/pdfs/testHtmlPrint.html",
|
|
207
|
-
前端发送数据包时刻,页眉页脚的脚本需要在 HTML转JSON 工具网站 进行转换处理后的; https://uutool.cn/html2json/
|
|
208
|
-
发送命令:非标准的纸张尺寸,必须独立声明{ customp:[{"id":"wuchun","in":"8.5in 11in"},,], 后面引用wuchun纸张大小}
|
|
209
|
-
,以下@page规则将页面框尺寸设置为8.5×11英寸,并在页面框边缘和页面区域之间的所有边上创建'2cm'边距: @page { size:8.5in 11in; margin: 2cm }
|
|
210
|
-
'NODE_ENV' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 Unix和Windows引号转移符斜杠差距。cross-env加上!
|
|
211
|
-
npm install cross-env –save-dev,再在NODE_ENV=xxxxxxx前面添加cross-env
|
|
212
|
-
Instead,> consider using the [[PDFDocument.embedPdf]] and> [[PDFDocument.embedPage]] methods,
|
|
213
|
-
const page = docCPdf.addPage(); + await page.drawPage 无法保留纸张的横竖方向!
|
|
214
|
-
Page 看成一个 Page 类型的 Tab 对Tab 的刷新, 跳转, 停止, 激活, 截图等功能都可以找到;
|
|
215
|
-
客户端开启两个Chrome程序,先启动那个尽量缩小,后启动那个用于正常用户作业浏览。打印转换器会使用先启动那个Chrome,尽量避免干涉用户浏览。
|
|
216
|
-
package.json:: start 又能使用单步调试模式运行了,奇怪,为何前一段时间突然不能用,害得我只能绕道jest模式。
|
|
217
|
-
{
|
|
218
|
-
"targetId": "69817BED212B60E877D0C7FCA3B7EEE9",
|
|
219
|
-
"type": "background_page",
|
|
220
|
-
"title": "我爱的视频助手",
|
|
221
|
-
"url": "chrome-extension://jnaihcnhfkchneeibpdaogohedfpibhp/_generated_background_page.html",
|
|
222
|
-
"attached": false,
|
|
223
|
-
"canAccessOpener": false,
|
|
224
|
-
"browserContextId": "F9534136E480EA681FEA920B3B20D6F0"
|
|
225
|
-
}
|
|
226
|
-
{
|
|
227
|
-
"targetId": "AF6D991E5405E9704C6924FB22DF2A0F",
|
|
228
|
-
"type": "page",
|
|
229
|
-
"title": "新标签页",
|
|
230
|
-
"url": "chrome://newtab/",
|
|
231
|
-
"attached": true,
|
|
232
|
-
"canAccessOpener": false,
|
|
233
|
-
"browserContextId": "F9534136E480EA681FEA920B3B20D6F0"
|
|
234
|
-
}
|
|
235
|
-
{
|
|
236
|
-
"targetId": "656100C2C55FBD0EC127A143CBB24C0A",
|
|
237
|
-
"type": "iframe",
|
|
238
|
-
"title": "https://pos.baidu.com/fctm?conwid=830&conhei=180&rdid=6752623&dc=3&di=u6752623&s1=764036071&s2=688774251&dri=0&dis=0&dai=1&ps=0x0&enu=encoding&exps=110277,110275,110261,110252,110011&ant=0&psi=681dadecfc47bca5&dcb=___adblockplus_&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tpr=1688682466087&ti=2345%E7%BD%91%E5%9D%80%E5%AF%BC%E8%88%AA%EF%BC%8D%E8%87%B4%E5%8A%9B%E4%BA%8E%E6%89%93%E9%80%A0%E7%99%BE%E5%B9%B4%E5%93%81%E7%89%8C%EF%BC%88%E5%B7%B2%E5%88%9B%E5%BB%BA17%E5%B9%B411%E4%B8%AA%E6%9C%88%EF%BC%89&ari=2&ver=0609&kws=2345.com%2C2345%E7%BD%91%E5%9D%80%E5%AF%BC%E8%88%AA%2C%E7%BD%91%E5%9D%80%E5%AF%BC%E8%88%AA%2C%E4%BA%8C%E4%B8%89%E5%9B%9B%E4%BA%94%2C23&dps=2345.com%E7%83%AD%E9%97%A8%E7%BD%91%E5%9D%80%E5%AF%BC%E8%88%AA%E7%AB%99%E7%BD%91%E7%BD%97%E7%B2%BE%E5%BD%A9%E5%AE%9E%E7%94%A8%E7%BD%91%E5%9D%80%EF%BC%8C%E5%A6%82%E9%9F%B3%E4%B9%90%E3%80%81%E5%B0%8F%E8%AF%B4%E3%80%81NBA%E3%80%81%E8%B4%A2%E7%BB%8F%E3%80%81%E8%B4%AD%E7%89%A9%E3%80%81%E8%A7%86%E9%A2%91%E3%80%81%E8%BD%AF%E4%BB%B6%E5%8F%8A%E7%83%AD%E9%97%A8%E6%B8%B8%E6%88%8F%E7%BD%91%E5%9D%80%E5%A4%A7%E5%85%A8%E7%AD%89%EF%BC%8C%E4%BA%8C%E4%B8%89%E5%9B%9B&dbv=2&drs=4&pcs=1519x722&pss=1519x4619&cfv=0&cpl=5&chi=1&cce=true&cec=UTF-8&tlm=1688682121&prot=2&rw=722<u=https%3A%2F%2Fwww.2345.com%2F%3F41035-0004&ecd=1&dft=0&uc=1536x824&pis=-1x-1&sr=1536x864&tcn=1688682470&qn=6d9b2ce1d006b2e6&ft=1",
|
|
239
|
-
"url": "https://pos.baidu.com/fctm?conwid=830&conhei=180&rdid=6752623&dc=3&di=u6752623&s1=764036071&s2=688774251&dri=0&dis=0&dai=1&ps=0x0&enu=encoding&exps=110277,110275,110261,110252,110011&ant=0&psi=681dadecfc47bca5&dcb=___adblockplus_&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tpr=1688682466087&ti=2345%E7%BD%91%E5%9D%80%E5%AF%BC%E8%88%AA%EF%BC%8D%E8%87%B4%E5%8A%9B%E4%BA%8E%E6%89%93%E9%80%A0%E7%99%BE%E5%B9%B4%E5%93%81%E7%89%8C%EF%BC%88%E5%B7%B2%E5%88%9B%E5%BB%BA17%E5%B9%B411%E4%B8%AA%E6%9C%88%EF%BC%89&ari=2&ver=0609&kws=2345.com%2C2345%E7%BD%91%E5%9D%80%E5%AF%BC%E8%88%AA%2C%E7%BD%91%E5%9D%80%E5%AF%BC%E8%88%AA%2C%E4%BA%8C%E4%B8%89%E5%9B%9B%E4%BA%94%2C23&dps=2345.com%E7%83%AD%E9%97%A8%E7%BD%91%E5%9D%80%E5%AF%BC%E8%88%AA%E7%AB%99%E7%BD%91%E7%BD%97%E7%B2%BE%E5%BD%A9%E5%AE%9E%E7%94%A8%E7%BD%91%E5%9D%80%EF%BC%8C%E5%A6%82%E9%9F%B3%E4%B9%90%E3%80%81%E5%B0%8F%E8%AF%B4%E3%80%81NBA%E3%80%81%E8%B4%A2%E7%BB%8F%E3%80%81%E8%B4%AD%E7%89%A9%E3%80%81%E8%A7%86%E9%A2%91%E3%80%81%E8%BD%AF%E4%BB%B6%E5%8F%8A%E7%83%AD%E9%97%A8%E6%B8%B8%E6%88%8F%E7%BD%91%E5%9D%80%E5%A4%A7%E5%85%A8%E7%AD%89%EF%BC%8C%E4%BA%8C%E4%B8%89%E5%9B%9B&dbv=2&drs=4&pcs=1519x722&pss=1519x4619&cfv=0&cpl=5&chi=1&cce=true&cec=UTF-8&tlm=1688682121&prot=2&rw=722<u=https%3A%2F%2Fwww.2345.com%2F%3F41035-0004&ecd=1&dft=0&uc=1536x824&pis=-1x-1&sr=1536x864&tcn=1688682470&qn=6d9b2ce1d006b2e6&ft=1",
|
|
240
|
-
"attached": false,
|
|
241
|
-
"canAccessOpener": false,
|
|
242
|
-
"browserContextId": "6462BDF4C120FD15A2C462621D55535F"
|
|
243
|
-
}
|
|
244
|
-
BD1CE5AD1D724197A177AC4E50DDB4A6
|
|
245
|
-
|
|
246
|
-
去掉bcrypt包 @mapbox/node-pre-gyp node-gyp 依賴python啊
|
|
247
|
-
useMeasure(dynctRef0)?.height 所获得尺寸实际针对屏幕的,在打印机场景该取值还是来自屏幕的,并非纸张打印语义的尺寸;没法测量打印时刻的div高度?。
|
|
248
|
-
|
|
249
|
-
新电脑,不是管理员账户跑的开发环境,POST http://localhost:9389/api/pdf 出现error: Error: connect ECONNREFUSED 127.0.0.1:9872
|
|
250
|
-
只好另外管理员用户启动浏览器窗口。当前打印服务器的为何却要调用管理员账户启动的浏览器?不能直接用当前用户启动浏览器,非要windows管理员窗口的。
|
|
251
|
-
奇怪浏览器手动去打印必须勾选页眉页脚才正常,没选的表格最右边会不见了,但是打印服务器不受此困扰,两者看似能确保页数一致性的。
|
|
252
|
-
去掉了: 没法在生产版本中用,没包报错
|
|
253
|
-
"devDependencies": {
|
|
254
|
-
"@types/module-alias": "^2.0.1",
|
|
255
|
-
"module-alias": "^2.2.3",
|
|
256
|
-
}
|
|
257
|
-
不是module-alias的问题,而是node_modules在生产目录底下也不能缺少啊!直接拷贝也行! https://blog.csdn.net/qq_35624642/article/details/128960311
|
|
258
|
-
windows用户若非管理员账户的:桌面上的Chrome快捷方式右键点属性在“兼容性”设置中:必须勾选“管理员身份运行”!否则端口remote-debugging-port没开启。
|
|
259
|
-
【浏览器有BUG】
|
|
260
|
-
预览打印的,若没有勾选页眉页脚的话可能导致表格输出的右边边框被裁剪看不见表格右边线了,就只能勾选页眉页脚,但是我这个打印转换服务器没有这个毛病。
|
|
261
|
-
但问题是:勾不勾选页眉页脚会不会影响到了实际打印输出的页数啊?目前还未发现这个影响存在的。
|
|
262
|
-
如何限制打印时刻浏览器宽的:
|
|
263
|
-
入口代码:src/utils/pdfgen.ts 的 async renderPdf(task: ConfigRoot<FileTransform>, tsobj: FileTransform) 浏览器打印主入口:
|
|
264
|
-
【CDP文档】 https://chromedevtools.github.io/devtools-protocol/tot/Target/
|
|
265
|
-
首先必须手动开启chrome浏览器;而且这个浏览器窗体宽度直接影响打印输出!可能会漏打,动态div测量调整布局问题。影响到浏览器其它用途体验。
|
|
266
|
-
yarn又失败: 无法访问上 https://registry.npmjs.org/
|
|
267
|
-
问题:有些URL网页,一直在等待加载好,死等打印命令没结果,估计CDP依据页面的网络消息决定加载结束与否的。
|
|
268
|
-
端口已经被占用,启动不能访问预定端口的:查进程 netstat -ano | findstr :9872 #找出 LISTENING 10972 =进程ID;杀掉
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
POST http://localhost:9389/api/pdf
|
|
2
|
-
Accept: application/json
|
|
3
|
-
Content-Type: application/json; charset=utf-8
|
|
4
|
-
|
|
5
|
-
{
|
|
6
|
-
"merge": true,
|
|
7
|
-
"name": "asjsak啊实打实2",
|
|
8
|
-
"lay": {
|
|
9
|
-
},
|
|
10
|
-
"files": [
|
|
11
|
-
{
|
|
12
|
-
"url": "http://192.168.1.102:3765/originalView/CR-JJ/ver/1/-3kfCWcBRx66P8YA7EOkXFJlcG9ydA/printAll",
|
|
13
|
-
"out": "横页脚的VS2"
|
|
14
|
-
}
|
|
15
|
-
]
|
|
16
|
-
}
|
|
17
|
-
###
|