Nest 生成 PPT
安装依赖
bash
pnpm install --save pptxgenjs控制器
ts
import {
Controller,
Get,
Post,
Body,
Patch,
Param,
Delete,
Res,
} from "@nestjs/common";
import { PptService } from "./ppt.service";
@Controller("ppt")
export class PptController {
constructor(private readonly pptService: PptService) {}
@Get()
findAll() {
return {
data: this.pptService.findAll(),
};
}
}服务
ts
import { Injectable } from "@nestjs/common";
import pptxgen from "pptxgenjs";
@Injectable()
export class PptService {
findAll() {
const ppt = new pptxgen();
for (let i = 0; i < 10; i++) {
const slide = ppt.addSlide();
slide.addText("北京大学", {
x: "10%",
y: "10%",
color: "#ff0000",
fontSize: 30,
align: ppt.AlignH.center,
});
slide.addImage({
path: "https://nos.netease.com/edu-image/F78C41FA9703708FB193137A688F7195.png?imageView&thumbnail=150y150&quality=100",
x: "42%",
y: "25%",
});
slide.addText(
`北京大学创办于1898年,初名京师大学堂,是中国第一所国立综合性大学,也是当时中国最高教育行政机关。辛亥革命后,于1912年改为现名。 学校为教育部直属全国重点大学,国家“211工程”、“985工程”建设大学、C9联盟,以及东亚研究型大学协会、国际研究型大学联盟、环太平洋大学联盟、东亚四大学论坛的重要成员。`,
{ x: "10%", y: "60%", color: "#000000", fontSize: 14 }
);
}
const fileName = process.cwd() + "/public/" + "中国所有大学.pptx"; // 储存目录
console.log(fileName);
ppt.writeFile({
fileName: fileName,
compression: false, // 禁用压缩,生成更大的文件但更快"
});
}
}前端
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="https://unpkg.com/axios@1.5.0/dist/axios.min.js"></script>
</head>
<body>
<button
onClick="downlandlink('http://localhost:5000/static/1.pptx','中国.ppt')"
>
下载连接
</button>
</body>
<script>
// 下载连接
async function downlandlink(url, filename) {
try {
// 发送 GET 请求并设置 responseType 为 'blob'
const response = await axios.get(url, {
responseType: "blob",
});
// 创建一个临时 URL 用于下载
const blobUrl = window.URL.createObjectURL(new Blob([response.data]));
// 创建一个隐藏的 a 标签并触发点击
const link = document.createElement("a");
link.href = blobUrl;
link.setAttribute("download", filename);
document.body.appendChild(link);
link.click();
// 清理临时 URL 和 a 标签
document.body.removeChild(link);
window.URL.revokeObjectURL(blobUrl);
} catch (error) {
console.error("下载失败:", error);
}
}
</script>
</html>