CKEditor使用单位调整尺寸问题:jQuery按钮设置A4/A5尺寸失效
解决CKEditor使用单位(cm/mm/英寸)调用resize无效的问题
这个问题我之前也碰到过!CKEditor的resize()方法其实并不直接支持带单位的字符串参数(比如'21cm'),它只认纯数值的像素值——这就是你用带单位的写法没效果也不报错的核心原因。
解决思路:将单位转换为像素值
浏览器默认采用96DPI的像素密度(即1英寸=96像素),我们可以通过换算公式把厘米、毫米、英寸转换成对应的像素值:
- 1英寸 = 96px
- 1厘米 = 96 / 2.54 ≈ 37.795px
- 1毫米 = 96 / 25.4 ≈ 3.7795px
具体实现代码
1. 直接计算对应像素值(以A4、A5为例)
A4标准尺寸是21cm×29.7cm,转换成像素正好是你一开始能用的793×1122;A5是14.8cm×21cm,对应的像素约为560×793。直接用数值调用即可:
var editor = CKEDITOR.instances['documentformat-header']; // 设置为A4尺寸 editor.resize(793, 1122, true); // 设置为A5尺寸 editor.resize(560, 793, true);
2. 封装转换函数(方便复用)
如果需要频繁切换不同单位的尺寸,可以封装简单的转换函数,让代码更易读:
// 厘米转像素 function cmToPx(cm) { return Math.round(cm * 96 / 2.54); } // 英寸转像素 function inchToPx(inch) { return Math.round(inch * 96); } // 使用示例 var editor = CKEDITOR.instances['documentformat-header']; // 设置A4(21cm × 29.7cm) editor.resize(cmToPx(21), cmToPx(29.7), true); // 设置A5(14.8cm × 21cm) // editor.resize(cmToPx(14.8), cmToPx(21), true);
注意事项
- 如果你需要更精确的像素值,可以去掉
Math.round()直接保留小数,但CKEditor一般会自动处理为整数像素。 - 不同版本的CKEditor
resize()方法参数逻辑一致,这个方案适用于绝大多数主流版本。
内容的提问来源于stack exchange,提问作者CShin
相关产品推荐
相关产品推荐

