9

Using pdfbox displays an error:

import java.awt
import javax`

Based on the following code:

imageType = BufferedImage.TYPE_INT_ARGB; //need to specifies java.awt
String[] formats = ImageIO.getReaderFormatNames(); //need to specifies javax
Jonathan Soifer
  • 2,715
  • 6
  • 27
  • 50
Amit
  • 409
  • 1
  • 5
  • 12
  • 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.... thenx, sorry for my english.... – Amit Jul 04 '12 at 13:06

3 Answers3

7

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());
        }



}
Echilon
  • 10,064
  • 33
  • 131
  • 217
Amit
  • 409
  • 1
  • 5
  • 12
  • Please let me know about the license that's being utilized by this software pointed to, in your link above. I'm looking for something which is NON GPL/LGPL... Thanks for your help – Sdr Apr 10 '13 at 16:41
  • Hello Immy i already so many solutions for PDF to image but not getting any proper way. I couldn't find any free library(jar) for PDF to image. and how to implement that jar on my activity class...? please to guide me... – Mihir Trivedi Sep 16 '13 at 07:26
  • 3
    This doesn't work on API's below 21. Still awt error is not solved. Also printDemo is not defined. Could you maybe add the link to the library you used rather then the apk?Thanks – Jan Ziesse Jan 11 '16 at 10:43
  • 1
    Anything for API < 21 ? – Jaydev May 23 '16 at 20:15
3

Wasted few days searching for LGPL PDF library for Android. PdfRenderer introduced in API level 21 is the best solution for PDF to image.

Sample code:

 // create a new renderer
 PdfRenderer renderer = new PdfRenderer(getSeekableFileDescriptor());

 // let us just render all pages
 final int pageCount = renderer.getPageCount();
 for (int i = 0; i < pageCount; i++) {
     Page page = renderer.openPage(i);

     // say we render for showing on the screen
     page.render(mBitmap, null, null, Page.RENDER_MODE_FOR_DISPLAY);

     // do stuff with the bitmap

     // close the page
     page.close();
 }
 // close the renderer
 renderer.close();

    private ParcelFileDescriptor getSeekableFileDescriptor()
    {
        ParcelFileDescriptor fd = null;
        try
        {
            fd = ParcelFileDescriptor.open(new File("PATH TO YOUR PDF"),
                    ParcelFileDescriptor.MODE_READ_ONLY);
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        return fd;
    }

Hope this helps someone.

Roy
  • 673
  • 11
  • 21
0

Check out this library https://github.com/barteksc/AndroidPdfViewer After several weeks of searching, this is the only library I found that:

  • Supports Android API 14 (and possibly lower, but I haven't tested it).
  • Uses a license that fits my needs (Apache License 2.0).
  • Actually loads PDFs without throwing errors.
Paul Wintz
  • 2,542
  • 1
  • 19
  • 33