首页/新闻资讯/正文详情

Jasper报表导出与分组交叉表故障排查指南

发布时间:2026/11/2 19:57:28 来源:云帆数科 栏目:资讯中心
Jasper报表导出与分组交叉表故障排查指南
简介这是一份围绕 Jasper 报表制作整理的实操型文档面向需要快速上手 Jaspersoft 的报表开发人员、IT 从业者及初学者重点解决报表结构理解不清、常用制作技巧零散的问题。资源包仅含 1 个 docx 文件压缩包约 599KB体量轻便适合作为日常查阅与操作对照的资料。内容从 Title、Page Header、Column Header、Detail、Column Footer、Page Footer、Summary 等区域讲起并延伸至 Json 数据源接入、PDF 中文字段显示、手工新增字段、报表明细分组、序号列生成、自定义纸张大小及 Crosstab 交叉报表等常见场景配有相应处理思路。已有 242 人学习或浏览可为报表模板设计、打印配置和问题排查提供参考帮助读者减少重复摸索提升报表制作效率与规范度。1. 预览正常、导出就出问题Jasper 报表最磨人的几类故障Jasper 报表这类工具最反直觉的地方在于设计器里预览一切正常一旦导出成 PDF或者上传到系统后从菜单点开问题就全冒出来了——中文变成一串问号或方块、分组页眉整体错位、序号列每页又从 1 开始、交叉表拖进去直接一片空白。做报表的人多半都经历过这种“本地全对上线全错”的翻车现场排查起来还特别费劲日志里没有有效信息报错就是一句空泛的渲染失败只能靠一个个 band 去试。这篇笔记针对的就是这类人已经能把报表跑起来但卡在导出、分组、交叉表、参数条件这几个具体环节的开发者。下面按故障现象、根因、可照着做的解决步骤展开涉及到的结构划分、字段类型、分组高度、变量配置、页面格式、条件 JSON 和 SQL 模板都会给出参数含义和修改方法能让新手直接抄也能让熟手看清为什么会错。2. PDF 中文消失字体、编码与三处常见触发点2.1 现象拆解预览有字、PDF 没字、系统里更没字先说清触发路径因为不同路径的根因不一样。常见有三种设计器预览时中文正常导出 PDF 后中文变成空白或者乱码设计器里导出的 PDF 正常上传到业务系统后通过打印入口打开又丢字还有一种更隐蔽PDF 里中文看着正常但打印出来缺笔画、缺字或者某些生僻字被替换成方框。第一种是字体没有嵌入 PDFPDF 渲染端找不到对应字体就回退到默认字体中文字符就整个丢掉。第二种是系统侧的报表服务进程没有加载到同一份字体配置或者模板里用的是本地字体名、而服务器上没有安装这个字体。第三种多半是选了不支持完整中文字符集的编码UniGB-UCS2-H 这类编码覆盖的是常用汉字集合字符集外的字会缺。要把这几种区分开最快的办法是做一次对照导出同一份 jrxml 在设计器里导出一次 PDF、在系统里导出一次 PDF两个文件用同一个阅读器打开对比。如果设计器那份正常、系统那份不正常问题就在服务端字体或编码如果两份都不正常问题在模板本身。提示不要用“预览正常”作为模板没问题的证据预览走的是屏幕渲染和 PDF 导出完全是两条路径。2.2 单个字段的改法与全局样式的改法最直接的做法是给每一个中文标签单独指定 PDF 字体。选中标签在属性面板里切到 Advanced高级页签找到 PDF Font name、PDF Encoding、PDF Embedded 三项分别设置为 STSong-Light、UniGB-UCS2-H、true。三个参数的含义要记清PDF Font name 决定导出时用哪套字体PDF Encoding 决定字符到字形的映射表PDF Embedded 决定是否把字体子集写进 PDF 文件——最后这项设为 true 是关键否则换一台机器打开就可能丢字。字段一多逐个改就是纯粹耗时间。更省事的做法是在 jrxml 源码里插一段全局默认样式让所有没有单独指定字体的元素都走这套配置!-- 放在 jasperReport 根节点下的 style 列表里isDefault 让未显式指定字体的元素继承这份配置 -- style namepdfStyle isDefaulttrue pdfFontNameSTSong-Light pdfEncodingUniGB-UCS2-H isPdfEmbeddedtrue/这段代码的作用域是整个报表模板只要元素没有自己的字体设置导出时就套用这份样式。参数上要注意两点name 只是样式标识可以自定义但要保证模板内不重名isDefault 只能有一份为 true出现两份默认样式时行为取决于解析顺序容易造成“改了没生效”的错觉。真正容易忽略的是第三点全局样式对已经单独设过字体的元素不生效。所以如果模板是从别处拷来的里面可能残留了零散的字体设置改完全局样式仍然有字段丢字。我一般的处理顺序是先把模板里所有 fontName、pdfFontName 相关属性清一遍再加默认样式最后再对个别需要特殊字体的元素单独覆盖。2.3 上传后字体失效的排查顺序系统侧丢字按这个顺序查能省很多时间。第一步确认服务端是否存在 STSong-Light 对应的字体文件很多精简过的运行环境只带西文字体。第二步确认模板里 isPdfEmbedded 是否为 true为 false 时 PDF 依赖阅读端自带字体跨设备必然不稳。第三步确认系统打印配置里引用的模板是不是你刚上传的那一版模板有版本或者缓存时改了不生效是高频坑。第四步清一次报表服务缓存再试很多“改了没反应”最后都落在缓存上。如果用的是自建字体而不是内置的 STSong-Light还要注意字体名要写字体内部的 family name不是文件名。文件名和字体族名不一致导出时就会静默回退到默认字体表现和没配一样。3. 分组和分页错位band 高度、分组方式与序号列3.1 Create Group 之后整页空白或列头重复报表明细要按某个字段分组做法是在左侧报表大纲里右键报表名选 Create Group选中分组字段然后在分组 band 的属性面板里把 Height 设为 0并勾选 Start New Column、Start New Page 两个复选框。这套操作看起来简单但错一步表现就很怪。Height 不为 0 时groupHeader 会占掉一段高度而你并没有往里面放内容于是每组开头都多出一块空白数据一多整份报表就被撑成好几页。不勾 Start New Page 时下一组的数据会接着上一组后面排而不是另起一页看起来就像分组没生效。Start New Column 在多列布局里控制是否换列单列布局下影响不明显但和 Start New Page 一起勾上行为最可控。第二种做法是把 columnHeader 的 Height 设为 0把原来 columnHeader 里的列名字段全部挪到 groupHeader 里。这种改法的效果是每组数据自成一段列名跟着组走视觉上更像“按店铺归档、同店铺明细在同一页”。要注意的是列名挪走之后 columnHeader 就空了Height 必须同时归零否则页面上会留一条空白带。注意分组字段本身如果也要显示可以一起放进 groupHeader再把这个字段控件的 Print When Expression 设成假或者直接把高度压到 0实现“按它分组但不显示它”。3.2 序号列每页从 1 开始重来明细行加序号用的是报表大纲里的 Fx 变量功能右键 Fx选 Create Variable在属性面板里重命名变量然后配置几个关键属性。这里最容易错的是 Reset Type 和 Increment Type 两个参数。Reset Type 决定变量在什么时机归零设为 Report 时整份报表只归零一次序号连续到底设为 Page 时每页归零序号每页从 1 开始设为 Column 时每列归零设为 Group 时每个分组归零。Increment Type 决定在什么时机加一通常和 Reset Type 保持一致。很多人抱怨“序号每页重来”本质就是 Reset Type 被设成了 Page改成 Report 立刻正常。反过来如果业务上需要“每组重新编号”那就该把 Reset Type 设成 Group并指定分组名。变量表达式的写法一般是$V{REPORT_COUNT}这类内置计数变量或者你自己新建的变量在 Expression 里写$V{mySeq} 1Initial Value Expression 留空或写 0。配好之后把变量直接拖到 Detail 区作为第一列拖进去时选的是变量而不是字段这一点要看清拖错成字段就会出现“每行都是同一个数字”。变量还有个高频坑计算类型。如果 Calculation 设成 Sum、Average 这类聚合函数拖到明细区显示的就不是行号而是聚合值。序号列的 Calculation 应该保持 Nothing。这个属性默认值不一定是你想要的新建变量后必须显式确认一遍。3.3 自定义纸张与快递面单的版面收敛快递面单这类场景需要自定义纸张改法是在新建完报表初始页面后点击页面最边框外侧的空白部分在 Report 属性里找 Edit Page FormatFormat 选 Custom然后在下方 Units 里选 mm 或者业务需要的计量单位再填宽高。Units 这一步很容易漏漏了就会按默认单位解释数字打出来的面单尺寸完全不对。面单通常只需要 Detail 区其他区域全部归零Title、Page Header、Column Header、Column Footer、Page Footer、Summary 的 Height 都设为 0。这样版面里只剩明细纸张尺寸才由你控制。有一种做法是只把不需要的 band 内容删掉但不改高度结果就是每条明细之间夹着一堆空白看不出原因——band 是结构删内容不改高度它还在占位。3.4 用 EQUALS 控制控件显示与隐藏面单上有时要按字段值决定某块内容打不打印比如按运输方式区分不同标识。做法是选中控件在 Print When Expression 里写表达式EQUALS($F{transportType}, E)表达式的含义是字段值等于指定字符串时才打印否则整块不渲染。参数上要注意两点第一字段值为空时要单独判断空值和任何字符串比较都不相等表达式为假就不打印这通常正是想要的行为第二字符串要带引号字段引用用$F{}变量引用用$V{}参数引用用$P{}写错前缀不会报错只是条件永远不成立表现出来就是“设置了不显示但还显示着”。排查这类问题时我的习惯是把表达式临时改成恒真比如直接写true确认控件本身放在正确位置、样式正确再改回原表达式。这样能把“位置问题”和“条件问题”分开避免在一个表达式上反复猜。4. 交叉表一片空白字段类型、存放位置与字体大小4.1 Crosstab 拖进 Summary 才有内容交叉表的第一个约束是只能放在 Summary 区。放在其他 band 里设计器可能不阻止你但生成时就得不到预期结果——要么不渲染要么只渲染出静态部分。所以设计交叉表之前先把报表里多余的功能区域去掉保留 Title 和 Summary 就够了Detail 区如果不需要可以高度归零。拖入 Crosstab 时会弹出向导数据源选择“引用已存在的数据源”然后按向导右上角的提示依次选行字段、列字段、明细字段。最后一步是重点明细字段的 calculation 函数默认不是 Sum必须手动改成 Sum否则交叉表的交叉格子里显示的是某一条记录的值而不是汇总值。这一步漏掉交叉表看起来“能出来但数字不对”比直接空白更难发现。生成之后还有一个收尾动作把 Crosstab 拉大覆盖整个界面区域否则字段一多就被裁掉。双击 Crosstab 可以改深蓝色 Static Text 部分的名称也就是行标题和列标题。绝大多数情况下还需要选中交叉表内全部明细字段把字体大小改成 6 号并居中——默认字号偏大列一多就挤不下表现出来就是格子里的数字显示不全或者干脆不显示。4.2 统计字段必须是 Integer 而不是 String交叉表数字算不对、合计不出来的最常见根因是字段类型。JSON 数据源读进来的数值字段默认可能被当成 String 处理。String 类型的字段参与 Sum 计算结果要么为 0要么不参与聚合交叉表里就是空或者原始字符串。改法有两个层次一是在导入数据源或手工新建 Fields 时就把需要参与统计的字段类型改成 Integer在字段属性面板里选对应的类型二是如果字段已经在模板里生成好了去报表大纲里找到该字段修改变量或参数的类型声明。字段类型是编译期的事情改完需要重新编译模板才会生效只保存不编译是最常见的白忙一场。这里有个判断技巧如果交叉表里显示的是原始数值但合计错那多半是聚合函数没设成 Sum如果交叉表里显示的是数值但怎么都算不进合计那多半是类型还是 String。两种情况的现象相近但改动点完全不同先分清再动手。4.3 字段漏了怎么办手工补 FieldsJSON 数据源用到一半发现漏了字段不用回去改数据源重建。在左下角报表大纲里右键 fields新增字段然后在属性面板里重命名字段名和描述选好对应类型。硬性要求是字段的 name 必须和数据源里查询出来的字段名完全一致包括大小写不一致时预览不会报错只是这个字段取不到值显示为空。新增完字段如果模板里已经引用了它还要检查绑定关系是否同步字段列表里有了但控件上绑的还是旧字段或者没有绑定显示依然是空。我的做法是加完字段立刻在 Detail 区放一个临时文本控件绑上去预览一次确认有值再继续往下做。这一步多花一分钟能省掉后面“明明加了字段还是空”的半小时间。5. 上传后打不开或参数失效条件 JSON 与 SQL 模板对照5.1 条件 JSON 的必填四项模板编译完要上传配置路径是配置—打印配置—报表新增报表时填代码标识、描述、报表类型再写条件部分。代码标识尽量和原模板名称一致后面菜单配置里要引用它。条件部分本质是一段 JSON用来描述用户在界面上看到哪些查询条件。基础结构是这样的每一项有四个必填字段 field、id、name、type[ {field: , id: h1_basic, name: 基本信息, type: h1}, { field: id, id: id, name: 装载号, required: true, type: integer } ]field 和 id 尽量保持一致name 是界面上显示的条件名type 决定这个条件在后续 SQL 里按什么类型处理required 为 true 表示必填。type 为 h1 的那一项是分组标题用来在界面上分区不参与查询。作业报表一般只改 name其他都不动管理报表要加期间、自定义条件时才需要按需补充。类型选择是这里最容易翻车的地方。单号、供应商名这类是 string日期和时间是 date 或 datetime数量金额是 integer 或数值型。类型写错的表现很典型条件能填能提交但查出来永远是空的或者日期范围怎么选都查不到数据。原因就在 SQL 里那个占位参数用错了比较方式。5.2 SQL 模板里占位参数必须与 type 对齐管理报表的 SQL 里条件是这样接进去的。以入库商品明细为例条件 JSON 里定义了起始日期 beg、结束日期 end、商品编码 itemCode、入库单号 code、供应商名 shipFromName对应的 SQL 模板长这样select rh.closedAt, rd.receiptCode, rh.shipFromName, it.itemCategory1, it.code, it.userDef3, it.name, rd.totalQty, rd.openQty, (rd.totalQty - rd.openQty) as redQty, rd.warehouseCode, (select barcode from item_barcode ib where ib.itemCode rd.itemCode LIMIT 1) BARCODE from RECEIPT_HEADER rh inner join RECEIPT_DETAIL rd on rh.id rd.receiptId inner join ITEM it on rd.itemCode it.code where rh.leadingSts 900 and rh.trailingSts 900 -- 每个条件都写成“有值则过滤无值则放行”避免用户不填就查不出数据 and (rh.code :code or rh.code is null) and (rd.itemCode :itemCode or rd.itemCode is null) and (rh.shipFromName :shipFromName or rh.shipFromName is null) and (rh.closedAt :beg or rh.closedAt is null) and (rh.closedAt :end or rh.closedAt is null) order by rh.closedAt desc这段 SQL 有两层参数要对上。第一层是占位名和条件 JSON 里的 field 一一对应:code 对应 field 为 code 的那项:beg 对应 beg名字不一致时参数传不进来。第二层是每个条件都套了“或为空放行”的写法让用户在界面上不填某个条件时不影响结果如果只写rh.code :code用户不填就会变成和空值比较查出来一条都没有这是很常见的一种“条件失效”。日期条件的坑更多。如果字段是 datetime 而 type 写成 date结束日期那天的记录会因为时间部分被截断而查不全。稳妥的做法是结束日期按“次日零点之前”处理或者在 SQL 里对字段做日期截断后再比较别指望界面上的日期选择器和数据库时间精度天然一致。5.3 菜单配置里文档名与代码标识的对应模板上传完成还要在开发—菜单配置里找到报表打印所在的界面类型和界面名称在 View JSON 里打开对应加载项在打印区域添加作业报表。文档名称对应模板名称id 对应打印配置里的代码标识两个都要对上点更新。这里错一个字符表现就是菜单里点打印没反应或者打开空白。配置完的验证方式要按报表类型分开。一般作业报表走菜单入口验证管理报表可以在管理—报表查询里直接双击预览选自定义期间填完其他条件点 PDF 下载。这条路径不依赖菜单配置所以当菜单入口不通、但报表查询能出结果时问题一定在菜单配置的文档名或 id 对应上而不是模板本身。这个分流判断能砍掉一大半排查范围。提示管理报表和作业报表的验证入口不同先确认自己改的是哪一类再去对应入口验证别拿作业报表的菜单配置去验证管理报表。6. 常见问题与避坑那些让我返工过的坑6.1 改了模板没生效现象模板改完重新上传导出结果还是旧的。原因通常是系统缓存了已编译的模板或者菜单配置里引用的还是旧版本。解决确认上传的那份文件和本地编辑的是同一个文件、同一个版本清一次报表服务缓存再验证。我习惯在上传前把模板里的一个固定文本改成带日期的标记导出后看到标记才算新版本生效看不到就是没换成功。6.2 分组设置了却按整页重复列名现象按字段分组后每页顶部还是出现列名分组看起来像没起作用。原因是用的是第二种分组方式columnHeader 高度没有归零或者列名字段虽然挪到了 groupHeadercolumnHeader 里还留着副本。解决把 columnHeader 的 Height 设为 0确认列名字段只存在于 groupHeader 一处预览时逐页翻看确认。6.3 交叉表里数字显示不全现象交叉表数据出来了但格子里的数字被截断或者整块不显示。原因通常是明细字段字体过大列数一多可用宽度不够。解决选中交叉表内全部明细字段字体改成 6 号并居中再把 Crosstab 拉大覆盖整个界面区域重新预览确认每个格子都能显示。6.4 条件填了但结果空现象界面上填了查询条件点查询出来是空表。原因有两个高频来源条件 JSON 里的 type 和 SQL 占位参数的比较方式不匹配或者字段名和 SQL 里查询出的列名大小写、拼写不一致。解决先把所有条件清空跑一次能出全量数据说明 SQL 和字段没问题是条件传参的事再逐项加条件定位是哪一项失效然后回到 JSON 和 SQL 对照 field、id 与占位名。6.5 序号列拖进去显示同一个数字现象变量做好了拖到明细区每一行都是同一个数字。原因有两个拖的其实是字段而不是变量或者变量的 Calculation 被设成了聚合类型。解决确认大纲里拖的是变量节点检查 Calculation 为 NothingReset Type 按业务需要选 Report 或 Group重新编译预览。7. 快速定位几条能缩短排查时间的习惯报表类问题的排查难点在于报错信息几乎没有所以我给自己定了一套固定动作出问题时按顺序过一遍比漫无目的地试要快得多。第一步永远是分清故障发生在哪条路径上设计器预览、设计器导出 PDF、系统内预览、系统内导出这四条路径的表现分别记录下来。四条全错说明模板本身有问题只有系统侧错说明是字体、编码或缓存只有导出错说明是 PDF 相关属性。这一个判断就能省掉大量无关的改动。第二步是做二分对照。把模板里可疑的 band 逐个高度归零看问题是否消失能快速定位到是哪个区域引发的布局错位。字段显示为空时先在 Detail 区放一个最小文本控件绑该字段确认取值正常再去怀疑绑定和样式。条件查询为空时先清空全部条件跑一次全量再逐项添加一次只加一个。第三步是看编译和上传的版本是否真的换掉了。报表资源最容易出问题的地方不是模板写得对不对而是改的东西有没有生效。我现在的习惯是每次改动都在模板里留一个可识别的版本标记导出后先看标记再看内容标记不对就直接回头查上传和缓存不在模板细节上耗时间。还有一个值得养成的小习惯把容易错的参数集中记下来比如 PDF 的三项字体设置、变量的 Reset Type 与 Calculation、条件 JSON 里的 type 和各占位参数。真正出问题时人容易慌翻自己的记录比重新推理快得多。报表这东西出故障时往往不是逻辑难而是某一个小配置点踩空了导致整份输出都不对。上面这套从路径分流到二分定位的做法是我被各种“预览正常、导出全错”折腾过之后慢慢固定下来的。这份整理里把结构划分、字体编码、分组分页、变量序号、自定义纸张、交叉表、条件 JSON 与 SQL 模板的坑和改法都落到了具体参数上照着走一遍基本能覆盖日常报表制作里的常见故障。希望帮到你。本文还有配套的精品资源点击获取

