iReport参数配置全攻略:从基础机制到实战避坑指南
我做了这么多年报表开发跟iReport打交道的年头不算短。第一次接触参数配置的时候感觉很简单无非就是在面板里new一个Parameter然后在SQL里写个$P{xxx}。可真到了复杂的业务报表里时间范围传不进去、参数空值导致整个报表白屏、子报表参数对不上号、日期格式莫名变成英文——这些坑我全踩过而且每踩一次都要花大半天才能绕出来。这篇文章就把iReport参数配置的整条链路掰开揉碎讲清楚从参数的本质机制到创建参数时那些不起眼却决定成败的属性再到SQL绑定、表达式引用、传参通道、内建参数最后集中盘点我遇到过的翻车现场和调试思路。不管你是刚接触JasperReports的Java工程师还是被老项目报表模板折磨的维护者这篇都值得看完尤其是第7部分很多坑我是实打实淌过来的。1. 参数到底是什么——先搞懂机制再动手1.1 参数的本质报表与外界的对话窗口一个.jrxml报表模板说白了是一份XML文件记录了数据怎么查、字段怎么摆、样式怎么设。但模板本身是死的它需要运行时从外部拿到信息才能真正工作。参数Parameter就是这扇窗户。Java程序调用JasperFillManager.fillReport()的时候会传入一个MapString, ObjectJasperReports引擎解析模板时会把Map里的key对应到parameter声明上模板内部再用$P{参数名}引用。整个流程如果用生活场景类比报表模板是一张带填空格的申请表参数就是你往里填的内容。申请表结构一直不变但每个人填的内容不同印出来的表就完全不一样。这也是为什么同一个报表模板能生成几十份不同筛选条件的报表——数据源负责提供数据总量参数决定查询范围和展示行为。1.2 一个典型的必须用参数的场景假设业务方要一张按部门、按月统计销售订单的报表。部门id和月份范围不可能写死在模板里它们来自前端页面的用户选择前端把值传给后端后端塞进参数MapiReport模板里声明三个参数deptId、startDate、endDateSQL写成SELECT order_id, order_date, amount FROM orders WHERE dept_id $P{deptId} AND order_date BETWEEN $P{startDate} AND $P{endDate}这里的$P{deptId}就是参数引用语法。没有参数会发生什么要么模板写死只查一个部门——完全不现实要么查全表然后在表达式里过滤——性能差到没法看。所以参数配置是报表开发的第一步真不是小题大做。2. 创建参数的基础操作从命名到类型选择2.1 新建参数的正确姿势和命名纪律在iReport左侧的Report Inspector面板里右键点击Parameters节点选择Add Parameter底部会打开属性编辑区。需要关注的字段有Parameter Name参数名引擎区分大小写Parameter Class参数类型决定表达式运算和SQL绑定的行为Default Value Expression默认值表达式可选但建议养成填写的习惯Description说明文字给自己和后来接手的同事看的命名这块我吃过亏。参数名跟Java变量名规范完全一致小驼峰、首字母小写、不能带中文和特殊字符。我接手过一个老项目参数名叫Dept ID带空格。iReport里写$P{Dept ID}勉强能编译但是Java端传参Map的key一对比就对不上定位了半天才反应过来是空格的问题。更麻烦的是JasperReports表达式语法里$P{}花括号内出现空格或奇怪字符某些版本会直接编译报错。所以命名纪律必须坚持deptId、startDate、endDate这种风格别自创奇葩格式。创建完成后建议顺手把Description填上写清楚这个参数代表什么业务含义。项目规模大了以后一个模板里躺十几个参数的情况很常见没有描述真的会发疯。我在给团队做code review的时候会专门检查参数描述这已经成了我最看重的细节之一。2.2 数据类型选择比你想的更讲究Parameter Class下拉列表里是java.lang包下的常用类型String、Integer、Long、Double、BigDecimal、java.util.Date、java.sql.Timestamp、java.lang.Boolean等。类型选择直接决定两件事一是表达式里怎么运算二是SQL绑定时的JDBC类型映射。最容易出错的是日期和时间。业务层传过来的往往是java.util.Date甚至java.time.LocalDateTime但JDBC驱动绑定SQL参数时如果直接塞Date部分驱动会丢时间只留日期——你明明查的是2024-11-01 14:30:00这个时间点最后数据库收到的是2024-11-01 00:00:00。我的习惯是传日期范围用java.util.DateSQL里配合TO_DATE或CAST做格式化传精确到秒的时间点用java.sql.Timestamp避免时间被截断如果项目用了Java 8的LocalDateTimeiReport老版本不支持这个类型需要Java端手动转成java.util.Date或Timestamp再传字符串参数也要留意。SQL里写WHERE dept_id $P{deptId}如果deptId声明为String驱动会把字符串按字符比较除非dept_id本身是VARCHAR否则索引容易失效。类型不匹配时Oracle数据库会直接抛ORA-01722: invalid number。类型选择的原则很简单和数据库列的类型尽量对齐Java端传入的对象类型要能cast到声明的参数类型两者不一致时宁可多写一次转换也不要在参数声明上糊弄。3. 让参数真正起作用SQL绑定与表达式引用3.1 SQL中的带参写法与JDBC类型映射报表的Dataset里配置了查询语句通常类似select * from orders where create_date $P{startTime}这里的$P{startTime}会被JasperReports引擎在填充阶段解析为JDBC PreparedStatement的问号占位符所以不存在SQL注入问题——这一点很多新手不知道iReport里的参数是预编译绑定的跟字符串拼接完全是两码事。但绑定有个前置条件参数类型必须能被引擎映射到JDBC类型。引擎按照参数Class映射到java.sql.Types常见的映射关系参数Class映射的JDBC类型java.lang.StringVARCHARjava.lang.IntegerINTEGERjava.lang.DoubleDOUBLEjava.util.DateDATE或TIMESTAMP取决于驱动和数据库方言java.sql.TimestampTIMESTAMP如果你把参数声明成java.lang.ObjectSQL绑定时引擎只能靠对象的实际类型去推断在某些数据库驱动上会产生不确定行为。所以SQL里用的参数尽量声明为具体类型不要图省事全用Object走天下。还有一个特别容易忽略的点SQL里参数绑定后数据库端对日期字符串的解析依赖会话的NLS格式Oracle或区域设置。同一个$P{startDate}在不同数据库环境里可能产生完全不同的解析结果。稳妥的做法是在SQL里显式转换select * from orders where create_date CAST($P{startDate} AS TIMESTAMP)或者更明确地使用数据库函数select * from orders where create_date to_date($P{startDate}, YYYY-MM-DD HH24:MI:SS)我见过不止一个项目因为依赖隐式转换上线到新数据库环境后日期范围整体偏移排查半天最后发现是数据库会话的日期格式跟原来不一样。这种问题隐蔽性极强报表数据看着差不多但就是不对最坑人。3.2 表达式里如何引用参数参数不光能在SQL里用还能在文本字段、变量表达式、条件样式中引用。语法统一是$P{paramName}比如文本字段的Text Expression$P{title} $P{deptName}变量初始化表达式$P{startDate}条件样式的Print When Expression$P{showFooter} true表达式里引用参数时类型必须和声明的Class一致否则JasperReports引擎在编译表达式时会报错典型信息是“Error evaluating expression”或“The type of the expression is not compatible”。这里有个小坑要提醒Java代码传字符串参数时如果参数值是null$P{startDate} abc这种写法会拼出nullabc显示在报表页面上非常难看。正确处理是空值判断($P{startDate} ! null) ? $P{startDate}.toString() : 日期格式化在表达式里通常这么做new SimpleDateFormat(yyyy-MM-dd).format($P{startDate})但SimpleDateFormat每次执行都会新建对象如果报表行数多、字段多性能损耗不小。我一般建议在变量里预格式化或者尽可能少在Detail区域重复做格式化操作。3.3 参数顺序与编译缓存jrxml里参数声明是有顺序的这个顺序在填充报表时会影响JasperReports的编译缓存命中率。JasperReports会把jrxml编译成.jasper文件并缓存缓存key跟模板内容和参数声明顺序都有关联。如果参数顺序频繁变动比如手工编辑jrxml时不小心挪了位置可能导致编译缓存失效每次都重新编译启动阶段性能明显下降。这个点很冷门但我确实在项目里遇到过迁移过来的旧报表模板参数顺序杂乱启动阶段编译耗时很长。整理参数声明顺序常用参数放前面、SQL参数按使用顺序排后缓存命中率上来编译时间肉眼可见地下降。调整顺序时要注意所有$P{}引用都是按名字走的顺序本身不影响功能只影响缓存效率所以可以放心整理。4. 默认值、空值判断与下拉参数联动4.1 默认值表达式怎么写才有用属性面板里的Default Value Expression默认是空的。填了之后当Java端没传这个参数时引擎会用默认值表达式的结果作为参数值。这里有个容易忽视的点默认值表达式本身也是JasperReports表达式它里面可以引用其他参数典型用法固定默认值new Integer(0)引用当前时间new java.util.Date()引用另一个参数做兜底$P{defaultDeptId} ! null ? $P{defaultDeptId} : D001我常用的是时间段默认值场景。业务上要求默认查最近7天但Java端经常忘记传endDate模板里写new java.util.Date()对应startDate的默认值写new java.util.Date(System.currentTimeMillis() - 7 * 24 * 3600 * 1000L)这种写法比在Java代码里做默认处理直观得多。报表设计者自己在iReport里就能控制兜底逻辑不用动不动去改后端代码重发版本工作效率提升很明显。4.2 参数为空的运行时兜底参数是否传了值是填充阶段必须主动处理的场景。直接引用空参数除了SQL可能查不到数据表达式里还容易NullPointerException。比如打印条件$P{showFooter} ! null $P{showFooter}如果showFooter没传这里会直接NPE整个报表填充失败。正确写法是Boolean.TRUE.equals($P{showFooter})或者更啰嗦但稳的方式($P{showFooter} null ? false : $P{showFooter})SQL层的空值兜底更隐蔽。比如是否勾选按部门过滤这种需求很多人的第一版SQL是select * from orders where dept_id $P{deptId}如果deptId为空SQL会变成dept_id null查不到任何行。应该写成select * from orders where ($P{deptId} null OR dept_id $P{deptId})注意这里的是Java表达式的等值判断不是SQL的.JasperReports预处理SQL时整个where子句依然是预编译的表达式引擎先把$P{deptId} null运算成布尔值再拼进动态SQL片段。这个写法在数据量上来后会导致全表扫描吗确实有可能。如果你频繁传null更优的方案是在Java端根据条件拆成两个模板或者用iReport的子数据集做更精细的控制而不是让所有行都走OR条件。4.3 下拉参数与二级联动用子数据集喂参数iReport还支持把参数做成下拉选择框做法是给参数配置一个Dataset数据集用SQL或JavaBean数据源填充候选值。这个机制涉及JasperReports填充过程的细节但有一个关键点值得单独说下拉参数的Dataset是在主报表填充前单独执行一次的它的查询语句可以用另一个参数作为输入从而实现二级联动——比如先选省份再选城市。城市Dataset的SQL写成select city_id, city_name from city where province_id $P{provinceId}然后在城市参数比如叫cityId的Dataset里配上这段SQL再把参数provinceId的声明放在cityId前面。JasperReports填充时会先计算provinceId的值再用它执行城市Dataset把候选值灌给cityId参数。声明顺序一旦反了城市列表永远加载不出来。这个坑我踩过后面第7部分会再提一次因为它真的够隐蔽。5. 传参的通道Java代码、子报表与系统入口5.1 Java端传参报表不是孤岛最典型的调用方式MapString, Object params new HashMap(); params.put(deptId, deptId); params.put(startDate, startDate); params.put(endDate, endDate); JasperPrint jasperPrint JasperFillManager.fillReport(report.jasper, params, connection);参数Map的key必须和模板里的参数名完全一致注意区分大小写。Java端传来的值类型和模板参数Class不一致时JasperReports不会自动做类型转换会在表达式评估阶段报错。所以Java端和模板端之间应该有一个参数契约名称、类型、是否必填这三项信息建议写在一个常量类里两边对照着维护。如果是Spring项目更常见的做法是用JRDataSource来提供数据而不是直接给Connection。这时SQL里的$P{}参数不会生效因为数据已经由Java代码组装好$P{}只能用于表达式层面不能用在SQL查询里。很多同事在这里绕晕明明给参数了SQL却不生效——多半是数据源换成了JRBeanCollectionDataSourceSQL参数绑定这一步根本没走。5.2 子报表传参参数管道的搭建iReport里主报表和子报表之间传参是另一个高频场景。子报表组件里需要配置Parameters Map表达式把父报表参数传过去subreportParameter nameparentDeptId subreportParameterExpression![CDATA[$P{deptId}]]/subreportParameterExpression /subreportParameter注意子报表的模板里必须声明同名参数parentDeptId否则子报表内部引用不到。子报表参数同样要声明类型值就是从主报表的$P{deptId}传过去的。如果你在子报表里没声明JasperReports不会自动把父报表参数带进来除非你用REPORT_PARAMETERS_MAP手动取——但非常不推荐代码可读性会变得很差。还有一个细节子报表的数据集如果用的也是同一个Connection子报表的SQL里可以直接用$P{paramName}但此时的paramName是子报表模板里声明的参数名不是父报表的。所以命名要尽量在两张模板间保持一致避免来回映射时看混。6. 内建参数JasperReports自带的系统级参数6.1 开箱即用的内置参数JasperReports为每个填充过程内置了一组参数名称以REPORT_开头。常用的有内建参数名含义REPORT_CONNECTION当前使用的JDBC连接java.sql.ConnectionREPORT_PARAMETERS_MAP包含所有传入参数和内置参数的MapREPORT_DATA_SOURCE当前使用的JRDataSourceREPORT_LOCALE报表运行时的Locale影响格式化REPORT_TEMPLATE样式模板引用REPORT_MAX_COUNT可设置最大行数控制超大报表输出这些内建参数在iReport表达式里可以直接引用比如在页眉显示应用名文本字段表达式里写REPORT_PARAMETERS_MAP.get(appName)。但注意直接拿REPORT_PARAMETERS_MAP去get可能得到null因为Map不是所有key都有值。更稳的做法是在模板里声明一个与你想用名字相同的参数Java端传值再用$P{appName}引用。6.2 内建参数的典型用途REPORT_CONNECTION的常见场景报表里需要查某个字典表或读取配置时可以拿它创建子数据集。但这个操作有坑如果报表最终是用JRDataSource填充的REPORT_CONNECTION会不存在表达式会NPE。用之前务必确认填充方式。REPORT_LOCALE是我最推荐使用的内建参数之一。报表的金额和日期格式会跟随Locale比如中文环境下的千分位、日期格式和英文、德语环境都不同。在Java代码里设置Locale比在模板里硬编码格式化模式干净得多。我记得一个海外项目模板里所有金额都用硬编码的#,###.##结果在德语环境下千分位变成点金额显示全部错乱。改成用REPORT_LOCALE控制后同类问题再没出现过。7. 参数相关的高频翻车现场与调试手段7.1 经典报错与排查链路这一节集中整理参数配置最常见的报错每一条都是我在实际项目里遇到过的按排查路径写出来。“Error evaluating expression : Source text : $P{deptId}”这种报错通常是因为参数没有声明或者声明了但类型写错。先检查模板的Parameters节点确认参数名完全一致再检查表达式语法比如整型参数不能用字符串函数。“Parameter xxx not found”翻译过来就是模板里$P{xxx}引用了不存在的参数。iReport预览时偶尔不会立刻报但在Java运行时必报。解决方式是去Parameters节点补建同名参数注意大小写。“SQL grammar error”或数据库报“ORA-00904: invalid identifier”通常是SQL里参数引用写成了${xxx}。${}是JasperReports的变量语法用于文本字段拼接SQL查询里应该用$P{xxx}。另一个可能是把参数当成了列名比如select $P{colName} from table这种用法引擎支持但需要JDBC类型匹配不支持时会报identifier错误。“Jun. 9, 2024 12:00:00 AM”日期时间显示成英文格式眼熟吧。这不是乱码是默认DateFormat没设置。检查Locale和文本字段的Pattern别急着改代码。子报表参数嵌套死循环两个子报表相互引用对方的参数填充时直接卡死。这种要在设计上避免循环依赖别指望引擎能帮你绕出来。7.2 用日志和表达式快速定位参数问题排查参数问题最朴素但有效的办法是在模板里临时添加一个文本字段表达式写成$P{paramName}.toString()直接预览看值。这比改Java日志快不用重新部署整个应用。如果某个表达式报null就把它先替换成固定字符串再一点一点缩小排查范围。另一个习惯是开启动态编译日志把日志级别调到DEBUGJasperReports引擎会打印填充阶段每一步的参数Map内容。线上环境不建议长期开着但排查问题时确实非常管用。7.3 参数顺序引发的隐藏坑前面提过参数顺序影响编译缓存这里补充一个更隐蔽的坑当子报表的Dataset被多次执行时比如在Detail区域每行调用一次子报表如果子报表模板里的参数序号和父报表传入顺序不稳定可能导致子报表填充时拿到错位的参数值。这个问题在JasperReports老版本5.x以前偶发升级版本后基本消失。我的建议是子报表参数个数控制在5个以内参数Map的put顺序和模板声明顺序保持一致最大程度避开历史版本的怪问题。8. 从iReport到Jaspersoft Studio的参数兼容要点虽然标题是iReport教程但新项目基本都在用Jaspersoft Studio了。如果你还在折腾iReport大概率是在维护存量项目。这里列几个参数配置在两边迁移时的差异iReport的jrxml文件可以直接导入Jaspersoft Studio参数声明几乎零改动表达式语法$P{}、$F{}、$V{}在两边保持一致Jaspersoft Studio里数据集参数面板把Default Value Expression拆到了单独tab别找不到新版引擎对内置参数的默认值处理方式略有变化比如REPORT_MAX_COUNT在新版默认不生效需要显式传值迁移时最稳的做法是先在Jaspersoft Studio里打开旧模板做一次编译预览重点关注涉及日期的参数绑定和Locale相关表达式。我迁移过一个包含30多个参数的订单报表90%直接通过剩下的10%全卡在日期类型从java.util.Date换成java.sql.Timestamp的兼容处理上。9. 一些实操中的个人习惯参数配置这件事说到底是报表与外部环境协作方式的统一约定。我在多个项目里反复体会到参数设计的好坏直接影响报表的可维护性参数命名清晰、类型严格、默认值兜底、空值可控的模板接手的同事轻松参数到处是Object、命名随意、SQL里靠隐式转换的模板改一次痛一次。有几个小习惯值得长期坚持参数Map的key统一维护成常量类模板内每个参数都认真写DescriptionSQL查询里对日期参数显式CAST子报表传参时命名和父报表保持一致调试优先用预览和局部表达式少改Java代码。这些看起来都是小事但在几十张报表的平台里能省下大量排查时间。另外关于iReport和Jaspersoft Studio到底该用哪个我的观点是新项目直接上Studio旧iReport项目能做就做迁移。迁移前先把参数清单整理出来——参数就是报表的灵魂理清了参数迁移就等于成功了一半。

相关新闻

marketingskills 实战:用 AI Agent 打通 SEO 与 CRO 自动化工作流

marketingskills 实战:用 AI Agent 打通 SEO 与 CRO 自动化工作流

1. 从“marketingskills”说起:一个被低估的营销自动化切口第一次看到marketingskills这个词,是在一个做独立站的朋友群里。有人甩了个链接,说“这玩意儿把 SEO 和 CRO 的活儿全塞进 AI agent 里了”。我当时的第一反应是:又是一个…

2026/10/7 12:35:35 阅读更多 →
日系扁平插画动态边缘光管线:让轮廓光变成会动的色块

日系扁平插画动态边缘光管线:让轮廓光变成会动的色块

日系扁平风格插画,和边缘光,这两个词放在一起,在过去很多年都是“水火不容”的。做日系的人觉得边缘光是厚涂和赛博朋克的专利,往平涂里一放,整个画面立刻变得油腻、廉价,那股清爽干净的劲儿全没了。我有段…

2026/10/7 12:34:34 阅读更多 →
Flutter钱包SDK鸿蒙适配:ed25519_hd_key踩坑与解决

Flutter钱包SDK鸿蒙适配:ed25519_hd_key踩坑与解决

上个月我把公司的钱包SDK往鸿蒙适配时,第一个挡路的组件不是UI,不是状态管理,而是ed25519_hd_key这个平时几乎没人注意的加密依赖。它在Flutter日志里安安静静地报了一串Unhandled Exception,一查,是SecureRandom初始化…

2026/10/7 12:34:34 阅读更多 →

最新新闻

Agent-Reach:一类轻量级CLI工具的设计与实现

Agent-Reach:一类轻量级CLI工具的设计与实现

1. Agent-Reach 是什么:一个被误读的 CLI 工具命名陷阱“Agent-Reach”这个名称在当前技术社区里,正经历一场典型的语义漂移——它既不是某个广为人知的开源项目主仓库名,也不是主流模型厂商发布的官方 SDK 名称,更不是 PyPI 上注…

2026/10/7 13:05:08 阅读更多 →
Java多人联机飞机游戏:服务端权威模型与网络同步实战

Java多人联机飞机游戏:服务端权威模型与网络同步实战

简介:基于JAVA语言开发的多人联机飞机游戏客户端与服务器端设计源码包,面向Java游戏开发学习者和网络编程爱好者,帮助理解多人实时交互游戏的客户端/服务器架构与实现流程。项目包含客户端与服务器端两部分,客户端负责界面渲染、用…

2026/10/7 13:05:08 阅读更多 →
GroupMamba实战:分组状态空间模型在图像分类中的高效训练与部署

GroupMamba实战:分组状态空间模型在图像分类中的高效训练与部署

简介:这套面向图像分类与状态空间模型实战的资源包,以GroupMamba为核心,旨在为计算机视觉算法工程师和研究者提供一套可参考的工程实现,缓解SSM扩展到视觉任务时常见的大模型不稳定、显存效率低等问题。压缩包内共两千个文件&…

2026/10/7 13:05:08 阅读更多 →
ABAP CDS Association 实战,从 Travel 与 Customer 关系建模到路径导航

ABAP CDS Association 实战,从 Travel 与 Customer 关系建模到路径导航

在 ABAP CDS 数据模型里看到 _Customer、_SalesOrder、_Supplier、_Product 这类以下划线开头的名称时,背后通常不是普通字段,而是一条 Association。 很多刚接触 CDS 的开发人员会把 Association 理解成一种写法更漂亮的 SQL Join。这样的理解只能解释一部分现象,却很难解…

2026/10/7 13:05:08 阅读更多 →
MOS管好坏判断的五大物理本质诀窍

MOS管好坏判断的五大物理本质诀窍

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

2026/10/7 13:05:08 阅读更多 →
GEO实战:让AI在同城搜索中主动推荐你的本地生意

GEO实战:让AI在同城搜索中主动推荐你的本地生意

1. 同城流量新入口:AI回答里的那个"推荐位"正在决定生意去留在洛阳做本地品牌推广这几年,我遇到最明显的一个变化是:客户开口问的东西不一样了。以前上来就问抖音怎么投、百度排名怎么上,现在越来越多的老板会拿着手机问…

2026/10/7 13:04:07 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

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

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

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

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

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

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 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/6 8:21:32 阅读更多 →
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/7 11:43:46 阅读更多 →
黑夜航拍船只数据集训练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/6 1:18:13 阅读更多 →