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

如何让Text Adornment信息存入IDML?InDesign SDK技术问询

InDesign SDK TextAdornment的IDML持久化解决方案

一、如何让自定义TextAdornment信息存入IDML

BasicTextAdornment示例未实现IDML持久化能力,需通过以下步骤补充:

  1. 实现IPersist接口
    自定义TextAdornment类必须继承并实现IPersist接口,重写Write和Read方法,完成自定义属性的序列化与反序列化:
class MyCustomTextAdornment : public TextAdornment, public IPersist {
    // ... 类的其他核心逻辑实现
    void Write(IDOMXMLWriter* writer, IDocument* doc) const override {
        // 将自定义属性写入XML节点,例如下划线状态、颜色配置
        writer->WriteAttribute("CustomUnderline", kTrue);
        writer->WriteAttribute("UnderlineColor", "Color/CustomRed");
    }

    void Read(IDOMXMLReader* reader, IDocument* doc) override {
        // 从XML节点读取属性并恢复到对象
        bool isUnderlined = reader->GetAttributeAsBoolean("CustomUnderline", kFalse);
        if (isUnderlined) {
            // 还原下划线样式的逻辑
        }
    }
};
  1. 注册持久化类型
    在插件初始化阶段,将自定义TextAdornment类型注册到InDesign的IDML持久化系统,确保导出流程能识别并处理该类型:
// 关联类ID与对象创建方法,注册持久化处理器
PersistManager::AddPersistHandler(kMyCustomTextAdornmentClassID, MyCustomTextAdornment::Create);
  1. 绑定文本流导出链路
    TextAdornment依附于文本流存在,需确保IDML导出文本内容时,自定义装饰会被遍历并触发Write方法。可通过监听ITextModel的导出事件,或确保TextAdornment正确关联到目标字符/段落范围,纳入核心文本处理流程。

二、为什么kTARubyXXXBoss这类TextAdornment能被IDML持久化

kTARubyXXXBoss属于InDesign内置文本装饰特性,具备官方完整的持久化支持:

  • Adobe已在IDML规范中定义了Ruby装饰对应的XML节点格式,导出时会自动生成符合规范的标签;
  • 官方实现了Ruby类TextAdornment的IPersist接口,在IDML导出/导入时自动完成属性的序列化与反序列化;
  • Ruby装饰与文本流的绑定逻辑已集成到InDesign核心文本处理链路,导出IDML时会被自动纳入文本节点的处理流程,无需额外配置。

补充说明

你提到的下划线属于字符样式属性,直接存储在CharacterStyleRange节点中;而TextAdornment是独立的文本附加对象,需通过IPersist接口将自定义属性写入对应的XML节点(可扩展CharacterStyleRange或新增自定义节点),才能在IDML中保留并还原。

内容的提问来源于stack exchange,提问作者huaraoteng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 15:07:36