将byte []转换为com.itextpdf.text.Image错误图像== null

时间:2017-05-03 10:10:47

标签: java arrays itext

我正在尝试将输入byte []图像转换为com.itextpdf.text.Image,因为我需要将这个2图像放在pdf中。

这是我的代码:

import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.WritableRaster;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;

import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PushbuttonField;


public class Tryit {
    public static void main (String[] args) throws Exception
        {
            byte[] front = extractBytes("C:/Users/Desktop/Front.png");
            byte[] back = extractBytes("C:/Users/Desktop/Back.png");
            addImageToPdf(front,back);
        }


        public static byte[] extractBytes (String ImageName) throws IOException {
            // open image
            File imgPath = new File(ImageName);
            BufferedImage bufferedImage = ImageIO.read(imgPath);

            // get DataBufferBytes from Raster
            WritableRaster raster = bufferedImage .getRaster();
            DataBufferByte data   = (DataBufferByte) raster.getDataBuffer();

            return ( data.getData() );
        }


        public static void addImageToPdf(byte[] frontByte, byte[] backByte) throws IOException, DocumentException
        {
            ByteArrayInputStream bais = new ByteArrayInputStream(frontByte);
            BufferedImage a = ImageIO.read(bais);

            InputStream frontIn = new ByteArrayInputStream(frontByte);
            BufferedImage bImageFromFront = ImageIO.read(frontIn);

            InputStream backIn = new ByteArrayInputStream(backByte);
            BufferedImage bImageFromBack = ImageIO.read(backIn);

            ByteArrayOutputStream baosF = new ByteArrayOutputStream();
            ImageIO.write(bImageFromFront, "png", baosF);
            Image front = Image.getInstance(baosF.toByteArray());

            ByteArrayOutputStream baosB = new ByteArrayOutputStream();
            ImageIO.write(bImageFromBack, "png", baosB);
            Image back = Image.getInstance(baosB.toByteArray());


            PdfReader reader = new PdfReader("C:/Users/Desktop/Template.pdf");  
            PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("C:/Users/Desktop/P1.pdf")); 
            AcroFields form = stamper.getAcroFields();
            PushbuttonField ad = form.getNewPushbuttonFromField("Front");
            ad.setLayout(PushbuttonField.LAYOUT_ICON_ONLY);
            ad.setProportionalIcon(true);
            ad.setImage(front);
            form.replacePushbuttonField("Front", ad.getField());


            PushbuttonField ad1 = form.getNewPushbuttonFromField("Back");
            ad1.setLayout(PushbuttonField.LAYOUT_ICON_ONLY);
            ad1.setProportionalIcon(true);
            ad1.setImage(back);
            form.replacePushbuttonField("Back", ad1.getField());
            stamper.setFormFlattening(true);
            stamper.close();
            reader.close();
        }}

错误在这里:BufferedImage bImageFromFront = ImageIO.read(frontIn); infact我的bImageFromFront返回null,所以我在这里有错误

  

ImageIO.write(bImageFromFront," png",baosF);   因为我的bImageFromFront为null。我不明白为什么我有这个错误以及为什么从bufferedImage到ImageIO的转换返回null

0 个答案:

没有答案