“这张图纸的字体是不是没嵌入”评审老师一句话把我问住了。那次硬件评审我直接用Cadence Orcad 16.6自带的File→Export→PDF功能导出的原理图投上大屏整体看并无不妥一放大到网络标号区域文字就发虚线条边缘也有点毛。会后我仔细排查了一遍PDF生成链路才发现问题不在Orcad画图本身而在导出环节对字体和矢量数据的处理太不可控。后来我换成“把原理图通过PostScript打印机打印成.ps文件再用Ghostscript引擎转换成真正的矢量PDF”这套流程才把字体嵌入、书签、裁剪、批量导出这些事彻底拿捏住。这篇文章把这套方案从环境搭建到参数配置完整拆开来讲包括PostScript驱动怎么选、Orcad打印参数怎么设、Ghostscript命令行怎么调以及Title Block属性、PDF元数据、文件权限这些“属性管理”层面的操作怎么统一处理。适合正在用Cadence Capture CIS做原理图导出PDF的硬件工程师也适合要批量交付归档图纸、又不想每次手动折腾的PCB设计人员。1. 先说结论为什么Orcad原生PDF导出和用Ghostscript转一道效果差这么多1.1 原生导出PDF的三个硬伤先说说Orcad自带的PDF导出。16.6及更早的版本里File菜单下的Export PDF看似方便但实际底层走的是老式打印接口字体处理相当粗放。我遇到的最典型问题有三个字体不嵌入或只嵌了部分换一台没装对应字库的电脑打开中文直接变方框英文字母被替换成Courier甚至等线体行距全部乱掉然后是打印范围与图纸边框对不齐导出后一侧留白巨大、一侧内容被硬生生裁掉设了边框也救不回来还有一个就是整页PDF不带文档属性没有标题、作者、书签归档时只能在文件管理器里靠文件名猜版本多个设计交付时非常混乱。这三个问题不是偶发而是这类“直接导出”方式的天生缺陷。因为原生导出功能在设计时优先保证的是“能出图”而不是“出好图”。它没有真正处理字体子集化也不提供批处理接口更不用说在PDF里挂书签或设置权限了。对于项目评审、工厂打样、客户交付这种正式场合靠它出图等于是在赌对方的PDF阅读器恰好装了你的字体。1.2 PS转PDF这条链路到底妙在哪把Orcad的打印结果先输出成PostScript文件再用Ghostscript转换本质上是以PDF写入器的方式重新生成一份PDF。这个过程的好处非常直接PostScript文件完整保留了矢量几何信息所有线段、圆弧、字体轮廓在转换时都按矢量对象写入没有二次采样所以放大多少倍都不会糊。字体嵌入策略完全由Ghostscript参数控制交付之前就能确认每个字体都被嵌入换电脑打开不会乱。更关键的是Ghostscript支持pdfmark可以在转换时顺手注入书签、文档属性和初始视图这些元数据这是Orcad原生导出根本做不到的。我自己用过一段时间之后的理解是Orcad负责“把图画对”Ghostscript负责“把图出好”。两者各管一段比让Orcad一个工具包打天下要稳得多。尤其当一份原理图有几十页、需要批量导PDF时命令行脚本的优势会彻底体现出来——双击一次全部搞定。1.3 什么情况下值得用这个方案如果你只是临时看两眼图纸确实没必要折腾直接Print to PDF就行。但满足以下任一条件这条链路就非常划算公司还在用16.x或更老版本的Cadence自带导出PDF效果不稳定需要批量把几十上百张原理图一次性导出成带书签的PDF需要向工厂、客户或外部评审提交不可篡改、权限可控的PDF要求PDF在任意电脑上打开字体都不乱、排版不走样希望PDF文件名、文档属性、页面书签都符合团队归档规范。满足这些情况前期花半小时把驱动、参数、脚本配好后面就是一条命令的事情。2. 导出链路搭建驱动选型与Orcad打印设置2.1 先装一台“只输出文件”的PostScript打印机这里说的不是真打印机而是一个PostScript虚拟打印机驱动。它的用途是让Orcad把绘图指令发给它时不是真的往纸筒里进纸而是输出一个.ps或.prn文件。Windows下我建议优先用系统自带的“Microsoft PS Class Driver”添加路径是控制面板→设备和打印机→添加打印机→“我需要的打印机不在列表中”→选择“通过手动设置添加本地打印机或网络打印机”→端口选择FILE→厂商选Microsoft→型号选Microsoft PS Class Driver。如果你机器上厂商列表里找不到Microsoft PS Class Driver也可以选Generic分类下的PostScript Printer或者HP的Universal Print PS驱动原理完全一样。装好之后可以右键打印一个测试页如果弹窗让你输入文件名说明驱动已经成功接上了FILE端口。注意这个端口必须选FILE否则驱动会试图通过某个实体端口发送作业导致打印假死。2.2 Orcad Print Setup与打印对话框的细节驱动装完先别急着打印把Orcad的打印参数统一。File→Print Setup里选择刚装的PS打印机点Properties确认纸张大小。原理图页面是A4就选A4是A3就选A3。如果是自定义页面尺寸就必须在打印机首选项里新建一个同尺寸的自定义纸张否则驱动会按默认纸型缩印或裁边这是很多人导出PDF比例不对的根源。进入Print对话框后我一般固定三个设置Print Area选All sheets保证整份图纸一次出完Scale设100%不要勾Fit to page除非你故意要缩小放置Print to file勾选输入文件名时用.ps后缀方便后续识别文件类型。确认后生成的就是一个包含整份原理图矢量数据的PostScript文件。2.3 自定义纸张与边框设置如果你用的是企业内部统一的非标准原理图尺寸比如880×620mil这类页面最稳妥的办法是在打印机属性中新增一个同名自定义纸张并在Orcad里把打印纸设为同一尺寸。这样生成PDF的页面大小和原理图完全一致发送方和接收方看到的版面完全一致不会出现“预览正常发给客户后内容跑到第二页”这种低级事故。还有一种情况是图纸边框线离页面边缘太近打印时被驱动裁掉一点。解决思路不是调PDF而是回Orcad里把图框整体往内缩2~3mm或者在打印机属性里把非打印区域设为0。我曾经见过一个项目图框左侧边框线总是断一截排查到最后就是页面四边留白不够打印机驱动默认要吃掉3mm边距。这个坑很隐蔽遇到边框断线先往这上面想。3. Ghostscript参数逐个拆解从“能出PDF”到“出好PDF”3.1 安装与验证GhostscriptGhostscript的安装很简单从官网ghostscript.com下载GPL版本安装包装到默认路径C:\Program Files\gs\gs10.03.1然后把bin目录加入系统PATH。完成后打开命令行输入gswin64c -version验证能看到版本号就说明环境就绪。64位系统一定用gswin64c不要用32位的gswin32除非你的环境有特殊限制。这一步很多人会忽略但其实值得重视Ghostscript只是一个命令行引擎没有图形界面你输入命令它就干活。这意味着所有操作都可以脚本化、标准化不依赖任何人“手动点鼠标”。我见过有团队把整个导出流程封装成一个.bat文件新入职的工程师双击一下自动扫描当前目录下所有.ps文件并生成PDF效率提升一个量级。3.2 最简命令与常用参数最简转换命令长这样gswin64c -sDEVICEpdfwrite -o output.pdf input.ps这条命令把input.ps直接转成output.pdf能出图但不一定适合正式交付。我实际项目里一般用下面这条完整命令gswin64c -sDEVICEpdfwrite -o output.pdf \ -dEmbedAllFontstrue \ -dSubsetFontstrue \ -dPDFSETTINGS/prepress \ -dCompatibilityLevel1.7 \ -dBATCH -dNOPAUSE \ -sFONTPATHC:\Windows\Fonts \ input.ps命令里的几个关键参数我列一张表方便后续对照参数作用-sDEVICEpdfwrite指定输出设备为PDF写入器-o 文件名指定输出文件名同时隐含批处理模式-dEmbedAllFontstrue强制嵌入所有字体-dSubsetFontstrue字体子集化只嵌入用到的字形-dPDFSETTINGS/prepress按印刷级质量处理保留细节-dCompatibilityLevel1.7输出PDF版本为1.7-sFONTPATH指定字体搜索目录-dBATCH -dNOPAUSE批处理模式不中途暂停3.3 字体嵌入与子集化交付质量与文件体积怎么平衡从PS转PDF时Ghostscript会检查PostScript文件里引用的字体在系统中找到同名字体后按参数决定嵌入方式。dEmbedAllFontstrue保证所有字体都嵌入dSubsetFontstrue只嵌入用到的字形。这两个参数组合的好处在哪以原理图为例通常一页图纸只用到Arial、Times New Roman、SimHei这三四种字体子集化之后每个字体只保留实际用到的几十个字形既保证外观完全一致又能把文件体积压得很小。我见过一份两百页的原理图不子集化PDF跑到80MB子集化之后只有12MB完全不影响显示。如果你发现某些字体转换后仍然丢失通常是字体没在FONTPATH里或者字体名与PostScript文件里的字体名对不上。解决办法就是把字体文件所在目录加进-sFONTPATH参数或者直接把原理图中的字体统一替换成GS认识的字体。对Orcad来说Arial和Times New Roman永远是兼容性最好的选择。3.4 批处理与多页合并脚本Ghostscript是命令行工具天然适合批处理。把整个目录下的PS文件转换PowerShell脚本可以这样写Get-ChildItem *.ps | ForEach-Object { gswin64c -sDEVICEpdfwrite -o ($_.BaseName .pdf) $_.FullName }传统批处理也能写但中文路径和特殊字符的处理更麻烦我建议团队直接用PowerShell。合并多个PS文件为一个多页PDF更简单gswin64c -sDEVICEpdfwrite -o merged.pdf part1.ps part2.ps part3.ps同一个项目多张图纸分别打印后一行命令合并成一个多页PDF后面再用pdfmark统一加书签整份交付文件就非常整齐。4. 属性管理实战让PDF不再是一张“死图”4.1 原理图Title Block属性与图纸元信息的统一PDF的属性管理第一步其实发生在Orcad里。原理图右下角Title Block的Title、Sheet Number、Revision、Date这些文本属性打印时会渲染到图纸边框上这些内容在打印之前必须填好否则PDF出来就是一张“没头没脑”的图纸。我的习惯是工程一开始就在模板中更新Title Block保证每张图右下角能看到项目名、版本、日期。这里有个容易忽略的细节Title Block里的多行文本如果字体过小转换后放到大屏上很难认我建议标题字体不小于10磅正文不小于8磅。另外Orcad里元器件显示出来的Value、Reference、Footprint这些属性在导出PDF时都会作为普通文本渲染。如果某个元件的属性文本被设置成隐藏PDF里同样不会显示所以交付前要在Orcad里统一检查一遍显示属性。那种“图上看着正常发出去PDF缺了电阻值”的情况八成是属性文本的“显示”开关没打开。4.2 用pdfmark注入PDF元数据与书签Ghostscript的pdfmark是一个很有用的扩展可以在转换时往PDF里写入文档属性和书签。注入元数据的命令是这样的gswin64c -sDEVICEpdfwrite -o out.pdf \ -c [/Title (Board_RevA) /Author (HardwareTeam) /Subject (Schematic) /Keywords (power,mcu) /DOCINFO pdfmark \ -f input.ps书签可以通过单独的文本文件来做先写一个bookmarks.txt[/Title (1 Power) /Page 1 /OUT pdfmark [/Title (2 MCU) /Page 2 /OUT pdfmark [/Title (3 Interface) /Page 3 /OUT pdfmark然后把这个文件放在-f前面参与转换gswin64c -sDEVICEpdfwrite -o out.pdf bookmarks.txt -f input.ps这样生成的PDF在阅读器左侧就能看到按页分好的书签评审时跳转非常方便。我的建议是每页用一个简短功能名做书签比如“1 Power”“2 MCU”“3 Interface”比默认“Page 1”友好得多。4.3 权限控制、初始视图与文件命名规范给外部交付的PDF建议加上打开密码或权限密码。Ghostscript支持-sOwnerPassword和-sUserPassword参数可以限制PDF的打印、复制、修改权限具体权限位可以按Ghostscript文档调整。这个功能在给客户发图纸、又不想对方随意改图时很实用。文件命名这块我建议统一为“项目名_板卡名_版本号_日期.pdf”例如“RobotCar_MainBoard_RevA_20250601.pdf”。避免出现“最终版”“最终版2”“最终版3最终版”这类让人头大的命名。所有图纸先在本地脚本里转换并检查一遍再传入版本管理系统参与评审的人拿到的永远是同一份属性完整、命名规范的PDF。5. 高频故障排查实录字体、裁剪、清晰度三座大山5.1 中文字体变成方框怎么一步步定位现象是转换后中文字变成方框或者乱码。我一般按照下面这个链路排查。第一步先用文本编辑器直接打开.ps文件搜索“/SimSun”或“/FangSong”这类字体名确认Orcad在PostScript文件里记录的字体到底是什么。第二步检查系统的C:\Windows\Fonts里是否存在该字体没有就装有就继续第三步。第三步在Ghostscript命令里加-sFONTPATHC:\Windows\Fonts让引擎主动找到字体。第四步如果还不行就把原理图中的字体统一替换成Arial、Times New Roman、SimHei这类GS原生认识的字体重新打印转换。最后用Adobe Acrobat打开PDF在文件属性→字体里确认每个字体状态都显示“已嵌入”这一步才算闭环。这套排查链路我走了不下十次最后总结出最关键的一点不要在PDF生成之后才去调一定要回到PS文件里看字体名。字体名搞清楚问题就解决了一半。5.2 页面被裁、比例不对先查打印纸再查CropBox页面被裁或比例不对90%出在打印纸设置上。排查流程是先看Orcad原理图页面尺寸再看PS虚拟打印机默认纸张两者必须一致。如果一致但仍有空白或裁切可以用Ghostscript设置CropBox把输出页面统一裁剪到固定尺寸gswin64c -sDEVICEpdfwrite -o out.pdf -c /CropBox [0 0 841.89 595.28] setpagedevice -f input.ps这里的坐标单位是PostScript点A4横向就是841.89×595.28点。这个参数适合把外框统一到公司图纸归档模板的固定尺寸所有项目的PDF页面大小完全一致装订归档特别方便。我遇到过一种比较隐蔽的情况就是一台电脑上装着多个PS驱动Orcad的默认打印机被系统自动切换到了另一台驱动器上导致纸张设置“看起来”没问题、实际用的却是另一套配置。所以每次打印前务必在Print Setup里再次确认当前选中的打印机名称别信“上次设置过”。5.3 放大后发虚先分清矢量还是位图PDF发虚要分两种情况。一种是打开后文字线条边缘毛糙放大之后出现马赛克说明打印时被光栅化了。排查打印对话框里是否勾了“打印为图像”以及驱动是否设置了位图输出把这两处关掉改用PSGS链路解决。另一种是文字边缘清晰但字号偏小放大后锯齿明显这其实是查看器缩放比例的问题一般把PDF在Acrobat里设为100%显示就正常了。怎么判断PDF到底是不是矢量很简单用Acrobat把页面放大到1600%然后点击线条或者文字如果能选中为独立对象并显示编辑框说明是矢量如果只看到一整块像素那就是位图。这个测试我每次交付前都会做一遍确保发给工厂的PDF放大细节清晰可见。6. 把这条链路落到日常项目里的一些心得6.1 配合版本管理做自动导出我们团队目前的做法是每版硬件设计在Git提交前用同一份PowerShell脚本把当前目录下所有需要交付的原理图统一导出成PDF脚本里固定了前面讲的参数、纸张、书签和文件命名规则提交后在项目说明里附一份PDF索引。这样每次评审、打样、归档拿到的都是完全相同的产出再也不会出现“我这边导出的PDF和你看的不一样”这种对话。脚本还可以做得更细比如自动读取DSN目录下的版本信息写进PDF元数据或者把输出文件放到以版本号命名的子目录里方便追溯。6.2 团队统一模板和集中维护强烈建议团队维护一份统一的Orcad打印模板、打印机驱动规格和Ghostscript脚本新同事入职直接导入避免每个人从菜单里东点西点搞出不同配置。模板里包含标准Title Block、统一字体和颜色方案、打印纸规格。如果公司有专人维护这些基础配置后续升级Orcad版本或换电脑时也能快速恢复不用重新研究一遍。我见过最省心的配置是把整个导出方案封装成一个简单的启动器双击之后自动完成PS生成、GS转换、元数据注入、文件重命名全程无手动干预。新同事花十分钟熟悉一下之后再也不需要问“这个PDF怎么导”了。6.3 个人使用中的几个经验细节最后分享几个小经验打印PS之前先在Orcad的Display→Color/Print里确认所有需要打印的图层颜色都设为可见。纯黑白配色的原理图打印效果最好彩色图纸在黑白扫描件里容易一塌糊涂大批量生成的PDF最后统一用Ghostscript重压一遍可以把冗余对象清掉文件体积通常能缩小20%左右如果只是临时快速查看直接用Microsoft Print to PDF就行但正式交付、归档必须走这套PSGS链路Ghostscript脚本的文件名和输出路径里尽量别有中文和空格虽然新版GS支持得不错但遇到问题排查起来还是麻烦。我用这套组合已经两年多再没被评审老师问过“这PDF怎么放大是糊的”。Cadence Orcad画原理图、Ghostscript出PDF一个负责把图画对一个负责把图出好分工明确之后这块工作基本就从“每次手动折腾”变成了“一条命令的事”。