Hi,

> Am 10.07.2015 um 00:32 schrieb jarrod <[email protected]>:
> 
> I'm evaluating pdfbox for filling in form fields from a template pdf file.
> 
> From what I can tell, pdfbox does not support autosize font. While it will 
> retain the font size 0 setting, the text that is placed into the fields is 
> not autosized (until you alter the value manually).
> 
> Option A:
> Is there some kind of command to execute before saving the pdf to force it to 
> autosize?
> 
> Option B:
> Do some math and calculate a new font size. I've done this (see code below) 
> but you obviously lose the ability to autosize if the user ends up modifying 
> a value.
> Is there a way to do this math and set the initial display font size but 
> leave the DA alone with autosize set?
> I'm guessing this would be done by setting some other COSName String similar 
> to setting the COSName.DA. However, I can't find much information on these.


which version of PDFBox are you using? Do you have a sample empty PDF and 
filled out one together with some code how you do the form filling? 

Both 1.8.9 and 2.0.0-SNAPSHOT should support autosizing.

BR
Maruan

> 
> Any help is appreciated. Code is below;
> 
> //item.field_value is the value I'm sticking into the form field
> 
> if (field instanceof PDTextbox)
> {
>       int len = item.field_value.length();
>       if (len>2)
>       {
>               COSDictionary dict = field.getDictionary();
>               COSString defaultAppearance = (COSString) 
> dict.getDictionaryObject(COSName.DA);
>               if (defaultAppearance != null)
>               {
>                       //split the DA to grab the font size
>                       String[] da = defaultAppearance.getString().split(" ");
>                       List<String> da2 = new ArrayList<String>();
> 
>                       //loop through and remove any empty strings
>                       // because for some reason when the font size is 0 
> there is an empty extra string in the way
>                       for(int x=0; x<da.length; x++)
>                       {
>                               if (da[x].length()!=0)
>                                       da2.add(da[x]);
>                       }
>                       //Move back to a String[] (I'm new to java)
>                       da = da2.toArray(da);
> 
>                       if (da.length >= 2) //only process if there are at 
> least two characters
>                       {
>                               if (da[1].equals("0")) //If font size is 
> actually autosized
>                               {
>                                       COSArray fieldAreaArray = (COSArray) 
> dict.getDictionaryObject(COSName.RECT);
>                                       PDRectangle rect = new 
> PDRectangle(fieldAreaArray);
>                                       float width = rect.getWidth();
>                                       
>                                       int size = (int)(width / len * 1.92); 
> //doing stupid math to estimate new font size
>                                       
>                                       if (size > 12)
>                                               size = 12;
>                                       else if (size < 8)
>                                               size = 8;
>                                       
>                                       String customSize = "/Helv " + size + " 
> Tf 0 g";
>                                       
>                                       dict.setString(COSName.DA, customSize); 
> //Set the new font size here
>                                       field = new PDTextbox(acroForm, dict); 
> //Create as a new field (as seen in other threads)
>                               }
>                       }
>               }
>       }
> }
> field.setValue(item.field_value); //Set the field value
> 
> Jarrod
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to