El valor del campo de texto guardado no se muestra correctamente en el PDF generado usando PDFBOX

import java.io.IOException;

import javax.swing.text.BadLocationException;

import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSFloat;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.cos.COSString;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.interactive.action.PDAnnotationAdditionalActions;
import org.apache.pdfbox.pdmodel.interactive.action.type.PDActionJavaScript;
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
import org.apache.pdfbox.pdmodel.interactive.form.PDTextbox;
import org.junit.Test;

public class TestPDTextbox {
    @Test
    public void Sample1 () throws IOException, COSVisitorException, BadLocationException {


        PDDocument doc = new PDDocument();
        PDPage page = new PDPage();
        doc.addPage(page);   

        COSDictionary acroFormDict = new COSDictionary(); 
//        acroFormDict.setBoolean(COSName.getPDFName("NeedAppearances"), true);
        acroFormDict.setItem(COSName.getPDFName("Fields"), new COSArray());

        PDAcroForm acroForm = new PDAcroForm(doc, acroFormDict);
        doc.getDocumentCatalog().setAcroForm(acroForm);

        COSDictionary cosDict1 = new COSDictionary();
        COSArray rect1 = new COSArray();
        rect1.add(new COSFloat(100));
        rect1.add(new COSFloat(700));
        rect1.add(new COSFloat(200));
        rect1.add(new COSFloat(750));

        cosDict1.setItem(COSName.RECT, rect1);
        cosDict1.setItem(COSName.FT, COSName.getPDFName("Tx")); // Field Type
        cosDict1.setItem(COSName.TYPE, COSName.ANNOT);
        cosDict1.setItem(COSName.SUBTYPE, COSName.getPDFName("Widget"));
        cosDict1.setItem(COSName.T, new COSString("tx1"));
        cosDict1.setItem(COSName.DA, new COSString("/Helv 7 Tf 0 g"));
        cosDict1.setItem(COSName.V, new COSString("Test Value1"));

        PDTextbox textbox = new PDTextbox(doc.getDocumentCatalog().getAcroForm(), cosDict1);

//      textbox.setValue("Test Value");

        page.getAnnotations().add(textbox.getWidget());
        acroForm.getFields().add(textbox);

         doc.save("C:\\PDF\\SampleTextbox.pdf");
         doc.close();
    }
}

Issue # 1 He creado un campo de texto como se muestra en el código anterior e intenté establecer el valor usando textbox.setValue ("Valor de prueba"); método pero está dando error como se muestra a continuación:

java.io.IOException: Error: Don't know how to calculate the position for non-simple fonts
    at org.apache.pdfbox.pdmodel.interactive.form.PDAppearance.getTextPosition(PDAppearance.java:1037)
    at org.apache.pdfbox.pdmodel.interactive.form.PDAppearance.insertGeneratedAppearance(PDAppearance.java:558)
    at org.apache.pdfbox.pdmodel.interactive.form.PDAppearance.setAppearanceValue(PDAppearance.java:338)
    at org.apache.pdfbox.pdmodel.interactive.form.PDVariableText.setValue(PDVariableText.java:131)
    at sample.pdfbox.example.TestPDTextbox.Sample1(TestPDTextbox.java:54)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Issue # 2

Para solucionar el problema # 1, si configuro el valor de textBox usando la propiedad cosDictionary, es decir, cosDict1.setItem (COSName.V, new COSString ("Test Value1"));

Luego, en Adobe Reader, el valor de textBox no se rellena correctamente. Tengo que hacer clic en el cuadro de texto y luego solo aparece el valor, y una vez que salgo del campo, el valor nuevamente se vuelve invisible.

Issue # 3

Para solucionar el problema # 2, necesito establecer el indicador needAppearances en verdadero como se muestra a continuación, y después de que el valor del campo se muestre correctamente en PDF. Pero después de esta solución, no puedo extraer / analizar el campo PDF una vez que el usuario cambia el valor del campo y nuevamente analizamos este PDF.

Nota:- Este problema existe en Adobe Reader, aquí, al abrir PDF, también da un mensaje comoarreglando campos de formulario. Y una vez que guardo el PDF e intento analizar los campos de acroform, todos los campos se restablecen o son nulos. Ninguno de los nombres de campo o valores de campo se pueden extraer.

Entonces, usando acroFormDict.setBoolean (COSName.getPDFName ("NeedAppearances"), verdadero); en el código parece arriesgado y crea otro problema en el análisis de PDF, por lo que no se puede usar.

COSDictionary acroFormDict = new COSDictionary(); 
        acroFormDict.setBoolean(COSName.getPDFName("NeedAppearances"), true);
        acroFormDict.setItem(COSName.getPDFName("Fields"), new COSArray());

        PDAcroForm acroForm = new PDAcroForm(doc, acroFormDict);
        doc.getDocumentCatalog().setAcroForm(acroForm);

Creo que necesito establecer PDAppearanceDictionary para los campos de texto, pero no sé hacer eso y si necesito configurarlo para cada campo o en un nivel de acroforma.

Ayúdame con este problema, ¿cómo debo resolverlo? Estoy usando PDFBOX versión 1.8.10.