[AI编程]纯前端JS实现评论区自动截图&生成 PDF

前言

最近有个小需求,将页面中的流转意见部分自动截图,并且生成对应的pdf文件 .

实现的代码主要是ai写的,我起到一个调试的作用.

具体使用的场景:泛微低代码开发平台,所以也不能算Vibe coding,完成后的嵌入功能测试&后续的使用还是需要开发者来执行的.

在此记录一下过程.

过程

把需求甩给豆包,生成代码,进行调试.

个人比较习惯还是逐步拆解需求,让ai实现.某种程度防止ai幻觉?

  1. 提供html2canvas的生成截图并预览的功能 (先快速验证一下思路,确认可行)
  2. 因为开发环境在低代码平台,所以只能使用cdn引入的方式挂载,发现豆包最初提供的cdn地址无法访问,导致html2canvas无法加载->豆包提供国内cdn地址替换.
  3. 使用jsPDF将截图转换为pdf文件.
  4. 由于一开始未指定长宽方向,导致图片转为pdf后内容被截断了.->豆包提供判断逻辑调整pdf方向.
  5. 让豆包根据需求调整一下生成的附件名称(这里是拼接了年月日信息)
  6. 完成!

整体还是比较简单清晰的,当然这两个插件的功能也很强!常用的需求都能很好的实现.

总结

个人感觉,如果需求明确,用ai来实现的速度很快,而且逻辑也比较严密~

代码

复制代码
  // ========== 配置区(按开发文档填写,已填默认值)==========
  const CONFIG = {
    // 截图相关
    targetClass: '.weapp-workflow-comment-list', // 要截图的评论区class
  };

  // 步骤1:加载国内CDN的截图库(已验证可用)
  async function loadCaptureLibs() {
    if (!window.html2canvas) {
      await new Promise((resolve, reject) => {
        const script1 = document.createElement('script');
        script1.src = 'https://cdn.bootcdn.net/ajax/libs/html2canvas/1.4.1/html2canvas.min.js';
        script1.onload = resolve;
        script1.onerror = () => reject(new Error('html2canvas加载失败'));
        document.head.appendChild(script1);
      });
    }
    if (!window.jsPDF) {
      await new Promise((resolve, reject) => {
        const script2 = document.createElement('script');
        script2.src = 'https://cdn.bootcdn.net/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js';
        script2.onload = resolve;
        script2.onerror = () => reject(new Error('jspdf加载失败'));
        document.head.appendChild(script2);
      });
      window.jsPDF = window.jspdf.jsPDF;
    }
  }

  // 步骤2:核心主流程 - 截图
  async function captureAndUploadByOpenApi() {
    try {
      // 1. 加载截图库
      await loadCaptureLibs();
      console.log('✅ 截图库加载完成');

      // 2. 截图生成PDF(如需图片可替换)
      const target = document.querySelector(CONFIG.targetClass);
      if (!target) throw new Error('未找到截图区域,请检查class');

      const canvas = await window.html2canvas(target, {
        useCORS: true,
        backgroundColor: '#ffffff'
      });

      const { jsPDF } = window.jspdf;
      const pdf = new jsPDF({
        orientation: canvas.width > canvas.height ? 'landscape' : 'portrait',
        unit: 'px',
        format: [canvas.width, canvas.height],
        hotfixes: ['px_scaling'] // 修复比例问题
      });
      pdf.addImage(canvas, 'PNG', 0, 0, canvas.width, canvas.height);
      const pdfBlob = pdf.output('blob');

      const now = new Date();
      const dateStr = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, 0)}-${String(now.getDate()).padStart(2, 0)}`;

      const fileName = `项目xxxx_${dateStr}.pdf`;
      console.log('✅ 截图并生成PDF完成', fileName);
      
    } catch (err) {
      console.error('❌ 全流程失败:', err);
      alert(`❌ 操作失败:${err.message}`);
    }
  }

    // 执行主流程
    captureAndUploadByOpenApi();
相关推荐
西安小哥7 分钟前
端侧跑大模型,真正的门槛不在参数量:一次 596 秒到 10 秒的压缩路径复盘
前端·人工智能
陈随易29 分钟前
Cloudflare 出钱,Vite 团队挑人,44 个维护者分 30 万美元
前端·后端·程序员
恋猫de小郭1 小时前
Flutter THLC 的 WebView 滚动终于从 70 FPS 提升到 120 FPS
android·前端·flutter
严肃小白兔2 小时前
TanStack Router 更新构建工具链:Node.js 兼容性、路由分割与前端工程实践
前端·node.js·状态模式
IT_陈寒2 小时前
Vue这个奇葩的响应式问题让我加班到凌晨
前端·人工智能·后端
风骏时光牛马2 小时前
功能可用性自动化测试验证
前端
LucianaiB12 小时前
【元宝搜索开发者征文大赛】AI时代,学得慢就不用学?用元宝搜索打造一个教程保质期,确保每一个教程符合你的现状
前端·人工智能·ai编程
excel12 小时前
JavaScript 对象池:减少高频对象创建与 GC 压力
前端
陈随易14 小时前
纯 Go 写的 JS 引擎,跑分超过了 C 语言的 QuickJS
前端·后端·程序员
子兮曰16 小时前
Chrome 权限元素实战:144 与 151 的渐进增强写法
前端·javascript·chrome