2015-07-10 41 views
0

我正在使用iText來分析PDF表單並允許用戶更改字段名和其他現有字段。 我可以通過調用AcroFields上的getAppearanceStates(fieldname)來顯示覆選框的可能值。但我找不到改變外觀狀態的方法。iText更改複選框的外觀狀態

有沒有人做過這個或知道如何做到這一點?

例如:我有一個複選框字段的名稱爲「複選框」,外觀狀態爲「是」。我希望它「開啓」。

acroFields.setField("checkbox", "on", "on") 

沒有影響,並且設置屬性似乎也不正確。

+1

你試過'setField()'還是我誤解了這個問題? –

+0

我做了,看我編輯的問題 – user5103374

回答

0

我能用PdfDictionary解決它。我的解決方案如下所示:

PdfDictionary appearanceDictionary = (PdfDictionary) acroFields.getFieldItem("checkbox").getWidget(0).get(PdfName.AP); 
PdfDictionary appearanceStateDictionary = (PdfDictionary) appearanceDictionary.get(PdfName.N); 
PdfName oldAppearanceState = new PdfName("yes); 
PdfName newAppearanceState = new PdfName("on"); 

PdfObject referenceOnAppearanceState = appearanceStateDictionary.get(oldAppearanceState); 
appearanceStateDictionary.remove(oldAppearanceState); 
appearanceStateDictionary.put(newAppearanceState, referenceOnAppearanceState); 

我不太清楚躲到參考背後referenceOnAppearanceState但我不想改變它,我只是想改變文本被用來設置複選框檢查,所以我刪除它,並添加了另一個PdfName

希望它可以幫助別人。

0

我是否正確理解你想要設置appearache狀態?外觀狀態對應於/ AS鍵,其值爲/ Off或/ Yes。您使用的值必須對應於您爲您定義的外觀字典複選框,而您可以省略/ Off外觀。爲開/關外觀名稱是修復,但你可以(至少到PDF 1.7)定義你自己/開(或/是)外觀...

要設置與iText的外觀狀態:

Item item = acroFields.getFieldItem("checkbox"); 
PdfDictionary dict = item.getWidget(0); 
dict.put(PdfName.AS, PdfName.Off); 
//dict.put(PdfName.AS, new PdfName("Yes")); 
+0

謝謝這幾乎是我所做的修復它 – user5103374

相關問題