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

使用iText(C#)创建的PDF只读复选框被NVDA识别为不可用的解决问询

解决iText创建只读复选框时NVDA朗读“unavailable”的问题

NVDA提示“unavailable”通常是因为表单域被识别为**禁用(Disabled)**状态,但你仅需要只读(ReadOnly)属性。问题根源在于iText的SetReadOnly(true)可能在底层隐含影响了域的可用状态标记,导致NVDA误判。

修改代码方案

显式设置只读标志并确保域未被禁用,同时调整辅助属性让NVDA正确识别:

var rect = new Rectangle(left, top, _size + 1, _size + 1);
var checkBox = PdfFormField.CreateCheckBox(drawContext.GetDocument(), rect, _name, "Off");
checkBox.SetCheckType(PdfFormField.TYPE_SQUARE)
        .SetBorderColor(ColorConstants.BLACK)
        .SetBorderWidth(2)
        .SetFieldFlags(PdfFormField.FF_READ_ONLY) // 显式设置只读标志位
        .SetDisabled(false); // 明确清除禁用标记

// 可选:自定义屏幕阅读器朗读的名称,优化体验
checkBox.SetAlternateName("复选框");

PdfAcroForm.GetAcroForm(drawContext.GetDocument(), true).AddField(checkBox);

原理说明

  • SetFieldFlags(PdfFormField.FF_READ_ONLY):直接操作PDF表单域的只读标志位,替代SetReadOnly(true),避免潜在的状态混淆。
  • SetDisabled(false):强制清除禁用标记,让NVDA识别域为“可用但只读”,而非“不可用”。
  • SetAlternateName:可选配置,自定义朗读文本,进一步修正NVDA的默认提示逻辑。

如果仍未解决,可尝试清空表单域的附加动作字典,移除可能触发误判的属性:

// 添加到checkBox配置链末尾
if (checkBox.GetPdfObject().Get(PdfName.AA) == null)
{
    checkBox.Put(PdfName.AA, new PdfDictionary());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:41:09