@@ -141,20 +141,15 @@ private void copyField(PdfPage toPage, Map<String, PdfFormField> fieldsFrom,
141
141
if (field == null ) {
142
142
formTo .addField (PdfFormField .makeFormField (currentAnnot .getPdfObject (), documentTo ), null );
143
143
} else {
144
- copyExistingField (toPage , currentAnnot , annotNameString );
144
+ copyExistingField (toPage , currentAnnot );
145
145
}
146
146
}
147
147
}
148
148
}
149
149
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 ()));
156
152
157
- logger .warn (MessageFormatUtil .format (LogMessageConstant .DOCUMENT_ALREADY_HAS_FIELD , annotNameString ));
158
153
PdfArray kids = field .getKids ();
159
154
if (kids != null ) {
160
155
field .getPdfObject ().remove (PdfName .Kids );
@@ -180,10 +175,8 @@ private void copyParentFormField(PdfPage toPage, Map<String, PdfFormField> field
180
175
if (fieldName != null ) {
181
176
PdfFormField existingField = fieldsTo .get (fieldName .toUnicodeString ());
182
177
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 );
187
180
} else {
188
181
HashSet <String > existingFields = new HashSet <>();
189
182
getAllFieldNames (formTo .getFields (), existingFields );
@@ -204,6 +197,8 @@ private PdfFormField mergeFieldsWithTheSameName(PdfFormField newField) {
204
197
String fullFieldName = newField .getFieldName ().toUnicodeString ();
205
198
PdfString fieldName = newField .getPdfObject ().getAsString (PdfName .T );
206
199
200
+ logger .warn (MessageFormatUtil .format (LogMessageConstant .DOCUMENT_ALREADY_HAS_FIELD , fullFieldName ));
201
+
207
202
PdfFormField existingField = formTo .getField (fullFieldName );
208
203
if (existingField .isFlushed ()) {
209
204
int index = 0 ;
@@ -216,6 +211,9 @@ private PdfFormField mergeFieldsWithTheSameName(PdfFormField newField) {
216
211
}
217
212
newField .getPdfObject ().remove (PdfName .T );
218
213
newField .getPdfObject ().remove (PdfName .P );
214
+
215
+ formTo .getFields ().remove (existingField .getPdfObject ());
216
+
219
217
PdfArray kids = existingField .getKids ();
220
218
if (kids != null && !kids .isEmpty ()) {
221
219
existingField .addKid (newField );
@@ -224,7 +222,6 @@ private PdfFormField mergeFieldsWithTheSameName(PdfFormField newField) {
224
222
225
223
existingField .getPdfObject ().remove (PdfName .T );
226
224
existingField .getPdfObject ().remove (PdfName .P );
227
- formTo .getFields ().remove (existingField .getPdfObject ());
228
225
PdfFormField mergedField = PdfFormField .createEmptyField (documentTo );
229
226
mergedField .
230
227
put (PdfName .FT , existingField .getFormType ()).
@@ -318,9 +315,9 @@ private void addChildToExistingParent(PdfDictionary fieldDic, Set<String> existi
318
315
if (((PdfDictionary ) kid ).get (PdfName .T ).equals (fieldDic .get (PdfName .T ))) {
319
316
PdfFormField kidField = PdfFormField .makeFormField (kid , documentTo );
320
317
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 );
324
321
return ;
325
322
}
326
323
}
0 commit comments