ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

组网图PPT素材库拆解:PDF矢量提取、绘图参数与母版固化

组网图PPT素材库拆解:PDF矢量提取、绘图参数与母版固化

简介:这份华为内部培训PPT素材库以PDF形式整理,面向网络工程师、售前售后方案人员及培训讲师,用于快速绘制专业组网图、产品架构图与业务说明页,兼顾方案演示和培训课件制作。素材覆盖数据库与立体部件组合、C&C08、iNET、MA 5100 OLT等产品示意图标,以及路由器、信令网关、ATM交换机、VOIP网关、LAN交换机等设备符号;同时提供拓扑管理、Internet/PSTN、光纤、其他厂商交换机、衬底、云朵、终端电脑、人物和卡通业务图标,并说明反白字、阴影、色块替代与实物图禁用等制图约定。这些元素颜色和形状已预先搭配,可结合使用场景调整。压缩包共1个PDF文件,大小约2.38MB,便于随查随用。已有140人学习,可帮助读者统一图形语言、准确标注产品和设备,提升架构图与业务介绍页的表达效率,也减少从零绘制图标和版式元素的时间。

1. 一份厂商内部作图素材库,省下的主要是返工时间

画一张跨城域网的组网图,真正花时间的往往不是逻辑设计,而是找一个能看的 OLT 图标、把二十多个设备的描边调成同一档、再把它们对齐到同一根基线上。这份培训专题的 PPT 素材库就是为这件事准备的文档资料:它把数据库、立体部件化组合、产品示意图标、衬底、云朵、终端与人物元素等作图元素预先标准化,并且明确规定了什么设备用符号、什么设备用色块加名称、什么元素根本不允许放进组网图。经常需要出方案拓扑、交付验收图和汇报材料的售前、运维、实施岗,拿到它等于拿到一套现成的视觉约定。

它的价值不在“图标好看”,而在“边界清楚”。比如组网图禁止使用产品实物图,只能用示意图标;产品符号表达不了时降级为色块加名称;人物元素禁止大幅面使用。这些规则看着琐碎,实际是评审场合里最容易被挑刺的地方。下面按“素材库里有什么、怎么从 PDF 里拆出来、画的时候参数怎么定、哪里会翻车”走一遍。

2. 五类作图元素:谁该出现在组网图里,谁不该

素材库按用途分成五类,理解分类比记住图标长什么样更重要。分类背后是一套视觉层级:设备层负责表达“是什么”,部件层负责表达“怎么分层”,衬底层负责表达“重点在哪”,终端和人物层只负责点缀。层级一旦混用,图就会显得脏,而且信息密度会崩塌。

元素类别库里提供的内容典型用法明确不适用
产品示意图标OLT、ONU、多业务交换机(ATM/IP/MPLS)、ATM 交换机、LAN 交换机、信令网关、缓存服务器、VOIP 网关、IAD、MSTP 设备、网守、呼叫服务器、NAS、策略管理服务器组网图、方案拓扑、交付图封面大图、产品宣传页
立体部件化组合数据库、服务器、仓储、分层业务块分层架构图、数据流图、市场份额归类的文字块精确到单台设备的连线图
衬底元素深色底板、浅色底板、云朵突出说明文字、表达网络边界大面积铺满整页
终端类图标多种配色的电脑与显示器组网图端点、接入侧示意需要真实界面截图时
人物与卡通小人图标、充值等业务卡通业务流程小图标点缀封面、封底、扉页等大幅面

2.1 产品示意图标:组网图为什么不能放实物图

素材库明确写了组网图不能用产品实物图。这不是审美洁癖,是四个很实际的原因。第一是比例失真:一台 OLT 的实物图和一台 ONU 的实物图放在同一张图里,尺寸关系毫无意义,读者会下意识按图片大小理解设备重要性。第二是灰度丢失:方案文档经常黑白打印,实物图的明暗细节在灰度下糊成一团,符号化的线框反而清楚。第三是跨厂商不一致:一张图里混进第三方设备,实物照片的风格根本对不上,符号化才能统一。第四是注意力偏移:评审会上有人会盯着机箱面板问型号,而不是看你画的链路。

所以规则是两级降级:能用库里的符号就用符号,符号覆盖不到的用色块示意并标上名称。色块不是随便画个矩形,常见做法是固定长宽比、固定圆角、文字反白居中,这样一排色块摆在一起才不会参差。

场景处理方式关键约束
库内有对应符号直接使用示意图标保持原始比例,不拉伸
库内无对应符号色块 + 名称色块尺寸与相邻图标同高,文字不小于 8pt
第三方厂商设备专用第三方图标或中性色块不套用自有产品配色,避免误认
多种设备同框统一描边宽度与圆角半径同一张图只允许一种描边档位

提示:色块方案最容易被忽略的一点是“名称放哪”。名称写在色块内部时字号会被迫变小,写在下方又会和连线打架,稳妥做法是色块内放缩写、色块下方放全称,两者字号差两档。

2.2 部件化元素与衬底:把视觉权重压在正确的层级上

立体部件化组合是给分层图用的。数据库、服务器、仓储这些立体块,本质上是把“一层能力”压缩成一个可识别的形状,让人一眼看出这是接入层、汇聚层还是业务层。用的时候要注意它和产品图标的区别:产品图标表达具体设备,部件块表达能力集合,两者不能混在同一水平线上。我一般会把部件块放在图的上半部分或侧面作为图例带,设备图留在主区域,中间用一条细分割线隔开。

衬底是用来托文字的。素材库里给了深浅两套底板,深底色上放文字时反白,非突出的说明文字不用衬底。这条规则的潜台词是:衬底越少越好。一张图里如果每个说明都套一个底板,读者根本分不清哪个是重点。实践里我通常控制在整页不超过三处衬底,且只给三类信息加:结论性数字、跨区域说明、需要单独强调的约束条件。

云朵是衬底的一个特例,专门表达“网络”这个抽象概念,比如 Internet、外部网络、第三方网络。它的坑在于形状和色彩:云朵画得太扁会像对话框,画得太圆会抢走设备图标的注意力。稳妥做法是保持云朵的轮廓线宽与链路一致,填充用浅灰或浅蓝,透明度压到 20% 以下,让它退到背景层。

2.3 终端、人物与卡通元素:尺寸红线在哪

终端类图标是组网图里唯一允许“换脸”的元素——显示器里的界面可以替换成自己想要的内容,用来表达具体业务界面。这条用法在演示“用户侧看到什么”时特别好使,但要注意替换后的界面截图必须和外框比例一致,否则一眼假。

人物元素和业务卡通的使用限制写得最死:只能作为组网图里的小图标,用来辅助说明技术或业务功能,禁止大幅面使用,封面、封底、扉页都不行。这条限制的原因很直白——人物图是插画风格,一旦放大就变成海报风,和整份材料的工程调性冲突。我自己的经验阈值是:人物图标高度不超过页面高度的 8%,终端图标宽度不超过所在栏宽度的六分之一,超过这个量级就该考虑换成部件块或者直接删掉。

卡通类(充值这类业务图标)适合放在介绍业务流的轻量页面,增加一点可读性。但它和人物图一样,属于“调味料”,一张图里出现两个以上就会显得不专业。判断标准很简单:把图缩小到 A4 打印尺寸,如果这些小图标已经看不清细节只剩下色块,说明放多了或者放大了。

3. 从 PDF 拆出矢量元素:pdfimages 与 pdftocairo 的实操路径

素材库给的是 PDF,直接用有两个麻烦:一是整页看还行,想单独拿一个 OLT 图标出来很费劲;二是 PDF 里的元素尺寸按页面排版,不一定适配你的图示比例。所以第一步是判断这一页到底是矢量还是位图,第二步才是导出和拆组。

3.1 先分清矢量页和位图页

PDF 里可能混着两种东西:真正的矢量路径,和贴进去的位图。判断错了后面全白干——位图页怎么导都不会变清晰。命令行看一眼最直接。

# 列出 PDF 里所有图像对象:type 列如果是 image 且色彩空间为 DeviceRGB, # 说明这页含位图;某页完全不出现在结果里,说明这页是矢量绘制 pdfimages -list 素材库.pdf | head -40

逻辑说明:pdfimages -list输出的是图像对象清单,包含页码、类型、宽高、色彩空间和每像素位数。如果前几页一条记录都没有,而页面上明显有设备图标,基本可以确认这些图标是矢量路径,可以无损放大。参数上不需要额外开关,-list本身只读不写,安全。

如果想把判断做细一点,用 PyMuPDF 统计每页的矢量路径条数,顺便把主色板也摸出来,后面统一配色时能直接用。

import fitz # PyMuPDF from collections import Counter doc = fitz.open("素材库.pdf") for pno in range(min(6, doc.page_count)): page = doc[pno] drawings = page.get_drawings() # 矢量路径集合 images = page.get_images(full=True) # 位图对象 print(f"第 {pno + 1} 页:矢量路径 {len(drawings)} 条,位图 {len(images)} 张") # 统计填充色,快速看出这一页的主色板 fills = Counter() for d in drawings: fill = d.get("fill") if fill is not None: fills[tuple(round(c, 3) for c in fill)] += 1 print(" 填充色 TOP3:", fills.most_common(3))

