/** * Example written by Bruno Lowagie in answer to: * http://stackoverflow.com/questions/34439850 */ package sandbox.acroforms; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.ExceptionConverter; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPCellEvent; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.text.pdf.RadioCheckField; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import sandbox.WrapToTest; @WrapToTest public class CheckboxCell2 { public static final String DEST = "results/acroforms/checkbox_in_cell2.pdf"; public static void main(String[] args) throws IOException, DocumentException { File file = new File(DEST); file.getParentFile().mkdirs(); new CheckboxCell2().createPdf(DEST); } public void createPdf(String dest) throws IOException, DocumentException { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(dest)); document.open(); // We create a table with 5 columns PdfPTable table = new PdfPTable(6); PdfPCell cell; // We add 5 cells for (int i = 0; i < 6; i++) { cell = new PdfPCell(); cell.setCellEvent(new CheckboxCellEvent("cb" + i, i)); // We create cell with height 50 cell.setMinimumHeight(50); table.addCell(cell); } document.add(table); document.close(); } class CheckboxCellEvent implements PdfPCellEvent { // The name of the check box field protected String name; protected int i; // We create a cell event public CheckboxCellEvent(String name, int i) { this.name = name; this.i = i; } // We create and add the check box field public void cellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases) { PdfWriter writer = canvases[0].getPdfWriter(); // define the coordinates of the middle float x = (position.getLeft() + position.getRight()) / 2; float y = (position.getTop() + position.getBottom()) / 2; // define the position of a check box that measures 20 by 20 Rectangle rect = new Rectangle(x - 10, y - 10, x + 10, y + 10); // define the check box RadioCheckField checkbox = new RadioCheckField( writer, rect, name, "Yes"); switch(i) { case 0: checkbox.setCheckType(RadioCheckField.TYPE_CHECK); break; case 1: checkbox.setCheckType(RadioCheckField.TYPE_CIRCLE); break; case 2: checkbox.setCheckType(RadioCheckField.TYPE_CROSS); break; case 3: checkbox.setCheckType(RadioCheckField.TYPE_DIAMOND); break; case 4: checkbox.setCheckType(RadioCheckField.TYPE_SQUARE); break; case 5: checkbox.setCheckType(RadioCheckField.TYPE_STAR); break; } checkbox.setChecked(true); // add the check box as a field try { writer.addAnnotation(checkbox.getCheckField()); } catch (Exception e) { throw new ExceptionConverter(e); } } } }