相关推荐

定点数与浮点数:原理、应用与优化策略
定点数与浮点数:原理、应用与优化策略

1. 定点数与浮点数的本质区别在计算机系统中,数值的表示方式直接影响着计算精度、存储效率和运算速度。定点数(Fixed-point)和浮点数(Floating-point)是两种最基础的数字表示方法,它们的核心差异在于小数点… · 2026/11/2 19:56:27

VC++扫雷:Win32 GUI开发的精简实战入口
VC++扫雷:Win32 GUI开发的精简实战入口

简介:本资源是一份基于Visual C开发的经典Windows扫雷游戏完整源码工程,面向C初学者与Windows桌面应用入门开发者,旨在通过可运行的实战项目帮助理解MFC框架、事件驱动编程及游戏核心算法实现。压缩包共54个文件,包含6个关键CPP源… · 2026/11/2 19:56:27

ESP32专用OpenOCD 0.11.0:ARM32 Linux下JTAG烧录调试实战包
ESP32专用OpenOCD 0.11.0:ARM32 Linux下JTAG烧录调试实战包

简介:本资源是专为嵌入式开发工程师与IoT硬件调试人员提供的OpenOCD ESP32定制化调试工具包,面向Linux ARMEL平台(嵌入式ARM小端架构),解决ESP32芯片在无图形界面环境下的固件烧录、JTAG/SWD在线调试、GDB远程联调及寄… · 2026/11/2 19:56:27

