CAD图纸粘贴到TinyMCE变模糊?剪贴板代理+SVG配置方案
搞芯片制造的人多半都碰过这种窝火事从CAD里复制一张版图或者封装图粘到TinyMCE搭的内部文档系统里图糊得跟马赛克一样。放大想看引脚编号、线宽标注根本认不出。这真不是粘贴姿势不对而是CAD的矢量图纸和浏览器的位图剪贴板之间有道天然的鸿沟。我前前后后在几个半导体工厂的知识库、质量管理、工艺文档项目里折腾过这个问题今天把根因、方案选型和落地配置完整梳理一遍给同样被“图纸粘贴变糊”困扰的朋友一个可以直接抄的作业。1. 问题根源CAD图纸和TinyMCE之间的“语言不通”1.1 你看到的“粘贴后变糊”实际发生了什么CAD图纸本质上是矢量数据。AutoCAD里的DWG、EDA工具里的MASKS、版图文件里面存的不是一个个像素而是坐标、直线、圆弧、多边形这些数学描述。所以图纸可以无限放大边缘依然清晰。但当你按下CtrlC时Windows系统会替你做“翻译”一方面把矢量信息包装成EMF增强型图元文件方便Word这类原生的桌面应用粘贴使用另一方面为了兼容浏览器这种“只认位图”的环境系统还会生成一张PNG位图放进剪贴板。浏览器里的TinyMCE能读到什么它读不到原生EMF数据只能通过ClipboardEvent拿到浏览器暴露出来的文本和图片。于是TinyMCE的paste插件拿到的是那张PNG一个base64数据串然后以img srcdata:image/png;base64,...的方式插入编辑器。这一下矢量就没了。PNG被插入之后编辑器里显示多大就是多大。你把它放大到200%所有锯齿、模糊全部暴露。芯片领域的图纸一张版图里可能密密麻麻排了成千上万个标准单元位图一旦缩小线条直接糊成一片严重影响评审和归档。1.2 芯片制造场景为什么特别在乎矢量输出有人会说模糊就模糊呗截图不也一样能用在普通办公里确实能将就。但芯片制造企业的技术文档不是给人“看个大概”的而是要拿来做工艺评审、质量回溯、变更核对。举个例子一份工艺异常分析报告里贴了掩模版局部图审阅人需要放大看清某个缺陷周围几微米范围内的图形关系。如果是位图放大之后全是锯齿根本无法确认是版图本身就是这样还是像素点导致的视觉误差。类似场景还包括封装设计图纸需要标注引脚间距、焊盘尺寸厂务系统的设备布局图需要精确读取管道走向和尺寸标注质量管理SOP里引用的工装夹具图纸需要看清公差标注工程变更通知单里贴的改版前后对比如图。这些图的共同特点是尺寸信息比颜色更重要。矢量格式能完美保留这些信息位图则会把所有几何关系拍扁成像素矩阵。另外位图文件的体积也非常难看。一张高分辨率版图截图的PNG动辄十几MB直接拖垮文档系统的编辑性能和数据库存储而同样内容的SVG往往只有几十KB到几百KB。所以问题不是“能不能忍住不用”而是“芯片制造的图纸必须用矢量”。2. 方案对比哪条路才能真正保住矢量2.1 纯前端拦截图片只能做样子救不了矢量很多人第一时间想到的是写一个TinyMCE插件拦截粘贴事件把粘贴出来的图片做“矢量化处理”。我最初也试过这条路线后来很快就放弃了。原因是浏览器剪贴板暴露给网页程序的图片数据只有image/png或者image/jpeg这种位图。你在paste_preprocess回调里看到的内容已经是位图数据了它没有保留任何CAD原始的坐标、线段、填充规则。所谓“位图转矢量”算法只能做到提取图像轮廓、拟合路径对芯片版图这种高密度、有大量小尺寸图形的内容来说结果基本没法用。线宽不对、轮廓粘连、圆弧失真转出来的SVG比原图还难认。纯前端方案可以做什么它适合做“友好提示”比如检测到粘贴内容是PNG位图且尺寸较大就弹个提示告诉工程师“当前图纸不是矢量格式请使用CAD导出SVG后粘贴”这能减少后续出问题的概率但解决不了已粘进去的图。2.2 服务器端EMF转换能转但绕不开“从哪里拿到EMF”那能不能把EMF转成SVG技术上完全可行。Inkscape、libreoffice、各种开源转换库都能把EMF高质量地转成SVG。于是有人设计出这样的架构浏览器粘贴PNG后把PNG上传到服务器服务器把PNG转成SVG再返回。这个思路有一个致命伤服务器拿到的是PNG不是EMF。PNG转SVG只是把位图嵌入SVG外壳并不是真正的矢量化。要想从CAD图纸得到真正的矢量SVG必须拿到原始的EMF或DWG/DXF数据。EMF从哪来它存在于Windows系统剪贴板里但浏览器JavaScript无法直接读取。服务器更不可能隔空抓取用户本机的剪贴板。所以服务器转换这条路得先有一个“本地助手程序”把EMF上传或转成SVG否则就是无米之炊。2.3 剪贴板代理加TinyMCE白名单我采用的路线综合对比之后我最后采用的方案是两段式在本地做一个“剪贴板代理工具”监控Windows剪贴板。当检测到CAD复制产生的EMF数据时立刻保存为临时文件调用Inkscape命令行把EMF转成SVG再把SVG以HTML格式写回剪贴板。在TinyMCE端通过配置扩展白名单、粘贴预处理逻辑让编辑器能够完整接受并显示剪贴板里的SVG元素。这个方案改造成本不算高Inkscape是免费工具Python脚本或者小工具开发也不复杂却能从根上保住矢量信息。工程师的使用习惯完全不变在CAD里CtrlC切到浏览器里CtrlV唯一变化的是中间多了一个“剪贴板翻译官”。3. 实操配置让TinyMCE完整接收和显示SVG3.1 初始化参数给SVG打开所有通路TinyMCE默认情况下不会保留SVG因为它的HTML Schema里没有为svg、path这些元素分配有效位置。你就算把SVG塞进粘贴内容也会被编辑器清理掉。解决办法有两个一是加extended_valid_elements明确允许SVG及其子元素二是加valid_children允许SVG出现在正文段落、单元格等位置。下面是我在一套TinyMCE 6.x环境里验证过的初始化配置tinymce.init({ selector: #techDocEditor, plugins: paste, paste_data_images: true, extended_valid_elements: [ svg[*], defs[*], g[*], path[*], line[*], rect[*], circle[*], ellipse[*], polygon[*], polyline[*], text[*], tspan[*], use[*], symbol[*], marker[*], mask[*], pattern[*], linearGradient[*], radialGradient[*], stop[*] ].join(,), valid_children: body[svg],div[svg],p[svg],figure[svg],td[svg],li[svg], content_style: img{max-width:100%;height:auto} svg{max-width:100%;height:auto}, });这里的[*]表示允许元素上的任意属性。对于内部使用的软件系统这个放开范围可以接受如果系统面向外部访问建议进一步收紧属性白名单防止SVG里嵌入脚本或外部引用。valid_children句法里的body[svg]意思是在body元素下允许出现svg子元素。不加这一句就算extended_valid_elements允许了SVG标签TinyMCE也可能把它挪到错误位置甚至丢弃。3.2 粘贴预处理从剪贴板HTML中提取并清洗SVG当剪贴板代理把SVG以text/html格式写回剪贴板后TinyMCE的paste插件会先读到这段HTML然后交给paste_preprocess回调处理。我们在这个回调里做两层工作第一确认内容里真的有SVG节点而不是只有普通图片第二清洗掉可能带来安全风险或被编辑器误判的属性比如onclick、javascript:、外部引用链接。我的处理函数长这样function cleanSvgContent(html) { const doc new DOMParser().parseFromString(html, text/html); const svgList doc.querySelectorAll(svg); if (svgList.length 0) { return html; } const allowedAttrs [ viewBox, width, height, x, y, xmlns, xmlns:xlink, version, id, fill, fill-opacity, fill-rule, stroke, stroke-width, stroke-linecap, stroke-linejoin, stroke-dasharray, stroke-opacity, d, points, x1, y1, x2, y2, cx, cy, r, rx, ry, transform, font-size, font-family, text-anchor ]; function cleanNode(node) { if (node.nodeType ! 1) return; const attrs Array.from(node.attributes); attrs.forEach(attr { const name attr.name.toLowerCase(); if (!allowedAttrs.includes(name)) { node.removeAttribute(name); } }); Array.from(node.childNodes).forEach(cleanNode); } svgList.forEach(function(svg) { cleanNode(svg); }); return doc.body.innerHTML; }然后在TinyMCE初始化里接入paste_preprocess: function(editor, args) { args.content cleanSvgContent(args.content); }这个函数的核心作用就是“白名单化”。SVG里面常见的fill、stroke、d、viewBox都会保留而那些测试时为了截图添加的style属性、可能携带脚本的onload等全部去掉。3.3 验证方法如何确认编辑器里存的是真矢量配置完成后一定要做一轮验证不能只看“粘进去不报错”就认为成功。我一般用三层验证第一层在TinyMCE里选择已粘贴的图纸点击“查看源码”或通过API读取编辑器内容确认HTML中包含svg标签而不是一个img标签。如果看到的是img说明剪贴板代理写的HTML没有被paste插件识别或者SVG被过滤掉了。第二层把编辑器的HTML内容存成独立文件在浏览器里打开并放大到500%。如果线条依然锐利说明确实是SVG矢量输出。这一步能直接区分离散像素和马赛克。第三层导出PDF或打印预览。对于工艺评审场景最终文档经常需要打印或转PDF。SVG在PDF里转成清晰的矢量曲线放大看标注文字也不会虚。还有一个细节粘贴后SVG默认没有边框。CAD图纸通常有图纸边界线如果转换过程中丢失会让读者觉得图不完整。建议在转换脚本里根据EMF的原始尺寸加一个外框矩形或者保留源图中的边框。4. 配合CAD端动作从源头让剪贴板带上SVG4.1 工程师的标准动作复制前先做一次“翻译”方案听起来复杂但落到工程师日常使用其实很简单。我建议在实际部署时给使用人员写一段三句话的操作说明在CAD中框选需要引用的图形执行复制或CtrlC确保本地“SVG剪贴板代理”正在运行通常开机自启任务栏有图标切到浏览器在TinyMCE文档正文处直接CtrlV。如果代理工具没有运行粘贴的就是位图。所以这个工具必须做成开机自启的托盘程序并且要有明显的状态提示。工程师不应该也不需要去理解EMF是什么他只需要知道“代理图标亮了粘贴就是高清图”。这样设计的原因很简单芯片工厂里的工艺工程师、设备工程师每天最关注的是产线数据而不是剪贴板格式。如果每粘一次图都要手动选菜单那这个方案一定被抵制。4.2 Windows端剪贴板代理小工具的实现思路如果你所在的公司IT条件允许我建议用Python加上一个小的GUI壳子实现一个托盘程序。核心逻辑就三个步骤检测EMF、转换SVG、回填剪贴板。检测EMF这一步用win32clipboard就能做到。核心代码大致如下import win32clipboard import time import subprocess import os def try_convert_emf_to_svg(): if not win32clipboard.IsClipboardFormatAvailable(win32clipboard.CF_ENHMETAFILE): return False win32clipboard.OpenClipboard() try: emf_data win32clipboard.GetClipboardData(win32clipboard.CF_ENHMETAFILE) finally: win32clipboard.CloseClipboard() if not emf_data: return False tmp_emf os.path.join(os.environ.get(TEMP, rC:\Temp), clipboard_clip.emf) tmp_svg os.path.join(os.environ.get(TEMP, rC:\Temp), clipboard_clip.svg) with open(tmp_emf, wb) as f: f.write(emf_data) subprocess.run([ rC:\Program Files\Inkscape\bin\inkscape.exe, --export-typesvg, --export-filename tmp_svg, tmp_emf ], checkTrue, capture_outputTrue, timeout30) with open(tmp_svg, r, encodingutf-8) as f: svg_text f.read() write_svg_to_clipboard(svg_text) return True这里有一个关键点write_svg_to_clipboard不能简单用普通文本格式写因为TinyMCE需要text/html格式才能正确识别HTML结构。Windows剪贴板的HTML格式需要特定的RFC封装头包含StartHTML、EndHTML等偏移标记。为了省事也可以把剪贴板格式写为text/html加完整的svg包装但不同浏览器的兼容性需要用实际环境验证。我实际项目中用的封装会更完整把SVG嵌入一个最小HTML文档里同时再写一份纯文本内容作为兜底。写完后代理程序还要做一次简单“防抖”记住刚才已经转换过同一份EMF数据的哈希值避免CAD里同一个对象反复复制时不断重复转换。4.3 Linux/EDA环境的替代做法芯片行业还有大量EDA工具跑在Linux工作站上比如版图设计、物理验证等场景。Linux的剪贴板体系和Windows不同剪贴板数据可以通过xclip等工具显式设置。如果TinyMCE运行在同一台机器的浏览器里可以用text/html格式把SVG写进去xclip -selection clipboard -t text/html -o clip_content.html这样在TinyMCE里CtrlV就能拿到带SVG的HTML内容。但Linux下的浏览器对text/html剪贴板格式支持不如Windows完整尤其在远程桌面、虚拟桌面场景里经常会失效。所以在Linux环境我更推荐“曲线救国”从EDA工具里直接导出SVG文件然后在TinyMCE里粘贴文件内容。具体做法是这样的用KLayout或者其他工具打开版图导出SVG然后在TinyMCE里选“插入代码”或直接在编辑器中粘贴SVG文本内容。粘贴预处理函数识别到svg开头的文本后会自动把它转成HTML节点。这个流程虽然多一步“打开SVG文件”的操作但胜在跨平台稳定。对于VIDIA、Calibre这类工具本身就不是为了复制粘贴设计的强求剪贴板链路不如接受文件导入的现实。5. 踩坑实录常见问题与排查速查5.1 问题与解法速查表我在多个项目里反复排查过下面这些问题整理成一张表可以直接对照现象可能原因解决办法粘贴后还是一张位图img剪贴板代理没有把SVG写入text/html检查代理托盘状态确认EMF检测日志手动测试写剪贴板粘进去后SVG被清除缺少valid_children配置确认初始化参数里加了body[svg],p[svg]等SVG显示了但线条粗细不对EMF转换时采用了默认缩放比例在Inkscape命令或SVG里调整viewBox与width/height的对应关系中文标注变成方块系统字体在SVG里没有正确携带转换时保留文本字体或者让SVG依赖目标浏览器系统的中文字体粘贴的SVG带有多余脚本或被拦截清洗函数没生效检查paste_preprocess是否确实执行调试打印args.content同一个图反复转换弹窗多剪贴板代理缺少防抖对EMF二进制内容取Hash相同则不重复转换远程桌面里粘贴SVG失败远程剪贴板只同步了PNG层降低对远程桌面粘贴的预期改用文件导入或共享剪贴板工具最容易被忽略的一点是浏览器必须在打开TinyMCE页面之后最新一次获取剪贴板数据时才能读到text/html。有些环境里浏览器为了安全会过滤掉非用户主动复制产生的剪贴板内容。如果你发现代理明明写了SVG但粘贴时TinyMCE还是拿到PNG不妨先在其他编辑器比如记事本或网页内容可编辑区域里试验一下排查是浏览器限制还是TinyMCE过滤。5.2 两个容易忽视的细节第一个细节SVG本身的高度和宽度属性。TinyMCE粘贴SVG后如果SVG没有设置width和height浏览器默认会渲染成300x150的标准尺寸。CAD图纸往往比例很大所以要在转换脚本里根据EMF原始尺寸带上合适的width、height和viewBox。我在项目中统一保留了Inkscape默认输出的宽高属性这样粘贴出来的图纸比例和CAD里基本一致。第二个细节粘贴预处理回调里一定要先于paste_data_images执行。因为我们希望把剪贴板里的text/html内容处理成SVG而不是让TinyMCE优先把image/png转成base64图片。所以初始化时最好不要同时开启paste_image_dimensions之类的选项免得编辑器对图片做额外重写。如果系统里其他粘贴图片需求确实存在可以针对SVG内容做分支检测到剪贴板HTML里包含svg就直接返回清洗后的内容否则走默认图片粘贴流程。另外如果文档系统后续要把内容导出成Word或者PDFSVG的兼容性也要提前验证。有的导出方案只会把SVG当成一张普通图片有的导出中间层不支持SVG元素。建议在导出组件里把SVG统一替换成高清位图同时保留原始SVG在数据库里的独立字段。这样展示用矢量导出用位图两边都不吃亏。我个人在实际项目里的体会是这类问题的核心往往不是技术难度而是链路认知。浏览器这端无论怎么写回调都无法把已经变成像素的PNG变回矢量。真正的解法是在粘贴之前就把剪贴板里的数据“翻译”成SVG。把这条链路想明白再配置好TinyMCE的白名单和清洗逻辑问题就能一气呵成地解决。后面如果再遇到图纸粘贴相关的新需求我大概率也会沿用这个思路先保证源头数据是矢量再谈编辑器端的展示。

相关新闻

Teams for Linux 开发贡献指南:从环境搭建、代码规范到配置项合入的完整实战

Teams for Linux 开发贡献指南:从环境搭建、代码规范到配置项合入的完整实战

桌面应用即时通讯 【免费下载链接】teams-for-linux Unofficial Microsoft Teams for Linux client 项目地址: https://gitcode.com/gh_mirrors/te/teams-for-linux 点击查看 免费下载 本篇指南面向想要参与 teams-for-linux(非官方的 Microsoft Teams …

2026/10/14 15:53:58 阅读更多 →
iPSC构建3D肠道类器官的关键技术与优化方案

iPSC构建3D肠道类器官的关键技术与优化方案

1. 项目概述:iPSC与3D肠道类器官技术前沿肠道类器官培养是近年来组织工程领域的突破性进展。2013年,日本科学家首次实现从诱导多能干细胞(iPSC)构建功能性肠道组织,这项技术为疾病建模、药物筛选和再生医学开辟了新途径…

2026/10/14 15:53:58 阅读更多 →
Java开发者AI编程协作实战指南:结构化提问与避坑技巧

Java开发者AI编程协作实战指南:结构化提问与避坑技巧

1. 为什么 Java 开发者需要一份“能落地”的 AI 协作指南过去一年,我身边不少写 Java 的朋友都经历过这样一个阶段:一开始觉得 AI 写代码就是个玩具,生成的代码不是编译不过就是逻辑跑偏;后来慢慢发现,身边有人用同样的…

2026/10/14 15:53:58 阅读更多 →

最新新闻

TreeTycoon开发实战:从数据模型到经济平衡的完整指南

TreeTycoon开发实战:从数据模型到经济平衡的完整指南

简介:TreeTycoon 是一套基于 C17 与 SFML 开发的 2D 模拟经营游戏源码项目,面向具备一定 C 基础、希望研究游戏引擎架构与经营类玩法实现的开发者。项目围绕树木种植与经营主题,采用自定义游戏框架,涵盖场景栈管理、资源加载、音频…

2026/10/14 17:18:41 阅读更多 →
考研复试数据结构全攻略:机试面试高频考点与实战思路

考研复试数据结构全攻略:机试面试高频考点与实战思路

先说结论:考研复试里的数据结构,和初试完全是两码事。初试你可以在试卷上慢慢推演,复试要么是机试限时AC,要么是面试官盯着你手写代码、追问复杂度,你脑子里那点“背下来的知识点”根本不够用。这篇文章就是一次梳理&a…

2026/10/14 17:18:41 阅读更多 →
半导体金相显微镜核心技术与应用解析

半导体金相显微镜核心技术与应用解析

1. 金相显微镜在半导体行业的独特价值第一次接触半导体材料分析时,我被车间工程师的一句话点醒:"看得到缺陷才能解决缺陷"。金相显微镜正是半导体制造的"工业CT",它能将抽象的晶格缺陷、掺杂分布转化为可视化的微观图像。…

2026/10/14 17:18:41 阅读更多 →
Windows 安装 OpenClaw 常见问题,路径、杀毒、Gateway 离线排查

Windows 安装 OpenClaw 常见问题,路径、杀毒、Gateway 离线排查

Windows 一键部署 OpenClaw 教程|5 分钟搭建本地 AI 智能体,告别复杂环境配置 前言 2026 年开源圈爆火的「数字员工」OpenClaw(昵称小龙虾),GitHub 星标狂揽 28 万 。它区别于普通对话型 AI,是一套可以直…

2026/10/14 17:18:41 阅读更多 →
全栈记账系统开发实战:React+NestJS+PostgreSQL技术解析

全栈记账系统开发实战:React+NestJS+PostgreSQL技术解析

1. 项目背景与核心价值记账这件事,我从大学时代就开始折腾了。最早用Excel手工记录,后来试过各种记账App,但总感觉差点意思——要么功能太简单,要么数据不透明,要么就是突然收费。去年终于下定决心,自己开发…

2026/10/14 17:18:41 阅读更多 →
NSGA-II多目标优化MATLAB实现:从核心机制到避坑指南

NSGA-II多目标优化MATLAB实现:从核心机制到避坑指南

简介:这份资源是NSGA-II多目标优化算法的MATLAB实现代码,面向正在学习或研究多目标进化算法的本科生、研究生及科研人员,帮助读者理解非支配排序、拥挤距离、精英策略与基因操作等核心机制,并可直接用于测试函数实验。压缩包共27个…

2026/10/14 17:17:41 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →