saveAsPDF函数CamelCase转PDF标题失效,求替代实现方案
解决CamelCase格式ID转标题的问题
问题分析
你之前尝试用ID.replace(/([A-Z])/g, ' $1').trim().capitalize()把CamelCase格式的ID(比如writtenLikeThis)转换成带空格的友好标题,但突然报错"ID.replace(...).trim(...).capitalize is not a function"——这是因为JavaScript字符串并没有内置的capitalize()方法,这就是代码失效的核心原因。
可行解决方案
你已经找到了有效的修复方案,这里拆解下这个方案的逻辑,帮你更清楚地理解:
更新后的函数通过正则匹配+回调处理,完美实现了CamelCase到Written Like This格式的转换,完整工作代码如下:
function saveAsPDF(ID) { let canvas = document.querySelector('#' + ID); // 生成canvas图片 let canvasImg = canvas.toDataURL("image/png", 1.0); // 初始化PDF文档 let doc = new jsPDF('landscape'); doc.setFontSize(12); // 核心转换逻辑:将CamelCase ID转为带空格的标题格式 doc.text(15, 15, ID.replace(/^[a-z]|[A-Z]/g, function(v, i) { return i === 0 ? v.toUpperCase() : " " + v.toLowerCase()})); doc.addImage(canvasImg, 'PNG', 10, 20, 280, 150 ); doc.save( ID +'.pdf'); }
转换逻辑细节
正则/^[a-z]|[A-Z]/g会匹配两种字符:
^[a-z]:字符串开头的小写字母[A-Z]:所有大写字母
然后通过回调函数针对性处理:
- 若匹配的是第一个字符(
i === 0),直接转为大写 - 若匹配的是大写字母,先添加空格,再转为小写,最终就把
writtenLikeThis转换成了Written Like This
如果需要Camel case(仅首字母大写,其余单词小写)的格式,只需要微调回调里的处理逻辑即可。
内容的提问来源于stack exchange,提问作者codingWithNikki
相关产品推荐
相关产品推荐

