problem with PDF Image JBIG2 Compression with the image binary

the process destroy the imagePDF :
https://imgur.com/a/fhCo2Gz

//sorry for the images attached this is provided for my developer

Hi Miguel,

It’s unclear what is the question and we are unable to reproduce the issue. To help you we would need a working code snippet along with sample input/output document, so that we can reproduce the issue on our end.

If you are reporting a bug please use https://www.pdftron.com/form/report-bug
if you are an existing customer looking for support, please use https://www.pdftron.com/form/request

hi im and existing customer
here is the code snipet using createPDF() :

package com.smart.scanner.common.PDFHelper;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.Bundle;

import com.pdftron.common.Matrix2D;
import com.pdftron.common.PDFNetException;
import com.pdftron.filters.Filter;
import com.pdftron.filters.FilterReader;
import com.pdftron.pdf.ColorSpace;
import com.pdftron.pdf.Element;
import com.pdftron.pdf.ElementBuilder;
import com.pdftron.pdf.ElementReader;
import com.pdftron.pdf.ElementWriter;
import com.pdftron.pdf.Flattener;
import com.pdftron.pdf.Image;
import com.pdftron.pdf.Optimizer;
import com.pdftron.pdf.PDFDoc;
import com.pdftron.pdf.Page;
import com.pdftron.pdf.PageIterator;
import com.pdftron.pdf.Rect;
import com.pdftron.sdf.Obj;
import com.pdftron.sdf.ObjSet;
import com.pdftron.sdf.SDFDoc;
import com.smart.scanner.common.Constant;
import com.smart.scanner.common.db.DBManager;
import com.smart.scanner.common.utils.ImageUtil;
import com.smart.scanner.model.Document;

import java.util.ArrayList;
import java.util.List;

public class PDFTronHelper {

public static void createPDF(Context context, List imgPathList, String strPDFPath, boolean bOptimize) throws PDFNetException {

PDFDoc doc = new PDFDoc();

ElementBuilder f = new ElementBuilder(); // Used to build new Element objects
ElementWriter writer = new ElementWriter(); // Used to write Elements to the page

for (String strImgPath : imgPathList) {

Page page = doc.pageCreate(); // Start a new page
writer.begin(page); // Begin writing to this page

// ----------------------------------------------------------
// Add JPEG image to the output file
Image img = Image.create(doc.getSDFDoc(), strImgPath);
int imgWidth = img.getImageWidth();
int imgHeight = img.getImageHeight();

Filter filter = img.getSDFObj().getDecodedStream();
FilterReader reader = new FilterReader(filter);

ObjSet hintSet = new ObjSet();
Obj hint = hintSet.createArray();
hint.pushBackName(“JBIG2”);
hint.pushBackName(“Lossless”);

Image new_image = Image.create(doc.getSDFDoc(), reader,
imgWidth, imgHeight, 1, ColorSpace.createDeviceGray(), hint);

page.setMediaBox(new Rect(0, 0, imgWidth, imgHeight));
Element element = f.createImage(new_image, new Matrix2D(imgWidth, 0, 0, imgHeight, 0, 0));
writer.writePlacedElement(element);

writer.end(); // Save the page
doc.pagePushBack(page); // Add the page to the document page sequence
}

if (bOptimize) {
doc.initSecurityHandler();
Optimizer.ImageSettings imageSettings = new Optimizer.ImageSettings();
imageSettings.setCompressionMode(Optimizer.ImageSettings.e_jpeg);
imageSettings.setQuality(4);
imageSettings.setImageDPI(225, 150);
imageSettings.forceRecompression(true);

Optimizer.OptimizerSettings optimizerSettings = new Optimizer.OptimizerSettings();
optimizerSettings.setColorImageSettings(imageSettings);
optimizerSettings.setGrayscaleImageSettings(imageSettings);

Optimizer.optimize(doc, optimizerSettings);
}

doc.save(strPDFPath, SDFDoc.SaveMode.LINEARIZED, null);
doc.close();

}

public static void updateImagesFromPDF(Document docContainer, Context context) throws PDFNetException {

ArrayList docPageList = new ArrayList();
DBManager.getInstance().getDocuments(docPageList, docContainer.uid);
if (docPageList.isEmpty())
return;

int cnt = 0;
String strPDFPath = docContainer.generateLocalPath();

PDFDoc doc = new PDFDoc(strPDFPath);
doc.initSecurityHandler();

ElementReader reader = new ElementReader();
// Read every page

for (PageIterator itr = doc.getPageIterator(); itr.hasNext(); ) {
reader.begin((Page) (itr.next()));
Document docPage = docPageList.get(cnt);
ImageExtract(reader, docPage, null, context);
cnt++;
reader.end();
}

doc.close();
}

public static void getImagesFromPDF(Document docContainer, Context context) throws PDFNetException {

String strPDFPath = docContainer.generateLocalPath();

PDFDoc doc = new PDFDoc(strPDFPath);
doc.initSecurityHandler();

ElementReader reader = new ElementReader();
// Read every page

for (PageIterator itr = doc.getPageIterator(); itr.hasNext(); ) {
reader.begin((Page) (itr.next()));
Document docPage = new Document(docContainer.uid);
docPage.docType = 0;
ImageExtract(reader, docPage, docContainer, context);
reader.end();
}

doc.close();
}

static void ImageExtract(ElementReader reader, Document docPage, Document docContainer, Context context) throws PDFNetException {
Element element;
while ((element = reader.next()) != null) {
switch (element.getType()) {
case Element.e_image:
case Element.e_inline_image: {

Matrix2D ctm = element.getCTM();
double x2 = 1, y2 = 1;
ctm.multPoint(x2, y2);

if (element.getType() == Element.e_image) {

Obj obj = element.getXObject();
if (obj == null)
continue;

Image imageOrg = new Image(obj);
Image imageCropOrg = new Image(obj);
Image imageCropWork = new Image(obj);

String strOrgPath = ImageUtil.generateImaePath(“ORG”, context);
imageOrg.export(strOrgPath);
String strCropOrgPath = ImageUtil.generateImaePath(“CROP_ORG”, context);
imageCropOrg.export(strCropOrgPath);
String strCropWorkPath = ImageUtil.generateImaePath(“CROP_WORK”, context);
imageCropWork.export(strCropWorkPath);

Bitmap bmpThumb = ImageUtil.makeThumb(imageOrg.getBitmap(), Constant.THUMB_IMAGE_SIZE);
String strThumbPath = ImageUtil.saveImage(bmpThumb, “THUMB”, context);

docPage.imgOrg = strOrgPath + “.jpg”;
docPage.imgCropOrg = strCropOrgPath + “.jpg”;
docPage.imgCropWork = strCropWorkPath + “.jpg”;
docPage.imgThumb = strThumbPath;

if (docContainer != null) {
if (docContainer.imgThumb.isEmpty()) {
docContainer.imgThumb = ImageUtil.saveImage(bmpThumb, “THUMB”, context);
}

DBManager.getInstance().addDocument(docPage);
} else {
DBManager.getInstance().updateDocument(docPage);
}
}
}
break;
case Element.e_form: // Process form XObjects
reader.formBegin();
ImageExtract(reader, docPage, docContainer, context);
reader.end();
break;
}
}
}

public static String getLicenseKey(Context applicationContext) {
try {
ApplicationInfo ai = applicationContext.getPackageManager().getApplicationInfo(
applicationContext.getPackageName(),
PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
return bundle.getString(“pdftron_license_key”);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}

}

Hi Miguel,

I see that your college has created a ticket via out ticketing system. We will continue the discussion there.

Thank you.