VMware Workstation/Fusion 免费安装配置与许可指南
VMware Workstation/Fusion 免费安装配置与许可指南

虚拟机这个工具,做开发、测试、运维、安全研究的人基本绕不开。我自己从早期的 Workstation 一路用过来,中间换过 VirtualBox,折腾过几轮远程桌面加物理机的组合,最后还是回到 Workstation 和 Fusion,原因很简单&#… · 2026/11/3 5:08:54

PMSM无感FOC:基于BEMF建模与PLL锁相的全速域位置估算方法
PMSM无感FOC:基于BEMF建模与PLL锁相的全速域位置估算方法

简介:本资源是Microchip官方发布的AN2520应用笔记PDF,面向电机控制工程师、嵌入式开发者及高校电力电子方向学习者,系统讲解永磁同步电机(PMSM)无传感器磁场定向控制(FOC)的工程实现方案&#x… · 2026/11/3 5:08:54

工业HMI权限分级设计与实现的关键技术
工业HMI权限分级设计与实现的关键技术

1. HMI权限分级设计的核心挑战在工业自动化领域,人机界面(HMI)作为操作人员与控制系统交互的主要窗口,其权限管理直接关系到生产安全与操作效率。我经历过多个大型项目,发现权限设计不当会导致两种极端情况&#xff1a… · 2026/11/3 5:08:54

