How to convert a pdf to an image?
Finally i found the solution. We can't use awt with Android, so, finally go for the pdf viewver lib on http://sourceforge.net/projects/andpdf/files/
Find out the apk and also source for pdf to image.
Here is myclass to convert pdf to image:
package com.print;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import net.sf.andpdf.nio.ByteBuffer;
import net.sf.andpdf.refs.HardReference;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.RectF;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFImage;
import com.sun.pdfview.PDFPage;
import com.sun.pdfview.PDFPaint;
import com.sun.pdfview.decrypt.PDFAuthenticationFailureException;
import com.sun.pdfview.font.PDFFont;
public class Transformer extends Activity{
/////////////////////////////////////////////
private static final int STARTPAGE = 1;
private static final float STARTZOOM = 1.0f;
private static final String TAG = "PDFVIEWER";
Bitmap _bitmap=null;
// private GraphView mGraphView;
private String pdffilename;
private PDFFile mPdfFile;
private int mPage;
private float mZoom;
private File mTmpFile;
private PDFPage mPdfPage;
private Thread backgroundThread;
private Handler uiHandler;
ImageView myimg;
TextView command;
Context context;
ProgressDialog _p=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.trans);
context=Transformer.this;
uiHandler = new Handler();
initContrils();
}
private void initContrils() {
// TODO Auto-generated method stub
boolean showImages = getIntent().getBooleanExtra(printDemo.EXTRA_SHOWIMAGES, true);
PDFImage.sShowImages = showImages;
boolean antiAlias = getIntent().getBooleanExtra(printDemo.EXTRA_ANTIALIAS, true);
PDFPaint.s_doAntiAlias = antiAlias;
boolean useFontSubstitution = getIntent().getBooleanExtra(printDemo.EXTRA_USEFONTSUBSTITUTION, false);
PDFFont.sUseFontSubstitution= useFontSubstitution;
boolean keepCaches = getIntent().getBooleanExtra(printDemo.EXTRA_KEEPCACHES, false);
HardReference.sKeepCaches= keepCaches;
if (this.getIntent() != null) {
pdffilename = getIntent().getStringExtra(printDemo.EXTRA_PDFFILENAME);
}
mPage = STARTPAGE;
mZoom = STARTZOOM;
myimg=(ImageView)findViewById(R.id.imageView1);
command=(TextView)findViewById(R.id.textView1);
_p=new ProgressDialog(context);
_p.setMessage("Converting........");
_p.setCancelable(false);
_p.show();
setContent();
}
private void setContent() {
try {
parsePDF(pdffilename);
startRenderThread(mPage, mZoom);
}
catch (PDFAuthenticationFailureException e) {
Log.e("Amit...","Error....");
}
}
private synchronized void startRenderThread(final int page, final float zoom) {
Log.e("Amit","renderrar");
if (backgroundThread != null)
return;
backgroundThread = new Thread(new Runnable() {
@Override
public void run() {
try {
if (mPdfFile != null) {
showPage(page, zoom);
}
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
}
backgroundThread = null;
}
});
updateImageStatus();
backgroundThread.start();
}
private void updateImageStatus() {
if (backgroundThread == null) {
updateTexts();
return;
}
uiHandler.postDelayed(new Runnable() {
@Override public void run() {
updateImageStatus();
}
}, 1000);
}
/*
private void setPageBitmap(Bitmap bi) {
if (bi != null)
_bitmap = bi;
else {
_bitmap = Bitmap.createBitmap(100, 100, Config.RGB_565);
Canvas can = new Canvas(_bitmap);
can.drawColor(Color.RED);
Paint paint = new Paint();
paint.setColor(Color.BLUE);
can.drawCircle(50, 50, 50, paint);
paint.setStrokeWidth(0);
paint.setColor(Color.BLACK);
can.drawText("Bitmap", 10, 50, paint);
}
}*/
protected void updateTexts() {
int maxCmds = PDFPage.getParsedCommands();
int curCmd = PDFPage.getLastRenderedCommand()+1;
if(maxCmds==curCmd){
_p.dismiss();
finish();
Log.e("Amit","check update_finish()");
}else {
setContent();
Log.e("Amit","check update_again");
}
}
private Bitmap showPage(int page, float zoom) throws Exception {
Bitmap b=null;
try {
Log.e("amit","Go to page bitmap");
mPdfPage = mPdfFile.getPage(page, true);
float wi = mPdfPage.getWidth();
float hei = mPdfPage.getHeight();
RectF clip = null;
Bitmap bi = mPdfPage.getImage((int)(wi*zoom), (int)(hei*zoom), clip, true, true);
b=bi;
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
File f = new File(Environment.getExternalStorageDirectory()+ File.separator + "Firstpdf.jpg");
f.createNewFile();
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
Log.e("amit","Go to page bitmap______SAVE");
} catch (Throwable e) {
Log.e(TAG, e.getMessage(), e);
}
return b;
}
private void parsePDF(String filename) throws PDFAuthenticationFailureException {
try {
File f = new File(filename);
long len = f.length();
if (len == 0) {
Log.e("amit","No file found");
}
else {
Log.e("amit","file '" + filename + "' has " + len + " bytes");
openFile(f);
}
}
catch (PDFAuthenticationFailureException e) {
throw e;
} catch (Throwable e) {
e.printStackTrace();
}
}
/**
* <p>Open a specific pdf file. Creates a DocumentInfo from the file,
* and opens that.</p>
*
* <p><b>Note:</b> Mapping the file locks the file until the PDFFile
* is closed.</p>
*
* @param file the file to open
* @throws IOException
*/
public void openFile(File file) throws IOException {
// first open the file for random access
RandomAccessFile raf = new RandomAccessFile(file, "r");
// extract a file channel
FileChannel channel = raf.getChannel();
// now memory-map a byte-buffer
ByteBuffer bb =
ByteBuffer.NEW(channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size()));
// create a PDFFile from the data
mPdfFile = new PDFFile(bb);
Log.e("Amit","Pages-----"+mPdfFile.getNumPages());
}
}
Add a Bitmap image in a PDF document in Android
I just solve it:
document.open();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 100 , stream);
Image myImg = Image.getInstance(stream.toByteArray());
myImg.setAlignment(Image.MIDDLE);
document.add(myImg);
in the FileOperations class
Related Topics
How to Put Multiple Project_Number/Sender Id in Google-Services.JSON
Accessing Localhost of Pc from Usb Connected Android Mobile Device
Android: Accessing Assets Folder SQLite Database File with .Sqlite Extension
Adb' Is Not Recognized as an Internal or External Command, Operable Program or Batch File
Why Use Fragment#Setretaininstance(Boolean)
Alarmmanager Fires Alarms at Wrong Time
How to Get the Dialer to Open with Phone Number Displayed
Use a Local Database in Xamarin
Best Practice: Asynctask During Orientation Change
Recommended Way/Order to Read Data from a Webservice, Parse That Data and Insert It in a SQLite Db
What Does Google-Services.JSON Really Do
How to Pass Arraylist of Objects from One to Another Activity Using Intent in Android
Webview Load Website When Online, Load Local File When Offline
Change Locale Not Work After Migrate to Androidx
Cannot Retrieve Field Values from Realm Object, Values Are Null in Debugger