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

修改HelpNDoc脚本:从帮助主题定位库项并补全替代文本

HelpNDoc脚本:自动填充图片/图片映射的默认替代文本

需求回顾

已实现功能:

  • 遍历所有库项
  • 筛选出图片(类型1)和图片映射(类型9)
  • 提取并更新默认内边距:若为0则设为5

待补充功能:

  • 当库项的默认替代文本为空时,遍历所有帮助主题查找该库项的使用实例
  • 提取实例中第一个非空的替代文本,设置为该库项的默认值
  • 若遍历完所有主题仍未找到非空替代文本,输出该库项名称

修正并完善后的脚本

var
  aList: THndLibraryItemsInfoArray;
  nCnt: Integer;
  aDefaultAltText: string;
  aDefaultPadding: Integer;
  // 新增变量用于遍历主题和元素
  aTopics: THndTopicsInfoArray;
  nTopicIdx: Integer;
  aElements: THndTopicElementsInfoArray;
  nElemIdx: Integer;
  bFoundAltText: Boolean;
begin
  // 获取所有库项
  aList := HndLibraryItems.GetItemList([]);
  
  // 遍历每个库项
  for nCnt := 0 to Length(aList) - 1 do
  begin
    // 筛选图片(类型1)和图片映射(类型9)
    if (HndLibraryItems.GetItemKind(aList[nCnt].id) = 1) or (HndLibraryItems.GetItemKind(aList[nCnt].id) = 9) then
    begin
      // 获取默认替代文本
      aDefaultAltText := HndLibraryItemsMeta.GetItemMetaStringValue(aList[nCnt].id, 'defaultalttext', '');

      // 当默认替代文本为空时,查找使用实例
      if aDefaultAltText = '' then
      begin
        bFoundAltText := False;
        // 获取所有帮助主题
        aTopics := HndTopics.GetTopicList([]);
        
        // 遍历每个主题
        for nTopicIdx := 0 to Length(aTopics) - 1 do
        begin
          // 获取当前主题下的所有元素
          aElements := HndTopicElements.GetElementList(aTopics[nTopicIdx].Id);
          
          // 遍历主题内的每个元素
          for nElemIdx := 0 to Length(aElements) - 1 do
          begin
            // 判断元素是否引用了当前库项
            if (aElements[nElemIdx].LibraryItemId = aList[nCnt].id) then
            begin
              // 提取该元素的替代文本
              var elemAltText := HndTopicElements.GetElementPropertyString(aElements[nElemIdx].Id, 'alt', '');
              if elemAltText <> '' then
              begin
                // 设置为库项的默认替代文本
                HndLibraryItemsMeta.SetItemMetaStringValue(aList[nCnt].id, 'defaultalttext', elemAltText);
                bFoundAltText := True;
                Break; // 找到第一个非空值后退出元素循环
              end;
            end;
          end;
          
          if bFoundAltText then
            Break; // 找到后退出主题循环
        end;
        
        // 未找到非空替代文本时输出库项名称
        if not bFoundAltText then
          Writeln('未找到非空替代文本的库项:' + aList[nCnt].Name);
      end;

      // 获取并更新默认内边距
      aDefaultPadding := HndLibraryItemsMeta.GetItemMetaIntValue(aList[nCnt].id, 'defaultpadding', 0);
      if aDefaultPadding = 0 then
        HndLibraryItemsMeta.SetItemMetaIntValue(aList[nCnt].id, 'defaultpadding', 5);
    end;
  end;
end.

关键逻辑说明

  1. 语法修正:调整原代码中不符合Pascal规范的var声明位置,统一移至代码块开头。
  2. 主题与元素遍历:
    • 通过HndTopics.GetTopicList([])获取所有帮助主题
    • 对每个主题,调用HndTopicElements.GetElementList()获取其下所有元素
  3. 库项引用匹配:通过元素的LibraryItemId与当前库项ID比对,确认是否为目标库项的使用实例
  4. 替代文本提取与更新:找到第一个非空的元素替代文本后,立即更新库项默认值并终止遍历,提升执行效率
  5. 无匹配时的输出:通过Writeln输出无有效替代文本的库项名称,方便后续人工处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:00:53