Skip to content

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>