itextsharp合并pdf上的可访问性问题



我正在尝试使用itextsharp库(v5.1.13.2(合并一些字段,并用屏幕阅读器进行测试。pdf已标记,但当我尝试使用NVDA读取表单时,他无法识别合并的字段,只能识别pdf中的静态文本。pdf是使用Adobe acrobat Livecycle Designer创建的;PDF结构";正确地

任何帮助都将不胜感激。

enter code here
Dim OutputFileName As String = "" 
Dim OutputFileFullPath As String = ""
Dim FileName As String = "C:Untitled4.pdf"
Using pdfRd = New iTextSharp.text.pdf.PdfReader(filename:=FileName)
OutputFileName = String.Format("{0}.pdf", Guid.NewGuid.ToString("N"))
OutputFileFullPath = System.IO.Path.Combine("C:", OutputFileName)
Using os = New FileStream(OutputFileFullPath, FileMode.Create)            
Using stamp = New iTextSharp.text.pdf.PdfStamper(pdfRd, os)
Dim fields As iTextSharp.text.pdf.AcroFields = stamp.AcroFields                    
Dim Prefix As String = "topmostSubform[0].Page1[0]."
fields.SetField(Prefix & "MemberFullName[0]", "ישראל ישראלי")                                                                                                                                     
stamp.FormFlattening = true                   
stamp.Close()
End Using
os.Close()
End Using
End Using

这是一个老问题,但您的标签被删除的原因是因为formflating=true。

我不知道这种行为是否会随着当前iText#库而改变。但是,根据您试图实现的目标,您可能需要考虑更新正在操作的表单字段上的某些读取/编辑标志。

我目前正在调查一个类似的问题,目前正在通过创建一个扩展方法来调用SetField并调整属性来处理以下属性:

public static class ExtensionMethods
{
public static bool SetFieldValueReadOnly(this AcroFields af, string name, string value)
{
// Add exception handler so return false is supported and usable
af.SetField(name, value);
af.SetFieldProperty(name, "setfflags", PdfFormField.FF_READ_ONLY, null);
return true;
}
}

根据屏幕阅读器(以及可能的设置(,您可能会得到不同的值,如";编辑+只读<字段中的值";被说出或";文本";是口语。

我不喜欢这两个选项,但关键是表单扁平化设置为false,它保留了您的可访问性标志,但暴露了您正在填写的表单字段。我不知道这是否会让您找到一个可接受的解决方案,但至少这应该为进一步的实验和评论提供一个起点。

最新更新