Hello all,
I hacked my way around it. Used my old software to save the pdf with security
removed.
Then did the explorer save to adobe trick.
I would like to make a suggested code change in the PDChoiceField class if I
may(see TODO):
public void setValue(String optionValue) throws IOException
{
//TODO - in the instance where an option list doesn't have a default
option
//We need to allow for the case where no selection was made.
//When reading a blank form, the value returned to us is null. The
current code
//does not handle the possibility of a choice field not being set.
if(optionValue==null||optionValue.equalsIgnoreCase(""))
{
super.setValue("");
return;
}
int indexSelected = -1;
COSArray options = (COSArray)
getDictionary().getDictionaryObject(COSName.OPT);
int fieldFlags = getFieldFlags();
boolean isEditable = (FLAG_COMBO & fieldFlags) != 0 && (FLAG_EDIT &
fieldFlags) != 0;
if (options.size() == 0 && !isEditable)
{
throw new IOException("Error: You cannot set a value for a choice
field if there are no options.");
}
else
{
// YXJ: Changed the order of the loops. Acrobat produces PDF's
// where sometimes there is 1 string and the rest arrays.
// This code works either way.
for (int i = 0; i < options.size() && indexSelected == -1; i++)
{
COSBase option = options.getObject(i);
if (option instanceof COSArray)
{
COSArray keyValuePair = (COSArray) option;
COSString key = (COSString) keyValuePair.getObject(0);
COSString value = (COSString) keyValuePair.getObject(1);
if (optionValue.equals(key.getString()) ||
optionValue.equals(value.getString()))
{
// have the parent draw the appearance stream with the
value
if ((FLAG_COMBO & fieldFlags) != 0)
{
super.setValue(value.getString());
}
else
{
COSArray indexEntries = new COSArray();
indexEntries.add(COSInteger.get((long) i));
getDictionary().setItem(COSName.I, indexEntries);
setListboxValue(value.getString());
}
// but then use the key as the V entry
getDictionary().setItem(COSName.V, key);
indexSelected = i;
}
}
else
{
COSString value = (COSString) option;
if (optionValue.equals(value.getString()))
{
super.setValue(optionValue);
indexSelected = i;
}
}
}
}
if (indexSelected == -1 && isEditable)
{
super.setValue(optionValue);
}
else if (indexSelected == -1)
{
throw new IOException("Error: '" + optionValue + "' was not an
available option.");
}
else
{
COSArray indexArray = (COSArray)
getDictionary().getDictionaryObject(COSName.I);
if (indexArray != null)
{
indexArray.clear();
indexArray.add(COSInteger.get(indexSelected));
}
}
}
V/R,
Mark Strein
TRAC-FLVN
Wargaming and Simulations Directorate
Analytic Tools Division - Paving Crew
Keeper of the Codes
913-684-9309
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]