简体   繁体   English

使用 iText 将图像添加到 PDF

[英]Add Image to a PDF using iText

I am trying to add an Image to a PDF file using iText.我正在尝试使用 iText 将图像添加到 PDF 文件。 The files are converted from .TXT to PDF and an image is supposed to be added:文件从 .TXT 转换为 PDF 并且应该添加一个图像:

//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.如果我没有添加任何图像,转换会正常进行,但是当我添加图像时,PDF 文件生成的大小为 0KB,当您尝试打开时,会出现文件因损坏而无法打开的错误。

May this help you for adding image and also image caption to pdf.这可以帮助您将图像和图像标题添加到 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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM