Linked Questions

Popular Questions

I am Using Itext 5 maven and I want to add multiple textfields in multiple pdf pages. like page 1 need 3 fields, page 2 need 4 fields etc.

I have write the below code

public byte[] setupDocument(EditPdfDTO editPdfDTOList, MultipartFile attachment)
{

    WritePDF obj = new WritePDF();

    Document document = null;
    PdfWriter writer = null;
    PdfImportedPage page = null;
    PdfReader reader = null;
    try
    {
        // Create output PDF
        document = new Document(PageSize.A4);
        document.setMargins(0, 0, 0, 0);

        writer = PdfWriter.getInstance(document,
                new FileOutputStream("D:/test.pdf"));

        document.open();
        PdfContentByte cb = writer.getDirectContent();

        // Load existing PDF
        reader = new PdfReader(attachment.getBytes());

        int totalPages = reader.getNumberOfPages();
        for (int i = 0; i < totalPages; i++)
        {
            page = writer.getImportedPage(reader, i + 1);
            document.newPage();
            cb.addTemplate(page, 0, 0);

            for (int j = 0; j < editPdfDTOList.getPdf().size(); j++)
            {
                if (i + 1 == editPdfDTOList.getPdf().get(j).getPageNo())
                {
                    BaseFont baseFont = null;
                    try
                    {
                        baseFont = BaseFont.createFont();
                    }
                    catch (DocumentException | IOException e1)
                    {
                        e1.printStackTrace();
                    }

                    int a, b;
                    a = editPdfDTOList.getPdf().get(j).getxCoordinate();
                    b = editPdfDTOList.getPdf().get(j).getyCoordinate();

                    String str = editPdfDTOList.getPdf().get(j).getTextContent();

                    Rectangle linkLocation =
                            new Rectangle(a, b + baseFont.getDescentPoint(str, 10),
                                    a + 10 + baseFont.getWidthPoint(str, 10),
                                    b + baseFont.getAscentPoint(str, 10) + 10);
                    TextField field =
                            new TextField(writer, linkLocation, "user1" + j+UUID.randomUUID());

                    field.setFontSize(10);
                    field.setOptions(TextField.MULTILINE | TextField.READ_ONLY);
                    field.setTextColor(BaseColor.RED);
                    field.setText(str);
                    field.setBorderWidth(1);

                    cb = writer.getDirectContent();

                    try
                    {
                        cb.addAnnotation(field.getTextField(),false);
                    }
                    catch (IOException | DocumentException e)
                    {
                         e.printStackTrace();           
                    }

                }
            }
        }
    }
    catch (DocumentException | IOException e)
    {
        e.printStackTrace();
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        document.close();

    }
    return null;
}

this code is able to add only one Textfield on every expected but not to add 2 or many textfields in a single page.

there is no issue of multiple try--catch block.

Related Questions