@@ -141,20 +141,15 @@ private void copyField(PdfPage toPage, Map<String, PdfFormField> fieldsFrom,
141141 if (field == null ) {
142142 formTo .addField (PdfFormField .makeFormField (currentAnnot .getPdfObject (), documentTo ), null );
143143 } else {
144- copyExistingField (toPage , currentAnnot , annotNameString );
144+ copyExistingField (toPage , currentAnnot );
145145 }
146146 }
147147 }
148148 }
149149
150- private void copyExistingField (PdfPage toPage , PdfAnnotation currentAnnot , String annotNameString ) {
151- PdfFormField field ;
152- PdfDictionary clonedAnnot = (PdfDictionary ) currentAnnot .getPdfObject ().clone ().makeIndirect (documentTo );
153- toPage .getPdfObject ().getAsArray (PdfName .Annots ).add (clonedAnnot );
154- toPage .removeAnnotation (currentAnnot );
155- field = mergeFieldsWithTheSameName (PdfFormField .makeFormField (clonedAnnot , toPage .getDocument ()));
150+ private void copyExistingField (PdfPage toPage , PdfAnnotation currentAnnot ) {
151+ PdfFormField field = mergeFieldsWithTheSameName (PdfFormField .makeFormField (currentAnnot .getPdfObject (), toPage .getDocument ()));
156152
157- logger .warn (MessageFormatUtil .format (LogMessageConstant .DOCUMENT_ALREADY_HAS_FIELD , annotNameString ));
158153 PdfArray kids = field .getKids ();
159154 if (kids != null ) {
160155 field .getPdfObject ().remove (PdfName .Kids );
@@ -180,10 +175,8 @@ private void copyParentFormField(PdfPage toPage, Map<String, PdfFormField> field
180175 if (fieldName != null ) {
181176 PdfFormField existingField = fieldsTo .get (fieldName .toUnicodeString ());
182177 if (existingField != null ) {
183- PdfFormField clonedField = PdfFormField .makeFormField (field .getPdfObject ().clone ().makeIndirect (documentTo ), documentTo );
184- toPage .getPdfObject ().getAsArray (PdfName .Annots ).add (clonedField .getPdfObject ());
185- toPage .removeAnnotation (annot );
186- mergeFieldsWithTheSameName (clonedField );
178+ PdfFormField mergedField = mergeFieldsWithTheSameName (field );
179+ formTo .getFormFields ().put (mergedField .getFieldName ().toUnicodeString (), mergedField );
187180 } else {
188181 HashSet <String > existingFields = new HashSet <>();
189182 getAllFieldNames (formTo .getFields (), existingFields );
@@ -204,6 +197,8 @@ private PdfFormField mergeFieldsWithTheSameName(PdfFormField newField) {
204197 String fullFieldName = newField .getFieldName ().toUnicodeString ();
205198 PdfString fieldName = newField .getPdfObject ().getAsString (PdfName .T );
206199
200+ logger .warn (MessageFormatUtil .format (LogMessageConstant .DOCUMENT_ALREADY_HAS_FIELD , fullFieldName ));
201+
207202 PdfFormField existingField = formTo .getField (fullFieldName );
208203 if (existingField .isFlushed ()) {
209204 int index = 0 ;
@@ -216,6 +211,9 @@ private PdfFormField mergeFieldsWithTheSameName(PdfFormField newField) {
216211 }
217212 newField .getPdfObject ().remove (PdfName .T );
218213 newField .getPdfObject ().remove (PdfName .P );
214+
215+ formTo .getFields ().remove (existingField .getPdfObject ());
216+
219217 PdfArray kids = existingField .getKids ();
220218 if (kids != null && !kids .isEmpty ()) {
221219 existingField .addKid (newField );
@@ -224,7 +222,6 @@ private PdfFormField mergeFieldsWithTheSameName(PdfFormField newField) {
224222
225223 existingField .getPdfObject ().remove (PdfName .T );
226224 existingField .getPdfObject ().remove (PdfName .P );
227- formTo .getFields ().remove (existingField .getPdfObject ());
228225 PdfFormField mergedField = PdfFormField .createEmptyField (documentTo );
229226 mergedField .
230227 put (PdfName .FT , existingField .getFormType ()).
@@ -318,9 +315,9 @@ private void addChildToExistingParent(PdfDictionary fieldDic, Set<String> existi
318315 if (((PdfDictionary ) kid ).get (PdfName .T ).equals (fieldDic .get (PdfName .T ))) {
319316 PdfFormField kidField = PdfFormField .makeFormField (kid , documentTo );
320317 fieldsTo .put (kidField .getFieldName ().toUnicodeString (), kidField );
321- logger . warn ( MessageFormatUtil . format ( LogMessageConstant . DOCUMENT_ALREADY_HAS_FIELD ,
322- kidField . getFieldName (). toUnicodeString () ));
323- mergeFieldsWithTheSameName ( PdfFormField . makeFormField ( fieldDic , documentTo ) );
318+
319+ PdfFormField mergedField = mergeFieldsWithTheSameName ( PdfFormField . makeFormField ( fieldDic , documentTo ));
320+ formTo . getFormFields (). put ( mergedField . getFieldName (). toUnicodeString (), mergedField );
324321 return ;
325322 }
326323 }
0 commit comments