Hi,
Hi,
public static void addFormFieldInPDFDocument() {
// Open a document
Document pdfDocument = new Document();
pdfDocument.getPages().add();
// Create a field
TextBoxField textBoxField1 = new TextBoxField(pdfDocument.getPages().get_Item(1), new Rectangle(100, 200, 300, 300));
// Set the field name
textBoxField1.setPartialName("textbox1");
// Set the field value
textBoxField1.setValue("Text Box");
// Create a border object
Border border = new Border(textBoxField1);
// Set the border width
border.setWidth(5);
// Set the border dash style
border.setDash(new Dash(1, 1));
// Set the field border
textBoxField1.setBorder(border);
// Add the field to the document
pdfDocument.getForm().add(textBoxField1, 1);
// Save the modified PDF
pdfDocument.save("outputTextBoxField.pdf");
}
opeterka:
Thanks for the reply …Here is the code. Please note, that it is the code form your pdf-java-examples projects (just not using the input.pdf, but creating new one and adding page):public static void addFormFieldInPDFDocument() {
// Open a document
Document pdfDocument = new Document();
pdfDocument.getPages().add();
// Create a field
TextBoxField textBoxField1 = new TextBoxField(pdfDocument.getPages().get_Item(1), new Rectangle(100, 200, 300, 300));
// Set the field name
textBoxField1.setPartialName(“textbox1”);
// Set the field value
textBoxField1.setValue(“Text Box”);
// Create a border object
Border border = new Border(textBoxField1);
// Set the border width
border.setWidth(5);
// Set the border dash style
border.setDash(new Dash(1, 1));
// Set the field border
textBoxField1.setBorder(border);
// Add the field to the document
pdfDocument.getForm().add(textBoxField1, 1);
// Save the modified PDF
pdfDocument.save(“outputTextBoxField.pdf”);
}I am using apose SDK 17.2.The problem is that that, when the the text in textbox field does not fit anymore to the textbox field (user types the text), it changes its size (its getting smaller and smaller).Hi,Thanks for sharing the details.I have tested the scenario and have managed to reproduce the same problem. Please note that its a default behavior when displaying the PDF file and the field tries to accommodate the complete content inside it. However for the sake of further investigation, I have logged it as PDFJAVA-36739 in our issue tracking system. We will further look into the details of this problem and will keep you updated with our findings. We are sorry for this inconvenience.
Hi.
opeterka:
One more question regarding the textbox. Why I can set border as integer only? The border is to thick to my liking, when I use 1. (Your tables let me set border of a table or cell as float.) Or is there any other way?
Hi,
Thanks for sharing the details.
I am afraid the above stated feature is currently not supported. For the sake of correction, I have logged it as PDFJAVA-36746 in our issue tracking system. We will further look into the details of this requirement and will keep you posted on the status of correction. Please be patient and spare us little time. We are sorry for this inconvenience.
opeterka:
Btw. note that in the example you provide you set some border, but no border is rendered. The getCharacteristics().setBorder(java.awt.Color.BLACK); is missing in the example!
During my testing, I am unable to notice any issue and color information for TextBoxField is properly being set. For your reference, I have also attached the output generated using following code snippet.
[Java]
// Open a document
com.aspose.pdf.Document pdfDocument = **new** com.aspose.pdf.Document();
pdfDocument.getPages().add();
// Create a field
TextBoxField textBoxField1 = **new** TextBoxField(pdfDocument.getPages().get_Item(1), **new** Rectangle(100, 200, 300, 300));
// Set the field name
textBoxField1.setPartialName("textbox1");
// Set the field value
textBoxField1.setValue("Text Box");
textBoxField1.getDefaultAppearance().setFontSize(20);
textBoxField1.setMultiline(**true**);
// Create a border object
com.aspose.pdf.Border border = **new** com.aspose.pdf.Border(textBoxField1);
// Set the border width
border.setWidth(5);
// Set the border dash style
border.setDash(**new** Dash(1, 1));
textBoxField1.getCharacteristics().setBorder(java.awt.Color.***BLUE***);
// Set the field border
textBoxField1.setBorder(border);
// Add the field to the document
pdfDocument.getForm().add(textBoxField1, 1);
// Save the modified PDF
pdfDocument.save("c:/pdftest/outputTextBoxField.pdf");
Thanks.
The proposed solution does not work when the textfield is in the table:
<pre style=“background-color: rgb(255, 255, 255); font-family: “Courier New”;”> private void addTable(Page pdfPage) {
Table tab = new Table();
TextState textState = new TextState(fontName);
textState.setFontSize(fontSizeTable);
tab.setDefaultCellTextState(textState);
int poznamkaWidth = 165;
//Set with column widths of the table
tab.setColumnWidths("70 115 60 80 " + poznamkaWidth);
//tab.setColumnAdjustment(ColumnAdjustment.AutoFitToContent);
//Set default cell border using BorderInfo object
tab.setDefaultCellBorder(new com.aspose.pdf.BorderInfo(com.aspose.pdf.BorderSide.All, 0.5F));
com.aspose.pdf.MarginInfo marginTable = new com.aspose.pdf.MarginInfo(0,0,0,16);
tab.setMargin(marginTable);
//Set table border using another customized BorderInfo object
tab.setBorder(new com.aspose.pdf.BorderInfo(com.aspose.pdf.BorderSide.All, 0.5F));
//Create MarginInfo object and set its left, bottom, right and top margins
com.aspose.pdf.MarginInfo marginInfoCell = new com.aspose.pdf.MarginInfo(2,2,2,2);
//Set the default cell padding to the MarginInfo object
tab.setDefaultCellPadding(marginInfoCell);
//Create rows in the table and then cells in the rows
com.aspose.pdf.Row row1 = tab.getRows().add();
row1.setFixedRowHeight(rowHeight);
addCellToRow(row1, “A”, FontStyles.Bold, HorizontalAlignment.Center);
addCellToRow(row1, “B”, FontStyles.Bold, HorizontalAlignment.Center);
addCellToRow(row1, “Číslo”, FontStyles.Bold, HorizontalAlignment.Center);
addCellToRow(row1, “D”, FontStyles.Bold, HorizontalAlignment.Center);
addCellToRow(row1, “Poznámka”, FontStyles.Bold, HorizontalAlignment.Center);
;
for (int i = 0; i< numberOfRows; i++)
{
com.aspose.pdf.Row row2 = tab.getRows().add();
row2.setFixedRowHeight(rowHeight);
Cell c = row2.getCells().add(“a111-5454”);
row2.getCells().add(“Mudr. Jan Novák Maximilan Superman” + i);
row2.getCells().add(“c” + i);
row2.getCells().add().getParagraphs().add(createRadioTable(pdfPage, i));
TextBoxField tbf = new TextBoxField();
tbf.setMargin(new MarginInfo(0,4,0,0));
// DefaultAppearance tbfDefaultAppearance = new DefaultAppearance();
// tbfDefaultAppearance.setFontSize(fontSizeTable);
// tbf.setDefaultAppearance(tbfDefaultAppearance);
tbf.setPartialName(“poznamka_” + i);
tbf.setWidth(poznamkaWidth);
tbf.setHeight(rowHeight);
tbf.setMultiline(true);
row2.getCells().add().getParagraphs().add(tbf);
tbf.getDefaultAppearance().setFontSize(fontSizeTable); //<–exception!!!
}
//Add the table in paragraphs collection of the desired section
pdfPage.getParagraphs().add(tab);
//tbf.getDefaultAppearance().setFontSize(fontSizeTable);
}
NullPointerException is thrown when getting default appearance. How can i go around this? I guess, it is because no page or document is set to the textboxfield, but I can not figure how to circumvent the problem.
In regard of the example for border. In your example on github there is missing the line textBoxField1.getCharacteristics().setBorder(java.awt.Color.BLUE); and that is the problem why it does not work correctly … just letting you know, that’s all.
Hi,
Thanks for sharing the details.
I have tried replicating the issue but I am afraid the addCellToRow(…) and createRadioTable(…) methods are not defined. Can you please share the complete code snippet, so that we can again try replicating the issue in our environment. We are sorry for this inconvenience.
[Java]
com.aspose.pdf.Document doc = new Document();
doc.getPages().add();
com.aspose.pdf.Table tab = new com.aspose.pdf.Table();
TextState textState = new TextState("Arial");
textState.setFontSize(14);
tab.setDefaultCellTextState(textState);
int poznamkaWidth = 165;
//Set with column widths of the table
tab.setColumnWidths("70 115 60 80 " + poznamkaWidth);
//tab.setColumnAdjustment(ColumnAdjustment.AutoFitToContent);
//Set default cell border using BorderInfo object
tab.setDefaultCellBorder(new com.aspose.pdf.BorderInfo(com.aspose.pdf.BorderSide.* All *, 0.5F));
com.aspose.pdf.MarginInfo marginTable = new com.aspose.pdf.MarginInfo(0,0,0,16);
tab.setMargin(marginTable);
//Set table border using another customized BorderInfo object
tab.setBorder(new com.aspose.pdf.BorderInfo(com.aspose.pdf.BorderSide.* All *, 0.5F));
//Create MarginInfo object and set its left, bottom, right and top margins
com.aspose.pdf.MarginInfo marginInfoCell = new com.aspose.pdf.MarginInfo(2,2,2,2);
//Set the default cell padding to the MarginInfo object
tab.setDefaultCellPadding(marginInfoCell);
//Create rows in the table and then cells in the rows
com.aspose.pdf.Row row1 = tab.getRows().add();
row1.setFixedRowHeight(10);
addCellToRow(row1, "A", FontStyles. Bold , com.aspose.pdf.HorizontalAlignment. Center );
addCellToRow(row1, "B", FontStyles. Bold , com.aspose.pdf.HorizontalAlignment. Center );
addCellToRow(row1, "Číslo", FontStyles. Bold , com.aspose.pdf.HorizontalAlignment. Center );
addCellToRow(row1, "D", FontStyles. Bold , com.aspose.pdf.HorizontalAlignment. Center );
addCellToRow(row1, "Poznámka", FontStyles. Bold , com.aspose.pdf.HorizontalAlignment. Center );
for(int i = 0; i < 20; i++)
{
com.aspose.pdf.Row row2 = tab.getRows().add();
row2.setFixedRowHeight(10);
com.aspose.pdf.Cell c = row2.getCells().add("a111-5454");
row2.getCells().add("Mudr. Jan Novák Maximilan Superman" + i);
row2.getCells().add("c" + i);
row2.getCells().add().getParagraphs().add(createRadioTable(pdfPage, i));
TextBoxField tbf = new TextBoxField();
tbf.setMargin(new MarginInfo(0, 4, 0, 0));
// DefaultAppearance tbfDefaultAppearance = new DefaultAppearance();
// tbfDefaultAppearance.setFontSize(fontSizeTable);
// tbf.setDefaultAppearance(tbfDefaultAppearance);
tbf.setPartialName("poznamka_" + i);
tbf.setWidth(poznamkaWidth);
tbf.setHeight(10);
tbf.setMultiline(true);
row2.getCells().add().getParagraphs().add(tbf);
tbf.getDefaultAppearance().setFontSize(14); //<--exception!!!
}
//Add the table in paragraphs collection of the desired section
doc.getPages().get_Item(1).getParagraphs().add(tab);
//tbf.getDefaultAppearance().setFontSize(fontSizeTable);
doc.save(“c:/ pdftest / Table_in_PDF.pdf”);
opeterka:
In regard of the example for border. In your example on github there is missing the line textBoxField1.getCharacteristics().setBorder(java.awt.Color.BLUE); and that is the problem why it does not work correctly ... just letting you know, that's all.Hi,Can you please share the example link, so that we can update the information accordingly.
Hi,
here it is:
private void addCellToRow(Row row, String text, int fontStyle, int horizontalAlignment) {
TextFragment tf = new TextFragment(text);
tf.getTextState().setFont(FontRepository.findFont(fontName));
tf.getTextState().setFontStyle(fontStyle);
tf.getTextState().setHorizontalAlignment(horizontalAlignment);
row.getCells().add().getParagraphs().add(tf);
}
private Table createRadioTable(Page page, int rowNumber) {
Table table = new Table();
table.setColumnWidths(“35 35”);
Row r1 = table.getRows().add();
Cell c1 = r1.getCells().add();
Cell c2 = r1.getCells().add();
table.setMargin(new MarginInfo(4,0,6,0));
RadioButtonField rf = new RadioButtonField(page);
rf.setName(“radio” + rowNumber);
page.getDocument().getForm().add(rf, 1);
RadioButtonOptionField opt1 = new RadioButtonOptionField();
RadioButtonOptionField opt2 = new RadioButtonOptionField();
opt1.setOptionName(“rbAno_” +rowNumber);
opt2.setOptionName(“rbNe_” +rowNumber);
opt1.setWidth(8);
opt1.setHeight(8);
opt2.setWidth(8);
opt2.setHeight(8);
rf.add(opt1);
rf.add(opt2);
TextFragment anoTf = new TextFragment(“Ano”);
anoTf.getTextState().setFont(FontRepository.findFont(fontName));
[//anoTf.getTextState](https://anotf.gettextstate/)().setFont(FontRepository.findFont(fontName));
anoTf.getTextState().setFontSize(8);
anoTf.getTextState().setFontStyle(FontStyles.Regular);
TextFragment neTf = new TextFragment(“Ne”);
neTf.getTextState().setFont(FontRepository.findFont(fontName));
neTf.getTextState().setFontSize(8);
neTf.getTextState().setFontStyle(FontStyles.Regular);
opt1.setCaption(anoTf);
opt2.setCaption(neTf);
c1.getParagraphs().add(opt1);
c2.getParagraphs().add(opt2);
return table;
}
Thanks
Hi,
Thanks for sharing the details.
During an initial attempt, the code executed without any exception but I am afraid the resultant file is not being generated. We are further investigating the scenario and will keep you updated with our findings.
com.aspose.pdf.Document doc = new Document();
doc.getPages().add();
com.aspose.pdf.Table tab = new com.aspose.pdf.Table();
TextState textState = new TextState("Arial");
textState.setFontSize(14);
tab.setDefaultCellTextState(textState);
int poznamkaWidth = 165;
//Set with column widths of the table
tab.setColumnWidths("70 115 60 80 " + poznamkaWidth);
//tab.setColumnAdjustment(ColumnAdjustment.AutoFitToContent);
//Set default cell border using BorderInfo object
tab.setDefaultCellBorder(new com.aspose.pdf.BorderInfo(com.aspose.pdf.BorderSide.All, 0.5F));
com.aspose.pdf.MarginInfo marginTable = new com.aspose.pdf.MarginInfo(0, 0, 0, 16);
tab.setMargin(marginTable);
//Set table border using another customized BorderInfo object
tab.setBorder(new com.aspose.pdf.BorderInfo(com.aspose.pdf.BorderSide.All, 0.5F));
//Create MarginInfo object and set its left, bottom, right and top margins
com.aspose.pdf.MarginInfo marginInfoCell = new com.aspose.pdf.MarginInfo(2, 2, 2, 2);
//Set the default cell padding to the MarginInfo object
tab.setDefaultCellPadding(marginInfoCell);
//Create rows in the table and then cells in the rows
com.aspose.pdf.Row row1 = tab.getRows().add();
row1.setFixedRowHeight(10);
addCellToRow(row1, "A", FontStyles.Bold, com.aspose.pdf.HorizontalAlignment.Center);
addCellToRow(row1, "B", FontStyles.Bold, com.aspose.pdf.HorizontalAlignment.Center);
addCellToRow(row1, "Číslo", FontStyles.Bold, com.aspose.pdf.HorizontalAlignment.Center);
addCellToRow(row1, "D", FontStyles.Bold, com.aspose.pdf.HorizontalAlignment.Center);
addCellToRow(row1, "Poznámka", FontStyles.Bold, com.aspose.pdf.HorizontalAlignment.Center);
;
for (int i = 0; i < 20; i++)
{
com.aspose.pdf.Row row2 = tab.getRows().add();
row2.setFixedRowHeight(10);
com.aspose.pdf.Cell c = row2.getCells().add("a111-5454");
row2.getCells().add("Mudr. Jan Novák Maximilan Superman" + i);
row2.getCells().add("c" + i);
row2.getCells().add().getParagraphs().add(createRadioTable(doc.getPages().get_Item(1), i));
TextBoxField tbf = new TextBoxField();
tbf.setMargin(new MarginInfo(0, 4, 0, 0));
// DefaultAppearance tbfDefaultAppearance = new DefaultAppearance();
// tbfDefaultAppearance.setFontSize(fontSizeTable);
// tbf.setDefaultAppearance(tbfDefaultAppearance);
tbf.setPartialName("poznamka_" + i);
tbf.setWidth(poznamkaWidth);
tbf.setHeight(10);
tbf.setMultiline(true);
row2.getCells().add().getParagraphs().add(tbf);
tbf.getDefaultAppearance().setFontSize(14); //<--exception!!!
}
//Add the table in paragraphs collection of the desired section
doc.getPages().get_Item(1).getParagraphs().add(tab);
//tbf.getDefaultAppearance().setFontSize(fontSizeTable);
doc.save("c:/pdftest/Table_in_PDF_2.pdf");
private static void addCellToRow(com.aspose.pdf.Row row, String text, int fontStyle, int horizontalAlignment)
{
TextFragment tf = new TextFragment(text);
tf.getTextState().setFont(FontRepository.findFont("Arial"));
tf.getTextState().setFontStyle(fontStyle);
tf.getTextState().setHorizontalAlignment(horizontalAlignment);
row.getCells().add().getParagraphs().add(tf);
}
private static com.aspose.pdf.Table createRadioTable(Page page, int rowNumber)
{
com.aspose.pdf.Table table = new com.aspose.pdf.Table();
table.setColumnWidths("35 35");
com.aspose.pdf.Row r1 = table.getRows().add();
com.aspose.pdf.Cell c1 = r1.getCells().add();
com.aspose.pdf.Cell c2 = r1.getCells().add();
table.setMargin(new MarginInfo(4, 0, 6, 0));
RadioButtonField rf = new RadioButtonField(page);
rf.setName("radio" + rowNumber);
page.getDocument().getForm().add(rf, 1);
RadioButtonOptionField opt1 = new RadioButtonOptionField();
RadioButtonOptionField opt2 = new RadioButtonOptionField();
opt1.setOptionName("rbAno_" + rowNumber);
opt2.setOptionName("rbNe_" + rowNumber);
opt1.setWidth(8);
opt1.setHeight(8);
opt2.setWidth(8);
opt2.setHeight(8);
rf.add(opt1);
rf.add(opt2);
TextFragment anoTf = new TextFragment("Ano");
anoTf.getTextState().setFont(FontRepository.findFont("Arial"));
//anoTf.getTextState().setFont(FontRepository.findFont(fontName));
anoTf.getTextState().setFontSize(8);
anoTf.getTextState().setFontStyle(FontStyles.Regular);
TextFragment neTf = new TextFragment("Ne");
neTf.getTextState().setFont(FontRepository.findFont("Arial"));
neTf.getTextState().setFontSize(8);
neTf.getTextState().setFontStyle(FontStyles.Regular);
opt1.setCaption(anoTf);
opt2.setCaption(neTf);
c1.getParagraphs().add(opt1);
c2.getParagraphs().add(opt2);
return table;
}
opeterka:
NullPointerException is thrown when getting default appearance. How can i go around this? I guess, it is because no page or document is set to the textboxfield, but I can not figure how to circumvent the problem.Hi,Thanks for using our API’s.I have tested the scenario and have managed to reproduce above stated problem. For the sake of correction, I have logged it as PDFJAVA-36753 in our issue tracking system. We will further look into the details of this problem and will keep you posted on the status of correction. Please be patient and spare us little time. We are sorry for this inconvenience.