You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript替代font-feature-settings: "case" 1?打印PDF兼容问题

解决方案:用JavaScript实现文本转大写替代CSS字体特性

方法1:永久修改DOM文本为大写

如果不需要保留原文本的小写状态,可直接遍历目标元素将文本转为大写:

// 选择所有需要转大写的元素(示例:带.capitalize-text类的元素)
const targetElements = document.querySelectorAll('.capitalize-text');
targetElements.forEach(element => {
  element.textContent = element.textContent.toUpperCase();
});

这种方式彻底替换文本内容,打印生成的PDF在Adobe Illustrator中打开不会出现字体特性引发的乱码问题。

方法2:打印前临时转换,打印后恢复(不影响页面显示)

若需保留页面原有显示状态,仅在打印时转大写,可结合打印事件流程处理:

// 存储原文本,用于打印后恢复
const originalContentMap = new Map();

// 打印前预处理文本
function setupPrintMode() {
  const targetElements = document.querySelectorAll('.capitalize-text');
  targetElements.forEach(el => {
    originalContentMap.set(el, el.textContent);
    el.textContent = el.textContent.toUpperCase();
  });
}

// 打印后恢复原文本
function resetPrintMode() {
  originalContentMap.forEach((originalText, el) => {
    el.textContent = originalText;
  });
  originalContentMap.clear();
}

// 绑定打印按钮点击事件
document.querySelector('#print-button').addEventListener('click', () => {
  setupPrintMode();
  // 延迟打印确保DOM更新完成
  setTimeout(() => {
    window.print();
    // 打印对话框关闭后恢复页面状态
    resetPrintMode();
  }, 100);
});

此方案仅在打印流程中临时修改文本,不影响用户日常浏览,同时规避了CSS font-feature-settings 的兼容性问题。

备选方案:用CSS text-transform: uppercase 替代

如果不想引入JavaScript,可尝试使用兼容性更好的CSS属性替代原字体特性:

.capitalize-text {
  text-transform: uppercase;
  /* 移除原有的 font-feature-settings: "case" 1 */
}

该属性的渲染逻辑更通用,多数情况下不会出现Adobe Illustrator打开乱码的问题,建议优先测试。

内容的提问来源于stack exchange,提问作者Y U K I M U R A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:35:04