逻辑说明:get_drawings()返回的是页面上的路径对象列表,每条记录带fill、color、width等属性,正好能拿来统计色板和线宽。参数上full=True是为了拿到完整图像信息(含 xref),只做计数时可以传 False 省一点内存。跑完这一段,你对整份素材的主色是偏蓝还是偏灰、线宽集中在 1pt 还是 2pt,心里就有数了。

3.2 按页导出 SVG,再按对象拆组

确认是矢量之后,导出方式决定后面好不好用。pdftocairo -svg会把整页转成一个 SVG,所有路径和文本都在里面,缺点是整页一个文件,还得手动拆。

# 单页转 SVG,保留矢量路径 pdftocairo -svg -f 12 -l 12 素材库.pdf ./svg/page12.svg # 批量:把 1 到 40 页每页导一个 SVG mkdir -p ./svg for p in $(seq 1 40); do pdftocairo -svg -f "$p" -l "$p" 素材库.pdf "./svg/page${p}.svg" done # 同时把位图页按页号导成 PNG,便于对照 pdfimages -f 1 -l 40 -png 素材库.pdf ./raw/img

逻辑说明:-f和-l是起止页,必须成对给,只给-f会从该页一直导到末页。-svg输出的是单页矢量文件,一个文件对应一页。pdfimages的输出文件名会自动带页码前缀,所以批量导的时候先建好目录,避免几百个文件堆在根目录。参数上-png是有损压缩最少的选择,如果原图是 JPEG,改成-j反而能保持原样不二次压缩。

注意:pdftocairo -svg导出的 SVG 里,文字有可能已经变成路径(取决于原 PDF 是否嵌入字体),这意味着进编辑器后不能再改字。需要保留可编辑文本时,改用pdftocairo -pdf先拆页再做后续处理。

3.3 在编辑器里拆组并统一色板

整页 SVG 打开后通常是一个大组,图标之间还带着排版用的辅助线。拆组的动作是重复劳动,但有个省事的做法:先用命令行把 SVG 转成普通 SVG(去掉编辑器私有命名空间),再用图形界面的编辑器做取消成组。

# 转成标准 SVG,去掉可能存在的私有标签,减小文件体积 inkscape ./svg/page12.svg --export-plain-svg --export-filename=./svg/page12_plain.svg # 批量导出指定宽度的高清 PNG,用于贴进不接受矢量的场合 inkscape ./svg/page12_plain.svg --export-type=png --export-width=1600 \ --export-filename=./png/page12.png

逻辑说明:--export-plain-svg只保留标准 SVG 元素,很多导出工具塞进去的元数据会被清掉,后面导入 Office 时兼容性更好。--export-width按像素宽度导出,比按 DPI 算更直观——1600px 对应 A4 宽度约 190dpi,投屏和打印都够。

拆组之后有一件事必须做:把颜色改成你自己文档的主题色,而不是原素材的配色。原素材的配色是按它自己的模板调的,直接搬进你的文档会跟母版打架。我一般会把整页 SVG 里出现频次最高的三到五个填充色替换成主题色,描边统一到深灰,这样一批图标拆出来风格才一致。

3.4 导入 PowerPoint 的三种格式取舍

拆出来的图标最终要进 PPT,格式选错会反复返工。三种常见格式的差别很实际:

格式缩放表现可编辑性体积适用场景
SVG无损可改填充和描边,文字可能转曲小母版图标、需要改色
EMF无损可取消组合后编辑中需要拆成形状再微调
PNG放大会糊不可编辑大快速贴图、不需要改色

结论是能走 SVG 就走 SVG。Office 对 SVG 的支持已经足够稳,右键可以“转换为形状”,转完就能像普通形状一样改填充。唯一要留意的是 SVG 里的文字如果已经转曲,转换后是路径而不是文本框,改字得重打。EMF 适合需要把图标拆成多个独立形状再单独挪动的场景,PNG 只在对方要求位图或者导入后尺寸明显不对时当兜底。

4. 组网图的绘制参数:线型、色板、栅格与标注的落地值

素材库给的是元素,不给参数。参数得自己定一套,定完写进模板,团队里所有人照抄。下面这套是我在多个交付文档里磨出来的,可以直接拿去用,也可以按你们的模板微调。

4.1 线型与颜色:一张表定死

组网图最容易乱的地方是线。同一张图里出现四种线宽、三种虚线密度,读者的第一反应是“这图没画完”。定死一张语义映射表,后面只允许在这张表里选。

