2013-10-31 43 views
10

Ho provato tanti modi diversi, ma non riesco a ottenere la casella di controllo da controllare! Ecco cosa ho provato:Controllo casella di controllo pdf con 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"); 
} 

Nessuno di essi funziona. Qualche idea?

+0

Sei sicuro che il campo casella di controllo è davvero chiamato "isno"? – ovaltein

risposta

12

Non si deve "indovinare" per i valori possibili. È necessario utilizzare un valore archiviato nel PDF. Provate l'esempio CheckBoxValues per trovare questi valori possibili:

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(); 
} 

Oppure prendere uno sguardo al PDF utilizzando RUPS. Vai all'annotazione del widget e cerca gli stati normali (/N) (AP). Nel mio esempio sono /Off e /Yes:

screen shot

+0

Qual è il significato preciso di quell'array AP? Il primo valore deve sempre essere utilizzato per lo stato "deseleziona" e il secondo per "controllare"? Attualmente mi baso su tale presunzione e funziona bene anche per i PDF dispari, ma mi piacerebbe essere sicuro ... –

+0

Il valore 'Off' dovrebbe sempre riflettere lo * stato off *. L'ordine non ha importanza. Quindi non dovresti contare sul 1 ° stato per essere lo stato "deseleziona". –

Problemi correlati