[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();
相关推荐
Highcharts.js13 分钟前
缺失数据可视化图表开发实战|Highcharts创建人员出生统计面积图表示例
开发语言·前端·javascript·信息可视化·highcharts·图表开发
LaughingZhu7 小时前
Product Hunt 每日热榜 | 2026-05-21
前端·人工智能·经验分享·chatgpt·html
怕浪猫7 小时前
Electron 开发实战(一):从零入门核心基础与环境搭建
前端·electron·ai编程
小鹏linux8 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
前端若水9 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
Bigger9 小时前
mini-cc:一个轻量级 AI 编程助手的诞生
前端·ai编程·claude
涵涵(互关)9 小时前
Naive-ui树型选择器只显示根节点
前端·ui·vue
BY组态9 小时前
Ricon组态系统最佳实践:从零开始构建物联网监控平台
前端·物联网·iot·web组态·组态
BY组态9 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·物联网·iot·web组态·组态
SoaringHeart9 小时前
Flutter进阶:OverlayEntry 插入图层管理器 NOverlayZIndexManager
前端·flutter