语义线型线宽(pt)颜色说明
主干链路实线2.25深灰核心到汇聚的主通道
备份/冗余虚线 6-31.5深灰 60%双上行、保护路径
信令/管理流点划线1.5中蓝控制面、网管通道
业务数据流带箭头实线1.5橙单向业务流向
外部网络接入细虚线1.0中灰跨域、第三方接入

两条使用纪律:同一语义在全篇所有图里保持同一线型和颜色;箭头只加在业务流上,物理链路不加箭头。物理链路加箭头是常见误用,它会让读者误以为有方向性,实际链路是双向的。

颜色数量控制在五档以内。超过五档,黑白打印后灰度区分度就不够了,两张不同颜色的线会变成同一档灰。判断方法是把图转成灰度看一眼,如果两条不同语义的线在灰度下分不开,说明色彩方案不合格。

4.2 图标尺寸与对齐栅格

图标尺寸不统一是组网图显脏的头号原因。解决办法是先定栅格,再定尺寸。我一般用 8pt 栅格,所有图标宽度取 8 的整数倍,比如 48pt、64pt、80pt 三档。三档对应三种角色:核心设备、汇聚设备、接入与终端。

角色图标宽度与文字间距说明
核心设备80pt6pt一张图里不超过 4 个
汇聚/边缘设备64pt6pt主体部分
接入设备与终端48pt4pt密集排列时用
色块替代品与同排图标等高6pt文字反白居中

对齐上有个省事技巧:先把所有设备图标摆好,全选后统一“横向分布”,再用连接符而不是直线画链路。连接符会吸附到形状的连接点,后面挪动图标时线会自动跟随,省掉大量重连的工作。直线画链路是返工率最高的做法,改一次位置就得重画一遍。

文字标注统一放在图标正下方,居中对齐,字号 8pt,不加粗。设备全称太长时可以折两行,但不要为了塞进一行把字号缩到 7pt 以下,打印出来就是一团灰。

4.3 云朵、光纤与衬底的使用边界

云朵只表达“网络”这个抽象概念,不表达具体设备。它出现的位置通常是图的边缘,表示本图范围之外的部分。云朵的边界线要和链路同色系但更浅,填充透明度压到 20% 以下,否则会盖住底下的连线。

光纤符号用来区分传输介质。它只在需要强调“这段是光传输”时使用,比如接入段和城域段的分界。全图每段线都标光纤符号毫无意义,反而增加视觉噪音。

衬底的使用边界前面提过,这里补一条实操参数:深色衬底的填充明度控制在 25% 到 35% 之间,文字用纯白;浅色衬底明度 90% 左右,文字用深灰。明度过低会导致投屏时反白字发飘,明度过高则衬底和背景分不开,等于没加。

5. 避坑:素材库落地时最容易翻车的五个现场

5.1 导出的 SVG 一进 PPT,字体全变了

现象:在编辑器里看图标下方的设备名是正常字体,导入 PPT 后变成另一种字形,字宽也变了,原本居中的文字偏到了一边。

原因:SVG 只记录字体名称,不嵌入字体文件。PPT 打开时用的是本机字体,如果同名不同厂或者根本没装,就会回退到默认字体。同步出现的字宽变化会让原本居中的文本失位。

解决:涉及文字的图标不要走 SVG 这条路。两种处理:一是导入后右键“转换为形状”,文字变成路径,字形锁定;二是在导出前就把文字转成轮廓,或者在 PPT 里重新打字并统一样式。我一般选第二种,因为设备名经常要改。

5.2 从 PDF 复制的图标带一块白底

现象:把图标从 PDF 里复制粘贴到 PPT,图标周围多了一个白色方块,放在浅灰背景上特别明显。

原因:PDF 里的图标绘制在白色页面上,复制时把页面的白色填充一起带过来了,或者导出 PNG 时背景没有设为透明。

解决:走 SVG 或 EMF 路线就不会有这个问题,因为矢量格式没有背景像素。如果只能用位图,导出时加透明背景参数,或者在 PPT 里用“设置透明色”点掉白色。但设置透明色对渐变色边缘处理很差,图标边缘会出现锯齿,所以能重导就重导。

5.3 深色衬底上的反白字,打印出来发灰

现象:屏幕上看着挺清楚,黑白激光打印后反白字糊成一团,读者得凑近才能看清。

原因:反白字依赖衬底与字的明度反差,激光打印在深色大面积填充时碳粉覆盖不均匀,细笔画容易被吃掉。

