当前位置: 首页 > 编程语言 > C#

使用iTextSharp获取复选框的导出值Share

时间:2023-04-10 11:56:07 C#

使用iTextSharp获取复选框的导出值我希望能够确定复选框的“导出值”来自代码隐藏,以便确定在应该检查时发送到该复选框的值。我过去处理过的大多数文档的每个复选框都具有相同的导出值,但我正在处理的文档因复选框而异。我可以遍历所有文本框并使它们保持一致,但如果我可以在运行时确定这些复选框的导出值并相应地设置它们,将来会节省很多时间。提前致谢!我尝试在C#中实现下面的解决方案,最后得到以下代码:publicstringGetCheckBoxExportValue(AcroFieldspdfDocument,stringcheckBoxFieldName){如果(item.values.Count>0){PdfDictionaryvalueDict=item.GetValue(0);PdfDictionaryappearanceDict=valueDict.GetAsDict(PdfName.AP);//如果有外观指令,一个键将是“关闭”,另一个键将是导出值……应该只有两个。if(appearanceDict!=null){foreach(PdfNamecurKeyinappearanceDict.Keys){if(!PdfName.OFF.Equals(curKey)){returncurKey.ToString();//字符串将有一个前导的'/'字符}}}//如果这不起作用,则可能有一个/AS键,其值是一个名称,//导出值,同样带有一个前导的'/'PdfNamecurVal=valueDict.GetAsName(PdfName.AS);if(curVal!=null){返回curVal.ToString();}}//如果你走到这一步就返回nullreturnnull;}这只是每次返回“/D”。我不确定C#中的方法是否需要不同,或者我是否只是遗漏了一些东西。好的,您需要检查低级PDF对象的适当值。您可以在PDF参考(第12章:交互式函数,第7节:交互式表单)中查找所述值。具体来说(和Java):AcroFields.Itemitem=acroFields.getFieldItem(fldName);PdfDictionaryvalueDict=item.getValue(0);PdfDictionaryappearanceDict=valueDict.getAsDict(PdfName.AP);if(appearanceDict!=null){PdfDictionarynormalAppearances=appearanceDict.getAsDict(PdfName.N);///D用于“向下”外观。//如果有正常外观,一个键将为“Off”,另一个键为导出值。..应该只有两个。if(normalAppearances!=null){设置键=normalAppearances.getKeys();for(PdfNamecurKey:keys){if(!PdfName.OFF.equals(curKey)){返回curKey.toString();//字符串将有一个前导的'/'字符}}}}//如果这不起作用,则可能有一个/AS键,其值是一个带有//导出值的名称,同样带有一个前导的'/'PdfNamecurVal=valueDict.getAsName(PdfName.AS);if(curVal!=null){返回curVal.toString();像这样的东西。通常的“我只是在编辑框中写了这个”规则适用,但这应该没问题。我已经编写了大量令人沮丧的低级iText代码。我发现设置复选框的最佳方法是:voidSetCB(AcroFieldsfields,stringF){try{fields.SetField(F,fields.GetFieldItem(F).GetValue(0).GetAsDict(PdfName.AP)GetAsDict(PdfName.N).Keys.Single().ToString().TrimStart('/'));}catch{}}例如:PdfReaderreader=newPdfReader("c:\qqq\fl100Y2.pdf");//formFile);使用(PdfStamperstamper=newPdfStamper(reader,newFileStream("c:\qqq\fl100Ynew.pdf",FileMode.Create))){AcroFieldsfields=stamper.AcroFields;boolset=fields.SetFieldProperty("FillText156","textsize",10.0f,null);SetCB(字段,"CheckBox24");SetCB(字段,"CheckBox24by");领域。SetField("FillText156","JohnDoe");//展平表单字段并关闭文档stamper.FormFlattening=true;压模。关闭();这是我用来使它基于其他方法工作的最终方法:publicstringGetCheckBoxExportValue(AcroFieldsfields,stringcbFieldName)if(item.values.Count>0){PdfDictionaryvalueDict=item.values[0]asPdfDict离子;PdfDictionaryappDict=valueDict.GetAsDict(PdfName.AP);if(appDict!=null){PdfDictionarynormalApp=appDict.GetAsDict(PdfName.N);foreach(PdfNamecurKeyinnormalApp.Keys){if(!PdfName.OFF.Equals(curKey)){//字符串将有一个前导'/'字符returncurKey.ToString();}}}PdfNamecurVal=valueDict.GetAsName(PdfName.AS);if(curVal!=null){returncurVal.ToString();}}返回空值;我无法得到答案Mark为我工作,因为appearanceDict始终为null这是我编写的一种方法,适用于我正在处理的表单上的CheckBox和RadioButton控件。以上就是C#学习教程:使用iTextSharp获取复选框的导出值。如果对你有用,需要进一步了解C#学习教程,希望你多加关注—privatestaticstringGetAnswerValue(AcroFields.Itemf,inti){varwidg=f.GetWidget(i);如果(widg==null)返回null;varap=widg.GetAsDict(PdfName.AP);如果(ap==null)返回null;//PdfName.D似乎也有效vard=ap.GetAsDict(PdfName.N);如果(d==null)返回null;vare=d.Keys.FirstOrDefault(n=>!n.Equals(PdfName.OFF));如果(e==null)返回null;返回e.ToString().Substring(1);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: