2013-10-31 22 views
10

Próbowałem tak wiele różnych sposobów, ale nie mogę uzyskać pole wyboru do sprawdzenia! Oto, co próbowałem:Sprawdzanie pdf checkbox z itextsharp

var reader = new iTextSharp.text.pdf.PdfReader(originalFormLocation); 
using (var stamper = new iTextSharp.text.pdf.PdfStamper(reader,ms)) { 
    var formFields = stamper.AcroFields; 
    formFields.SetField("IsNo", "1"); 
    formFields.SetField("IsNo", "true"); 
    formFields.SetField("IsNo", "On"); 
} 

Żadna z nich nie działa. Jakieś pomysły?

+0

Czy jesteś pewien, że pole wyboru jest naprawdę nazwie „isno”? – ovaltein

Odpowiedz

12

Nie należy "odgadnąć" możliwych wartości. Musisz użyć wartości przechowywanej w pliku PDF. Spróbuj przykład CheckBoxValues znaleźć te możliwe wartości:

public String getCheckboxValue(String src, String name) throws IOException { 
    PdfReader reader = new PdfReader(SRC); 
    AcroFields fields = reader.getAcroFields(); 
    // CP_1 is the name of a check box field 
    String[] values = fields.getAppearanceStates("IsNo"); 
    StringBuffer sb = new StringBuffer(); 
    for (String value : values) { 
     sb.append(value); 
     sb.append('\n'); 
    } 
    return sb.toString(); 
} 

Albo spojrzeć w PDF za pomocą RUPS. Przejdź do adnotacji widgetu i poszukaj normalnego wyglądu (/N) (AP). W moim przykładzie są /Off i /Yes:

screen shot

+0

Jakie jest dokładne znaczenie tej tablicy AP? Pierwsza wartość ma być zawsze używana dla stanu "odznacz", a druga dla "sprawdzenia"? Obecnie polegam na tym założeniu i działa dobrze nawet w przypadku plików PDF, ale chciałbym się upewnić ... –

+0

Wartość 'Off' powinna zawsze odzwierciedlać stan * wyłączony *. Kolejność nie ma znaczenia. Nie powinieneś więc liczyć na to, że pierwszy stan będzie stanem "odznacz". –