iasei-html-to-pdf 1.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.
- package/README.md +111 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/html2pdf.d.ts +19 -0
- package/dist/utils/html2pdf.d.ts.map +1 -0
- package/dist/utils/html2pdf.js +162 -0
- package/dist/utils/html2pdf.js.map +1 -0
- package/package.json +40 -0
package/README.md
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# iasei-html-to-pdf 测试插件
|
|
2
|
+
|
|
3
|
+
将 HTML 元素导出为 PDF 的浏览器端工具,基于 `html2canvas` + `jspdf`,支持自动分页与自定义纸张大小。
|
|
4
|
+
|
|
5
|
+
## 特性
|
|
6
|
+
|
|
7
|
+
- 通过元素 ID 一键导出 PDF
|
|
8
|
+
- 自动按 A4 高度计算分页点并插入 `page-break` 标记,避免内容被截断
|
|
9
|
+
- 支持自定义纸张大小与单位(`mm` / `pt` / `cm` / `in` / `px`)
|
|
10
|
+
- 根据 `window.devicePixelRatio` 自适应缩放,保证清晰度
|
|
11
|
+
- 返回 `jsPDF` 实例,可继续追加内容或自定义保存
|
|
12
|
+
|
|
13
|
+
## 安装
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install iasei-html-to-pdf
|
|
17
|
+
# 或
|
|
18
|
+
pnpm add iasei-html-to-pdf
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Peer Dependencies**
|
|
22
|
+
|
|
23
|
+
| 依赖 | 版本 |
|
|
24
|
+
|------|------|
|
|
25
|
+
| `html2canvas` | `^1.4.1` |
|
|
26
|
+
| `jspdf` | `^4.2.1` |
|
|
27
|
+
|
|
28
|
+
## 用法
|
|
29
|
+
|
|
30
|
+
### 基本用法
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
import html2pdf from 'iasei-html-to-pdf';
|
|
34
|
+
|
|
35
|
+
const pdf = await html2pdf({ id: 'myPrintHtml' });
|
|
36
|
+
pdf.save('document.pdf');
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 自定义缩放与偏移
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
const pdf = await html2pdf({
|
|
43
|
+
id: 'myPrintHtml',
|
|
44
|
+
scale: 2, // canvas 缩放比例
|
|
45
|
+
vOffest: 20, // 页面顶部留白(pt)
|
|
46
|
+
});
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 自定义纸张大小
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
const pdf = await html2pdf({
|
|
53
|
+
id: 'myPrintHtml',
|
|
54
|
+
pageSize: {
|
|
55
|
+
width: 210,
|
|
56
|
+
height: 297,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## API
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
function html2pdf(params: {
|
|
65
|
+
id: string;
|
|
66
|
+
vOffest?: number;
|
|
67
|
+
scale?: number;
|
|
68
|
+
pageSize?: {
|
|
69
|
+
width: number;
|
|
70
|
+
height: number;
|
|
71
|
+
};
|
|
72
|
+
}): Promise<jsPDF>;
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 参数
|
|
76
|
+
|
|
77
|
+
| 参数 | 类型 | 默认值 | 说明 |
|
|
78
|
+
|------|------|--------|------|
|
|
79
|
+
| `id` | `string` | — | 需要导出的 DOM 元素 ID(必填) |
|
|
80
|
+
| `vOffest` | `number` | `15` | PDF 顶部垂直留白(pt) |
|
|
81
|
+
| `scale` | `number` | `min(2.5, 2 * devicePixelRatio)` | `html2canvas` 缩放比例,值越大越清晰 |
|
|
82
|
+
| `pageSize` | `{ width, height }` | A4 | 自定义纸张大小,未传时使用 A4(`595×842pt`) |
|
|
83
|
+
|
|
84
|
+
### 返回值
|
|
85
|
+
|
|
86
|
+
返回 `Promise<jsPDF>`,可调用 `.save(filename)` 下载,或继续操作 PDF 实例。
|
|
87
|
+
|
|
88
|
+
## 分页机制
|
|
89
|
+
|
|
90
|
+
1. 清理元素中历史的 `.page-break` 标记
|
|
91
|
+
2. 遍历子元素,当累计高度超过 A4 高度(`1123 - vOffest * 2 - 20` px)时,为该元素添加 `page-break` 类
|
|
92
|
+
3. 以每个 `page-break` 为分页点,将整张 canvas 切片后逐页写入 PDF
|
|
93
|
+
|
|
94
|
+
如需手动控制分页位置,可预先为目标元素添加 `page-break` 类。
|
|
95
|
+
|
|
96
|
+
## 注意事项
|
|
97
|
+
|
|
98
|
+
- 仅适用于浏览器环境,需要 `document` / `window` 全局变量
|
|
99
|
+
- 跨域图片需配置 CORS,否则 `html2canvas` 可能渲染失败
|
|
100
|
+
- 导出前请确保目标元素已完整渲染(图片加载完成等)
|
|
101
|
+
|
|
102
|
+
## 开发
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
pnpm install
|
|
106
|
+
pnpm run build # tsc 构建 dist
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## License
|
|
110
|
+
|
|
111
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;eAE7B,QAAQ"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import JsPDF from "jspdf";
|
|
2
|
+
/**
|
|
3
|
+
* @description: 导出html为pdf
|
|
4
|
+
* @param {string} id: html元素id
|
|
5
|
+
* @param {number} scale: 缩放比例
|
|
6
|
+
* @param {string} filename: 文件名
|
|
7
|
+
* @return {Promise}
|
|
8
|
+
*/
|
|
9
|
+
export declare function html2pdf(params: {
|
|
10
|
+
id: string;
|
|
11
|
+
vOffest?: number;
|
|
12
|
+
scale?: number;
|
|
13
|
+
pageSize?: {
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
unit?: "mm" | "pt" | "cm" | "in" | "px";
|
|
17
|
+
};
|
|
18
|
+
}): Promise<JsPDF>;
|
|
19
|
+
//# sourceMappingURL=html2pdf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html2pdf.d.ts","sourceRoot":"","sources":["../../src/utils/html2pdf.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgD1B;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;KACzC,CAAC;CACH,GAAG,OAAO,CAAC,KAAK,CAAC,CAuIjB"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
// 页面导出为pdf格式 //title表示为下载的标题,html表示document.querySelector('#myPrintHtml')
|
|
2
|
+
import html2Canvas from "html2canvas";
|
|
3
|
+
import JsPDF from "jspdf";
|
|
4
|
+
// 像素到点的转换函数
|
|
5
|
+
function pxToPt(px) {
|
|
6
|
+
// 1px = 0.75pt (96 DPI 标准)
|
|
7
|
+
return px * 0.75;
|
|
8
|
+
}
|
|
9
|
+
function checkElementPositions(mParams, A4_HEIGHT) {
|
|
10
|
+
const elements = document.getElementById(mParams.id);
|
|
11
|
+
if (!elements)
|
|
12
|
+
return;
|
|
13
|
+
const parentRect = elements.getBoundingClientRect();
|
|
14
|
+
let accumulatedHeight = 0;
|
|
15
|
+
const accumulateHeight = (element) => {
|
|
16
|
+
if (element.style.display == "none") {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const rect = element.getBoundingClientRect();
|
|
20
|
+
const heightFromParentTop = rect.bottom - parentRect.top;
|
|
21
|
+
const childElementNodes = Array.from(element.childNodes).filter((child) => child.nodeType === 1);
|
|
22
|
+
if (heightFromParentTop - accumulatedHeight > A4_HEIGHT && childElementNodes.length) {
|
|
23
|
+
childElementNodes.forEach((child) => accumulateHeight(child));
|
|
24
|
+
}
|
|
25
|
+
else if (heightFromParentTop - accumulatedHeight > A4_HEIGHT) {
|
|
26
|
+
element.classList.add("page-break");
|
|
27
|
+
console.log(element);
|
|
28
|
+
accumulatedHeight = rect.top - parentRect.top;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
accumulateHeight(elements);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* @description: 导出html为pdf
|
|
35
|
+
* @param {string} id: html元素id
|
|
36
|
+
* @param {number} scale: 缩放比例
|
|
37
|
+
* @param {string} filename: 文件名
|
|
38
|
+
* @return {Promise}
|
|
39
|
+
*/
|
|
40
|
+
export function html2pdf(params) {
|
|
41
|
+
const dpr = Math.max(window.devicePixelRatio || 1, 1);
|
|
42
|
+
const mParams = Object.assign({ scale: Math.min(2.5, 2 * dpr), vOffest: 15 }, params);
|
|
43
|
+
const A4_HEIGHT = 1123 - mParams.vOffest * 2 - 20; // A4 paper height in pixels at 96 DPI
|
|
44
|
+
// 清理历史分页标记,避免重复累积
|
|
45
|
+
Array.from(document.querySelectorAll(`#${params.id} .page-break`)).forEach((el) => el.classList.remove("page-break"));
|
|
46
|
+
checkElementPositions(mParams, A4_HEIGHT);
|
|
47
|
+
const node = document.getElementById(mParams.id);
|
|
48
|
+
const mainRect = node.getBoundingClientRect();
|
|
49
|
+
const elements = document.querySelectorAll(`#${mParams.id} .page-break`);
|
|
50
|
+
let pages = [];
|
|
51
|
+
if (node) {
|
|
52
|
+
pages.push({ x: 0, y: 0, h: 0, w: mainRect.width });
|
|
53
|
+
elements.forEach((item) => {
|
|
54
|
+
const itemRect = item.getBoundingClientRect();
|
|
55
|
+
pages.push({ x: 0, y: itemRect.top - mainRect.top, h: 0, w: mainRect.width });
|
|
56
|
+
});
|
|
57
|
+
for (let index = 0; index < pages.length; index++) {
|
|
58
|
+
const item = pages[index];
|
|
59
|
+
const nextItem = pages[index + 1];
|
|
60
|
+
if (nextItem) {
|
|
61
|
+
item.h = nextItem.y - item.y;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
item.h = mainRect.height - item.y;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
pages = pages.sort((a, b) => a.y - b.y);
|
|
69
|
+
return new Promise((resolve, reject) => {
|
|
70
|
+
if (!node) {
|
|
71
|
+
reject(new Error(`html2pdf: 未找到元素 #${mParams.id}`));
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
html2Canvas(node, {
|
|
75
|
+
useCORS: true,
|
|
76
|
+
allowTaint: false,
|
|
77
|
+
backgroundColor: "#ffffff",
|
|
78
|
+
logging: false,
|
|
79
|
+
scale: mParams.scale,
|
|
80
|
+
windowWidth: node.clientWidth + 200,
|
|
81
|
+
windowHeight: node.clientHeight + 200,
|
|
82
|
+
})
|
|
83
|
+
.then((canvas) => {
|
|
84
|
+
const pagesImage = pages.map((item) => {
|
|
85
|
+
const x = Math.round(item.x * mParams.scale);
|
|
86
|
+
const y = Math.round(item.y * mParams.scale);
|
|
87
|
+
const h = Math.round(item.h * mParams.scale);
|
|
88
|
+
const w = Math.round(item.w * mParams.scale);
|
|
89
|
+
const tileCanvas = document.createElement("canvas");
|
|
90
|
+
const tileCtx = tileCanvas.getContext("2d");
|
|
91
|
+
tileCanvas.width = w;
|
|
92
|
+
tileCanvas.height = h;
|
|
93
|
+
if (tileCtx) {
|
|
94
|
+
tileCtx.drawImage(canvas, x, y, w, h, 0, 0, w, h);
|
|
95
|
+
}
|
|
96
|
+
return { ...item, image: tileCanvas.toDataURL("image/jpeg", 1.0) };
|
|
97
|
+
});
|
|
98
|
+
// 创建 PDF,支持自定义纸张大小
|
|
99
|
+
let pdf;
|
|
100
|
+
if (mParams.pageSize) {
|
|
101
|
+
const { width, height, unit = "mm" } = mParams.pageSize;
|
|
102
|
+
if (unit === "px") {
|
|
103
|
+
// 像素单位需要转换为点
|
|
104
|
+
const widthPt = pxToPt(width);
|
|
105
|
+
const heightPt = pxToPt(height);
|
|
106
|
+
pdf = new JsPDF({
|
|
107
|
+
orientation: "portrait",
|
|
108
|
+
unit: "pt",
|
|
109
|
+
format: [widthPt, heightPt],
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// 其他单位直接使用
|
|
114
|
+
pdf = new JsPDF({
|
|
115
|
+
orientation: "portrait",
|
|
116
|
+
unit: unit,
|
|
117
|
+
format: [width, height],
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
pdf = new JsPDF("p", "pt", "a4");
|
|
123
|
+
}
|
|
124
|
+
pagesImage.forEach((item, index) => {
|
|
125
|
+
if (index > 0) {
|
|
126
|
+
pdf.addPage();
|
|
127
|
+
}
|
|
128
|
+
// 根据纸张大小计算图片尺寸
|
|
129
|
+
let imgWidth;
|
|
130
|
+
let imgHeight;
|
|
131
|
+
if (mParams.pageSize) {
|
|
132
|
+
// 自定义纸张大小
|
|
133
|
+
let pageWidth = mParams.pageSize.width;
|
|
134
|
+
let pageHeight = mParams.pageSize.height;
|
|
135
|
+
// 如果是像素单位,需要转换为点
|
|
136
|
+
if (mParams.pageSize.unit === "px") {
|
|
137
|
+
pageWidth = pxToPt(pageWidth);
|
|
138
|
+
pageHeight = pxToPt(pageHeight);
|
|
139
|
+
}
|
|
140
|
+
imgWidth = pageWidth;
|
|
141
|
+
imgHeight = (pageWidth / item.w) * item.h;
|
|
142
|
+
// 如果图片高度超过页面高度,按比例缩放
|
|
143
|
+
if (imgHeight > pageHeight) {
|
|
144
|
+
imgHeight = pageHeight;
|
|
145
|
+
imgWidth = (pageHeight / item.h) * item.w;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// 默认 A4 纸张大小
|
|
150
|
+
imgWidth = 595;
|
|
151
|
+
imgHeight = (595 / item.w) * item.h;
|
|
152
|
+
}
|
|
153
|
+
pdf.addImage(item.image, "JPEG", 0, mParams.vOffest, imgWidth, imgHeight);
|
|
154
|
+
});
|
|
155
|
+
resolve(pdf);
|
|
156
|
+
})
|
|
157
|
+
.catch((error) => {
|
|
158
|
+
reject(error);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=html2pdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html2pdf.js","sourceRoot":"","sources":["../../src/utils/html2pdf.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "iasei-html-to-pdf",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "将html转换为pdf 测试插件",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"keywords": [
|
|
12
|
+
"typescript",
|
|
13
|
+
"npm"
|
|
14
|
+
],
|
|
15
|
+
"author": "IASEI",
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public"
|
|
19
|
+
},
|
|
20
|
+
"peerDependencies": {
|
|
21
|
+
"html2canvas": "^1.4.1",
|
|
22
|
+
"jspdf": "^4.2.1"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@types/node": "^26.2.0",
|
|
26
|
+
"happy-dom": "^20.11.2",
|
|
27
|
+
"jsdom": "^30.0.1",
|
|
28
|
+
"typescript": "^7.0.2",
|
|
29
|
+
"vitest": "^4.1.10"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"html2canvas": "^1.4.1",
|
|
33
|
+
"jspdf": "^4.2.1"
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsc",
|
|
37
|
+
"test": "vitest run",
|
|
38
|
+
"test:watch": "vitest"
|
|
39
|
+
}
|
|
40
|
+
}
|