如何在jsPDF中使用UTF-8及特殊字符(如下标)
jsPDF 实现下标文本(如H₂SO₄)的方法
jsPDF完全支持生成带下标文本的PDF,下面是两种实用的实现方式:
方法1:使用Unicode下标字符
数字的下标对应固定的Unicode字符(比如2对应₂,4对应₄),可以直接替换文本中的数字为对应下标字符,再用常规的text方法输出:
const doc = new jsPDF(); // 直接写入带Unicode下标的文本 doc.text('H₂SO₄', 10, 10); doc.save('chemical-formula.pdf');
如果需要批量处理文本中的数字下标,可编写简单的转换函数:
// 普通数字转Unicode下标的映射 const subscriptMap = { '0': '₀', '1': '₁', '2': '₂', '3': '₃', '4': '₄', '5': '₅', '6': '₆', '7': '₇', '8': '₈', '9': '₉' }; function convertToSubscript(text) { return text.replace(/[0-9]/g, match => subscriptMap[match] || match); } // 使用示例 const doc = new jsPDF(); const originalText = 'H2SO4'; const subscriptText = convertToSubscript(originalText); doc.text(subscriptText, 10, 10); doc.save('formula.pdf');
方法2:结合HTML的<sub>标签渲染
jsPDF v2.0及以上版本支持html方法,可直接渲染包含<sub>标签的HTML内容,适合处理复杂格式的文本:
const doc = new jsPDF(); const htmlContent = '<p>H<sub>2</sub>SO<sub>4</sub></p>'; doc.html(htmlContent, { callback: (doc) => doc.save('html-subscript.pdf'), x: 10, y: 10 });
注意事项
- Unicode下标方法兼容性强,无需额外依赖,适合简单的下标需求;
- HTML渲染方法更灵活,支持多种格式(如上标、粗体等),但需确保使用的jsPDF版本支持
html功能。
内容的提问来源于stack exchange,提问作者Atul Sureka




