package co.smartreceipts.android.workers.reports.pdf.renderer.imagex;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.annotation.NonNull;
import com.google.common.base.Preconditions;
import com.tom_roush.pdfbox.pdmodel.PDDocument;
import com.tom_roush.pdfbox.pdmodel.graphics.image.JPEGFactory;
import com.tom_roush.pdfbox.pdmodel.graphics.image.LosslessFactory;
import com.tom_roush.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.commons.io.IOUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import co.smartreceipts.android.utils.UriUtils;
public class ImagePDImageXFactory implements PDImageXFactory {
private final Context context;
private final PDDocument pdDocument;
private final File file;
public ImagePDImageXFactory(@NonNull Context context, @NonNull PDDocument pdDocument, @NonNull File file) {
this.context = Preconditions.checkNotNull(context.getApplicationContext());
this.pdDocument = Preconditions.checkNotNull(pdDocument);
this.file = Preconditions.checkNotNull(file);
}
@NonNull
public PDImageXObject get() throws IOException {
final String fileExtension = UriUtils.getExtension(file, context);
Preconditions.checkNotNull(fileExtension, "This file does not have a valid extension: " + file);
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(file);
if (fileExtension.toLowerCase().equals("jpg") || fileExtension.toLowerCase().equals("jpeg")) {
return JPEGFactory.createFromStream(pdDocument, fileInputStream);
} else if (fileExtension.toLowerCase().equals("png")) {
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(fileInputStream);
return LosslessFactory.createFromImage(pdDocument, bitmap);
} finally {
if (bitmap != null) {
bitmap.recycle();
}
}
} else {
throw new IllegalArgumentException("Unknown file extension: " + fileExtension);
}
} finally {
IOUtils.closeQuietly(fileInputStream);
}
}
}