解决:反白字只用在短标签上,字号不低于 12pt,不加粗反而更清楚。长段说明文字宁可换回浅底深字。另外深色衬底面积不要超过页面的三分之一,超过之后打印质量会明显下降。

5.4 同一张图里混了两套图标风格

现象:图里有的是线框风格,有的是立体风格,有的是彩色实物感图标,整体看起来像从不同文档里拼出来的。

原因:素材库本身包含多套风格(产品符号、立体部件块、卡通业务图标),没有约定使用范围,谁拿到就用。

解决:定死一条规则——组网图主区域只用线框风格的产品符号和中性色块,立体部件块只出现在分层示意区,卡通图标不进组网图。这条规则写进模板的第一页说明里,比事后统一风格省事得多。

5.5 整图缩放后线宽不成比例

现象:把一张画好的组网图从整页缩到半页塞进文档,线变得特别细,缩略图状态下几乎看不见。

原因:线宽是绝对值(pt),图形整体缩放时线宽不跟着按比例走,或者跟着走了但基准值本来就偏细。

解决:定线宽时按最小呈现尺寸来定,不按最大尺寸。判断方法是把图缩到实际插入文档后的宽度,看最细的线是否还看得见,看不见就把基准线宽往上提一档。另一个办法是缩放后单独选中所有连线,统一改一次线宽,但这属于补救,不如一开始就按小尺寸定。

6. 变成团队资产:母版固化与批量体检

素材拆完、参数定完,剩下的是让别人也能用对。这一步不做,三个月后团队里又会出现五种线宽和三种图标风格。

母版固化是第一步。把定好的色板写进主题色,把常用图标放进幻灯片母版的版式里,把线型语义表做成一张示例页放在文件末尾。母版里的图标改一次,所有引用它的页面同步更新,这是唯一能对抗风格漂移的机制。顺带把字号也固化:页标题 20pt、一级标题 16pt、图注 10.5pt、设备名 8pt,四档够用。

第二步是做一次批量体检。人工翻几十页 PPT 找越界图形和不统一字号,效率太低,用 python-pptx 跑一遍十分钟能出报告。

from collections import Counter from pptx import Presentation prs = Presentation("组网图_待检.pptx") page_w, page_h = prs.slide_width, prs.slide_height # 单位 EMU font_sizes = Counter() issues = [] for idx, slide in enumerate(prs.slides, start=1): for shape in slide.shapes: # 1) 统计字号:读到 None 说明该文本继承了母版,需人工确认是否合规 if shape.has_text_frame: for para in shape.text_frame.paragraphs: for run in para.runs: size = run.font.size font_sizes[size.pt if size else "继承母版"] += 1 # 2) 越界检查:图形右边缘或下边缘超出页面 left, top = shape.left, shape.top if left is None or top is None: continue if left + (shape.width or 0) > page_w or top + (shape.height or 0) > page_h: issues.append((idx, shape.name, "超出页面边界")) # 3) 图标占比检查:单个图形高度超过页面 8% 视为过大 if shape.height and shape.height > page_h * 0.08: issues.append((idx, shape.name, f"高度占比 {shape.height / page_h:.0%}")) print("字号分布:", font_sizes.most_common()) for item in issues: print("第 {} 页 | {} | {}".format(*item))

逻辑说明:整段脚本只读不写,跑完输出两份信息。字号分布用来发现混入的杂字号——如果出现 9.5pt、13pt 这类不在四档里的值,基本可以判定是手改留下的。越界检查针对的是缩放或挪动后跑出页面的图形,这类问题在缩略图视图里根本看不出来。占比检查对应前面提到的人物和终端图标红线,阈值 8% 是按页面高度算的,改阈值就改0.08这个系数。

参数上注意shape.left对某些占位符可能返回 None,所以先判空再算。shape.height的单位是 EMU,和prs.slide_height同一单位,直接相除就能得比例,不需要换算成厘米。

跑完报告,把越界和超占比的图形按页号挨个修一遍,比肉眼翻页快得多。这套脚本我一般放在模板文件的同级目录,每次交付前跑一次,报告干净了才发出去。

说个自己被坑过的经历。早些年做一份跨区域组网方案,图标是从素材库里一个个复制粘贴的,画了十几页,自我感觉挺整齐。结果打印稿出来,十几页里有四页的图标风格和别的不一样——那四页是用素材库另一套立体风格拼的,屏幕上因为颜色相近没看出来,黑白稿上反差极明显。返工重画花了整整一天。从那以后我每次动手前都强制走一遍流程:先定色板和线型表,再把图标统一导成 SVG 放进母版,最后用脚本体检一遍才交付。流程看着繁琐,实际每次省下的返工时间远多于投入。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进