@@ -24,14 +24,17 @@ This file is part of the iText (R) project.
24
24
25
25
import com .itextpdf .commons .utils .MessageFormatUtil ;
26
26
import com .itextpdf .forms .fields .CheckBoxFormFieldBuilder ;
27
+ import com .itextpdf .forms .fields .PdfButtonFormField ;
27
28
import com .itextpdf .forms .fields .PdfFormField ;
28
29
import com .itextpdf .forms .fields .properties .CheckBoxType ;
29
30
import com .itextpdf .kernel .colors .ColorConstants ;
30
31
import com .itextpdf .kernel .font .PdfFontFactory ;
31
32
import com .itextpdf .kernel .geom .Rectangle ;
32
33
import com .itextpdf .kernel .pdf .PdfDocument ;
34
+ import com .itextpdf .kernel .pdf .PdfName ;
33
35
import com .itextpdf .kernel .pdf .PdfPage ;
34
36
import com .itextpdf .kernel .pdf .PdfReader ;
37
+ import com .itextpdf .kernel .pdf .PdfStream ;
35
38
import com .itextpdf .kernel .pdf .PdfWriter ;
36
39
import com .itextpdf .kernel .pdf .canvas .PdfCanvas ;
37
40
import com .itextpdf .kernel .utils .CompareTool ;
@@ -210,6 +213,38 @@ public void checkBoxToggleTest02() throws IOException, InterruptedException {
210
213
}
211
214
}
212
215
216
+ @ Test
217
+ public void appearanceRegenerationTest () throws IOException , InterruptedException {
218
+ String outPdf = destinationFolder + "appearanceRegenerationTest.pdf" ;
219
+ String cmpPdf = sourceFolder + "cmp_appearanceRegenerationTest.pdf" ;
220
+
221
+ try (PdfDocument pdfDoc = new PdfDocument (new PdfWriter (outPdf ))) {
222
+ PdfAcroForm form = PdfAcroForm .getAcroForm (pdfDoc , true );
223
+
224
+ PdfButtonFormField checkBox1 = new CheckBoxFormFieldBuilder (pdfDoc , "checkbox1" )
225
+ .setWidgetRectangle (new Rectangle (10 , 650 , 40 , 20 )).createCheckBox ();
226
+ checkBox1 .setValue ("My_Value" );
227
+
228
+ String offStream = "1 0 0 1 0.86 0.5 cm 0 0 m\n " +
229
+ "0 0.204 -0.166 0.371 -0.371 0.371 c\n " +
230
+ "-0.575 0.371 -0.741 0.204 -0.741 0 c\n " +
231
+ "-0.741 -0.204 -0.575 -0.371 -0.371 -0.371 c\n " +
232
+ "-0.166 -0.371 0 -0.204 0 0 c\n " +
233
+ "f\n " ;
234
+ checkBox1 .getFirstFormAnnotation ().setAppearance (PdfName .N , "Off" ,
235
+ new PdfStream (offStream .getBytes ()));
236
+ String onStream = "1 0 0 1 0.835 0.835 cm 0 0 -0.669 -0.67 re\n " +
237
+ "f\n " ;
238
+ checkBox1 .getFirstFormAnnotation ().setAppearance (PdfName .N , "My_Value" ,
239
+ new PdfStream (onStream .getBytes ()));
240
+
241
+ checkBox1 .regenerateField ();
242
+ form .addField (checkBox1 );
243
+ }
244
+
245
+ Assert .assertNull (new CompareTool ().compareByContent (outPdf , cmpPdf , destinationFolder , "diff_" ));
246
+ }
247
+
213
248
private void addCheckBox (PdfDocument pdfDoc , float fontSize , float yPos , float checkBoxW , float checkBoxH )
214
249
throws IOException {
215
250
Rectangle rect = new Rectangle (50 , yPos , checkBoxW , checkBoxH );
0 commit comments