Buzz是什么:社会注意力共振的识别与培育方法
Buzz是什么:社会注意力共振的识别与培育方法

1. “buzz”不是随便叫的——这个词在当下到底指什么、能干什么、谁该关注它最近刷短视频、看社交媒体,或者跟朋友聊天时,你大概率已经听过“buzz”这个词被反复提起。它不再只是英语词典里那个“嗡嗡声”的拟声词,也不再局限于营销课上讲的“… · 2026/11/3 5:08:54

什么是技术领域的‘Buzz’?从社交声量到振动反馈的工程解析
什么是技术领域的‘Buzz’?从社交声量到振动反馈的工程解析

我无法根据当前输入生成符合要求的博文。原因在于:您提供的输入内容中,项目标题仅为“buzz”,且后续所有字段(项目正文、关键词、摘要描述)均为空或未提供有效信息。同时,相关热搜词与网络搜索内容部分也完… · 2026/11/3 5:08:54

汽车维修厂数字化转型:痛点诊断与管理系统选型指南
汽车维修厂数字化转型:痛点诊断与管理系统选型指南

1. 汽车维修厂业绩增长的痛点诊断从事汽车维修行业20年,我见过太多维修厂在业绩增长路上踩过的坑。最常见的三大痛点往往直接导致客户流失和利润下滑:1.1 客户管理混乱的连锁反应纸质工单和Excel表格管理客户的时代早就该结束了。上周我去拜访一家老客户… · 2026/11/3 5:07:54

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战

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

ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题

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

基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践

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

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

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

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

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

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码