Hi Team,
I am having a PDF which have editable and non-editable part.
My requirement is that I should be able to make the editable part non editable depending on a configuration.
I have added controls like CheckboxField, RadioButtonOptionField, TextBoxField.
These controls I have added to a table which suits my requirement.
Is it necessary that I have to add the editable control to a Form?
If I add it to form the control shows up in two place. One in the table where I have placed according to the pdf design and also on the first page as I am adding to pdf.getForm().add(field, 1)
If I don't place the fields in the form I would not be able to flatten the PDF to make it non editable.
I am also not able to add the table to the Form as it allows only field item.
As per requirement I would not be able to place the form in any static location like Rectangle as my data remains dynamic and can grow to any extend.
Please let me know if there is a way to make the form visibility false so that non of my fields are repeated twice, also please let me know if there any work around.
Code:
static void Create() throws FileNotFoundException
{
Booleam isPdfEditable = false;
pdfDoc = new Document();
pdfPageItem = pdfDoc.getPages().add();
pdfPageItem.getParagraphs().add(NonEditableContent()); --- > Implementation not provided in code
pdfPageItem.getParagraphs().add(GetTable());
if(!isPdfEditable)
{
pdfDoc.flatten();
pdfDoc.getForm().flatten();
Field[] fields = pdfDoc.getForm().getFields();
for(Field field : fields)
{
field.flatten();
}
}
pdfDoc.save("Sample.pdf");
}
private static Table GetTable()
{
Table questionTable = new Table();
questionTable.setMargin(pdfDoc.getPageInfo().getMargin());
questionTable.setColumnWidths("20 500");
RadioButtonField rf = new RadioButtonField(pdfDoc);
rf = new RadioButtonField(pdfPageItem);
rf.setPartialName("radio");
Row r2 = questionTable.getRows().add();
Cell c2 = r2.getCells().add();
Cell c3 = r2.getCells().add();
c2.setVerticalAlignment(com.aspose.pdf.VerticalAlignment.Top);
c2.setWordWrapped(true);
c3.setVerticalAlignment(com.aspose.pdf.VerticalAlignment.Bottom);
c3.setWordWrapped(true);
RadioButtonOptionField opt1 = new RadioButtonOptionField();
opt1.setOptionName("Name");
opt1.setWidth(10);
opt1.setHeight(10);
rf.add(opt1);
pdfDoc.getForm().add(opt1, 1);
RadioButtonOptionField opt2 = new RadioButtonOptionField();
opt2.setOptionName("Name");
opt2.setWidth(10);
opt2.setHeight(10);
rf.add(opt2);
pdfDoc.getForm().add(opt2, 1);
c2.getParagraphs().add(opt1);
c3.getParagraphs().add(opt2);
CheckboxField chk1= new CheckboxField(pdfDoc);
chk1.setPartialName("ch");
chk1.setWidth(10);
chk1.setHeight(10);
Border border = new Border(chk1);
border.setWidth(2);
border.setStyle(BorderStyle.Solid);
chk1.setBorder(border);
chk1.getCharacteristics().setBorder(java.awt.Color.BLACK);
pdfDoc.getForm().add(chk1, 1);
TextBoxField textBoxField1 = new TextBoxField(pdfDoc);
textBoxField1.setPartialName("tb");
textBoxField1.setHeight(30);
textBoxField1.setWidth(500);
textBoxField1.setInLineParagraph(true);
textBoxField1.setMultiline(true);
pdfDoc.getForm().add(textBoxField1, 0);
Row r3 = questionTable.getRows().add();
Cell c4 = r3.getCells().add();
Cell c5 = r3.getCells().add();
c4.getParagraphs().add(chk1);
c5.getParagraphs().add(textBoxField1);
return questionTable;
}
I am having a PDF which have editable and non-editable part.
My requirement is that I should be able to make the editable part non editable depending on a configuration.
I have added controls like CheckboxField, RadioButtonOptionField, TextBoxField.
These controls I have added to a table which suits my requirement.
Is it necessary that I have to add the editable control to a Form?
If I add it to form the control shows up in two place. One in the table where I have placed according to the pdf design and also on the first page as I am adding to pdf.getForm().add(field, 1)
If I don't place the fields in the form I would not be able to flatten the PDF to make it non editable.
I am also not able to add the table to the Form as it allows only field item.
As per requirement I would not be able to place the form in any static location like Rectangle as my data remains dynamic and can grow to any extend.
Please let me know if there is a way to make the form visibility false so that non of my fields are repeated twice, also please let me know if there any work around.
Code:
static void Create() throws FileNotFoundException
{
Booleam isPdfEditable = false;
pdfDoc = new Document();
pdfPageItem = pdfDoc.getPages().add();
pdfPageItem.getParagraphs().add(NonEditableContent()); --- > Implementation not provided in code
pdfPageItem.getParagraphs().add(GetTable());
if(!isPdfEditable)
{
pdfDoc.flatten();
pdfDoc.getForm().flatten();
Field[] fields = pdfDoc.getForm().getFields();
for(Field field : fields)
{
field.flatten();
}
}
pdfDoc.save("Sample.pdf");
}
private static Table GetTable()
{
Table questionTable = new Table();
questionTable.setMargin(pdfDoc.getPageInfo().getMargin());
questionTable.setColumnWidths("20 500");
RadioButtonField rf = new RadioButtonField(pdfDoc);
rf = new RadioButtonField(pdfPageItem);
rf.setPartialName("radio");
Row r2 = questionTable.getRows().add();
Cell c2 = r2.getCells().add();
Cell c3 = r2.getCells().add();
c2.setVerticalAlignment(com.aspose.pdf.VerticalAlignment.Top);
c2.setWordWrapped(true);
c3.setVerticalAlignment(com.aspose.pdf.VerticalAlignment.Bottom);
c3.setWordWrapped(true);
RadioButtonOptionField opt1 = new RadioButtonOptionField();
opt1.setOptionName("Name");
opt1.setWidth(10);
opt1.setHeight(10);
rf.add(opt1);
pdfDoc.getForm().add(opt1, 1);
RadioButtonOptionField opt2 = new RadioButtonOptionField();
opt2.setOptionName("Name");
opt2.setWidth(10);
opt2.setHeight(10);
rf.add(opt2);
pdfDoc.getForm().add(opt2, 1);
c2.getParagraphs().add(opt1);
c3.getParagraphs().add(opt2);
CheckboxField chk1= new CheckboxField(pdfDoc);
chk1.setPartialName("ch");
chk1.setWidth(10);
chk1.setHeight(10);
Border border = new Border(chk1);
border.setWidth(2);
border.setStyle(BorderStyle.Solid);
chk1.setBorder(border);
chk1.getCharacteristics().setBorder(java.awt.Color.BLACK);
pdfDoc.getForm().add(chk1, 1);
TextBoxField textBoxField1 = new TextBoxField(pdfDoc);
textBoxField1.setPartialName("tb");
textBoxField1.setHeight(30);
textBoxField1.setWidth(500);
textBoxField1.setInLineParagraph(true);
textBoxField1.setMultiline(true);
pdfDoc.getForm().add(textBoxField1, 0);
Row r3 = questionTable.getRows().add();
Cell c4 = r3.getCells().add();
Cell c5 = r3.getCells().add();
c4.getParagraphs().add(chk1);
c5.getParagraphs().add(textBoxField1);
return questionTable;
}