@@ -44,13 +44,18 @@ This file is part of the iText (R) project.
44
44
45
45
import com .itextpdf .forms .fields .PdfFormField ;
46
46
import com .itextpdf .forms .fields .PdfTextFormField ;
47
+ import com .itextpdf .io .LogMessageConstant ;
47
48
import com .itextpdf .kernel .colors .DeviceRgb ;
48
49
import com .itextpdf .kernel .pdf .PdfDocument ;
49
50
import com .itextpdf .kernel .pdf .PdfReader ;
50
51
import com .itextpdf .kernel .pdf .PdfWriter ;
51
52
import com .itextpdf .kernel .utils .CompareTool ;
52
53
import com .itextpdf .test .ExtendedITextTest ;
54
+ import com .itextpdf .test .annotations .LogMessage ;
55
+ import com .itextpdf .test .annotations .LogMessages ;
53
56
import com .itextpdf .test .annotations .type .IntegrationTest ;
57
+
58
+ import java .io .ByteArrayOutputStream ;
54
59
import java .io .IOException ;
55
60
import org .junit .Assert ;
56
61
import org .junit .BeforeClass ;
@@ -201,4 +206,28 @@ private static void fillTextFieldsThenFlattenThenCompare(String testName) throws
201
206
202
207
Assert .assertNull (new CompareTool ().compareByContent (dest , cmp , destinationFolder , "diff_" ));
203
208
}
209
+
210
+ @ Test
211
+ @ LogMessages (messages = {@ LogMessage (messageTemplate = LogMessageConstant .DOCUMENT_ALREADY_HAS_FIELD , count = 3 )})
212
+ //Logging is expected since there are duplicate field names
213
+ //isReadOnly should be true after DEVSIX-2156
214
+ public void flattenReadOnly () throws IOException {
215
+ PdfWriter writer = new PdfWriter (new ByteArrayOutputStream ());
216
+ PdfDocument pdfDoc = new PdfDocument (writer );
217
+ PdfReader reader = new PdfReader (sourceFolder + "readOnlyForm.pdf" );
218
+ PdfDocument pdfInnerDoc = new PdfDocument (reader );
219
+ pdfInnerDoc .copyPagesTo (1 , pdfInnerDoc .getNumberOfPages (), pdfDoc , new PdfPageFormCopier ());
220
+ pdfInnerDoc .close ();
221
+ reader = new PdfReader (sourceFolder + "readOnlyForm.pdf" );
222
+ pdfInnerDoc = new PdfDocument (reader );
223
+ pdfInnerDoc .copyPagesTo (1 , pdfInnerDoc .getNumberOfPages (), pdfDoc , new PdfPageFormCopier ());
224
+ pdfInnerDoc .close ();
225
+ PdfAcroForm form = PdfAcroForm .getAcroForm (pdfDoc , false );
226
+ boolean isReadOnly = true ;
227
+ for (PdfFormField field : form .getFormFields ().values ()){
228
+ isReadOnly = (isReadOnly && field .isReadOnly ());
229
+ }
230
+ pdfDoc .close ();
231
+ Assert .assertFalse (isReadOnly );
232
+ }
204
233
}
0 commit comments