我正在尝试将输入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