Add Image to a PDF using iText

55,968

May this help you for adding image and also image caption to pdf.

Image image1 = Image.getInstance("sample.png");
image1.setAlignment(Element.ALIGN_CENTER);
image1.scaleAbsolute(450, 250);
//Add to document
document.add(image1);
Paragraph imgCaption = new Paragraph(" Sample image-1", imgcaption);
Summary.setAlignment(Element.ALIGN_LEFT);
Summary.setSpacingAfter(10f);
document.add(imgCaption);
Share:
55,968
Stanley Mungai
Author by

Stanley Mungai

Give a beggar a Fish, Feed him for a day. Teach Him how to Fish, Feed Him for a Lifetime.

Updated on February 10, 2020

Comments

  • Stanley Mungai
    Stanley Mungai about 4 years

    I am trying to add an Image to a PDF file using iText. The files are converted from .TXT to PDF and an image is supposed to be added:

    //Convert Reports to PDF
    File conv = new File("Report Forms/");
    String[] filesconv = conv.list(only);
    for (int c = 0; c < filesconv.length; c++) {
        PdfWriter writer = null;
        try {
            Document output = new Document(PageSize.B4);
            Rectangle page = output.getPageSize();
            page.setBackgroundColor(new java.awt.Color(255, 255, 255));
            FileInputStream fs = new FileInputStream("Report Forms/" + filesconv[c]);
            FileOutputStream file = new FileOutputStream(new File("Report Forms/" + name + " " + exa + " FORM " + level + " " + year + ".pdf"));
            DataInputStream in =new DataInputStream(fs);
            BufferedReader br = new BufferedReader(new InputStreamReader( in ));
    
            writer = PdfWriter.getInstance(output, file);
            writer.createXmpMetadata();
    
            //define the  font for the disclaimer.
            com.lowagie.text.Font fontfooter = new
            com.lowagie.text.Font(com.lowagie.text.Font.COURIER, 12, com.lowagie.text.Font.BOLD);
            fontfooter.setColor(new java.awt.Color(0, 52, 154));
    
            output.newPage();
            writer.setPageEvent(new CustomBorder());
            output.open();
            writer.open();
    
            FileInputStream fsname = new FileInputStream("Report Forms/" + filesconv[c]);
            BufferedReader brname = new BufferedReader(new InputStreamReader(fsname));
            for (int p = 0; p < 0; p++) {
                brname.readLine();
            }
            String custname = brname.readLine();
            // System.out.println(custname);
            com.lowagie.text.Font f1 = new com.lowagie.text.Font(com.lowagie.text.Font.COURIER, 12, com.lowagie.text.Font.BOLD);
            f1.setColor(Color.BLACK);
            output.add(new Paragraph(new Phrase(custname, f1)));
            Image image = Image.getInstance("Student Images/" + num + ".png");
            image.setAlignment(Image.ALIGN_RIGHT);
            image.setAbsolutePosition(450f, 10f);
            image.scalePercent(60, 50);
            Chunk chunk = new Chunk(image, 0, -20);
            HeaderFooter header = new HeaderFooter(new Phrase(chunk), false);
            header.setAlignment(Element.ALIGN_RIGHT);
            header.setBorder(Rectangle.NO_BORDER);
            output.setHeader(header);
    
            String line = "";
            int lineNo = br.read();
            while ((line = br.readLine()) != null) {
                for (lineNo = 0; br.ready(); lineNo++) {
                    if (lineNo % 2 == 1) {
                        line = br.readLine();
                        com.lowagie.text.Font f2 = new com.lowagie.text.Font(com.lowagie.text.Font.COURIER, 12, com.lowagie.text.Font.BOLD);
                        f2.setColor(Color.BLACK);
                        Paragraph p1 = new Paragraph(line, f2);
                        p1.setAlignment(Element.TABLE);
                        PdfPTable table = new PdfPTable(1);
                        table.setWidthPercentage(100);
                        PdfPCell cell = new PdfPCell();
                        cell.setBackgroundColor(new java.awt.Color(247, 246, 243));
                        cell.setBorder(Rectangle.NO_BORDER);
                        cell.setUseBorderPadding(true);
                        cell.setPadding(0);
                        cell.setBorderColor(new java.awt.Color(247, 246, 243));
                        cell.addElement(p1);
                        table.addCell(cell);
                        output.add(table);
    
                    } else {
                        line = br.readLine();
                        com.lowagie.text.Font f2 = new com.lowagie.text.Font(com.lowagie.text.Font.COURIER, 12, com.lowagie.text.Font.BOLD);
                        f2.setColor(new java.awt.Color(0, 52, 154));
                        Paragraph p1 = new Paragraph(line, f2);
                        p1.setAlignment(Element.TABLE);
                        PdfPTable table = new PdfPTable(1);
                        table.setWidthPercentage(100);
                        PdfPCell cell = new PdfPCell();
                        cell.setBorder(Rectangle.NO_BORDER);
                        cell.setBorderWidthBottom(1f);
    
                        cell.setUseBorderPadding(true);
                        cell.setPadding(0);
                        cell.setBorderColor(new java.awt.Color(255, 255, 255));
                        cell.addElement(p1);
                        table.addCell(cell);
                        // output.add(page);
                        output.add(table);
                    }
                }
            }
            output.close();
            file.close();
            fs.close();
            fsname.close(); in .close();
            writer.close();
        } catch(Exception ce) {
            JOptionPane.showMessageDialog(this, ce, "Error", JOptionPane.PLAIN_MESSAGE);
        }
    }
    

    If I am not adding any image the conversion is happening fine but when I add image the PDF files are getting generated with 0KB and when you try to open, error comes that the file could not be opened because it is dammaged.