@@ -24,14 +24,17 @@ This file is part of the iText (R) project.
2424
2525import com .itextpdf .commons .utils .MessageFormatUtil ;
2626import com .itextpdf .forms .fields .CheckBoxFormFieldBuilder ;
27+ import com .itextpdf .forms .fields .PdfButtonFormField ;
2728import com .itextpdf .forms .fields .PdfFormField ;
2829import com .itextpdf .forms .fields .properties .CheckBoxType ;
2930import com .itextpdf .kernel .colors .ColorConstants ;
3031import com .itextpdf .kernel .font .PdfFontFactory ;
3132import com .itextpdf .kernel .geom .Rectangle ;
3233import com .itextpdf .kernel .pdf .PdfDocument ;
34+ import com .itextpdf .kernel .pdf .PdfName ;
3335import com .itextpdf .kernel .pdf .PdfPage ;
3436import com .itextpdf .kernel .pdf .PdfReader ;
37+ import com .itextpdf .kernel .pdf .PdfStream ;
3538import com .itextpdf .kernel .pdf .PdfWriter ;
3639import com .itextpdf .kernel .pdf .canvas .PdfCanvas ;
3740import com .itextpdf .kernel .utils .CompareTool ;
@@ -210,6 +213,38 @@ public void checkBoxToggleTest02() throws IOException, InterruptedException {
210213 }
211214 }
212215
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+
213248 private void addCheckBox (PdfDocument pdfDoc , float fontSize , float yPos , float checkBoxW , float checkBoxH )
214249 throws IOException {
215250 Rectangle rect = new Rectangle (50 , yPos , checkBoxW , checkBoxH );
0 commit comments