+ All Categories
Home > Documents > java source code for pdf viewer

java source code for pdf viewer

Date post: 26-Nov-2014
Category:
Upload: jinu-madhavan
View: 124 times
Download: 1 times
Share this document with a friend
23
package com.pdfviewer; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; import java.nio.channels.FileChannel; import java.text.NumberFormat; import java.util.ArrayList; import java.util.List; import net.sf.andpdf.nio.ByteBuffer; import com.model.PdfAnno; import com.model.PdfReport; import com.pdfviewer.FullScrollView; import net.sf.andpdf.refs.HardReference; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Bitmap.Config; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.util.DisplayMetrics; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener;
Transcript
Page 1: java source code for pdf viewer

package com.pdfviewer;

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.RandomAccessFile;import java.nio.channels.FileChannel;import java.text.NumberFormat;import java.util.ArrayList;import java.util.List;

import net.sf.andpdf.nio.ByteBuffer;

import com.model.PdfAnno;import com.model.PdfReport;import com.pdfviewer.FullScrollView;import net.sf.andpdf.refs.HardReference;import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.graphics.Bitmap.Config;import android.graphics.drawable.Drawable;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.util.DisplayMetrics;import android.util.Log;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;

import com.sun.pdfview.PDFFile;import com.sun.pdfview.PDFImage;import com.sun.pdfview.PDFPage;

Page 2: java source code for pdf viewer

import com.sun.pdfview.PDFPaint;import com.sun.pdfview.decrypt.PDFAuthenticationFailureException;import com.sun.pdfview.decrypt.PDFPassword;import com.test.R;import com.test.StageListActivity;import com.utils.FileUtils;

/** * U:\Android\android-sdk-windows-1.5_r1\tools\adb push u:\Android\simple_T.pdf * /data/test.pdf * * @author ferenc.hechler */public class PdfViewerActivity extends Activity {

private static final int STARTPAGE = 1;private static final float STARTZOOM = 1.0f;

private static final String TAG = "PDFVIEWER";

private final static int MEN_NEXT_PAGE = 1;private final static int MEN_PREV_PAGE = 2;private final static int MEN_GOTO_PAGE = 3;private final static int MEN_ZOOM_IN = 4;private final static int MEN_ZOOM_OUT = 5;private final static int MEN_BACK = 6;private final static int MEN_CLEANUP = 7;private final static int MEN_SAVE = 8;

private final static int DIALOG_PAGENUM = 1;private final static int DIALOG_ANNOTATION = 2;

private GraphView mOldGraphView;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;

private List<PdfAnno> annotations = new ArrayList<PdfAnno>();

@Overridepublic Object onRetainNonConfigurationInstance() {

// return a reference to the current instanceLog.e(TAG, "onRetainNonConfigurationInstance");return this;

}

/** * restore member variables from previously saved instance

Page 3: java source code for pdf viewer

* * @see onRetainNonConfigurationInstance * @return true if instance to restore from was found */private boolean restoreInstance() {

mOldGraphView = null;Log.e(TAG, "restoreInstance");if (getLastNonConfigurationInstance() == null)

return false;PdfViewerActivity inst = (PdfViewerActivity)

getLastNonConfigurationInstance();if (inst != this) {

Log.e(TAG, "restoring Instance");mOldGraphView = inst.mGraphView;mPage = inst.mPage;mPdfFile = inst.mPdfFile;mPdfPage = inst.mPdfPage;mTmpFile = inst.mTmpFile;mZoom = inst.mZoom;pdffilename = inst.pdffilename;backgroundThread = inst.backgroundThread;// mGraphView.invalidate();

}return true;

}

/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

uiHandler = new Handler();restoreInstance();if (mOldGraphView != null) {

mGraphView = new GraphView(this);mGraphView.fileMillis = mOldGraphView.fileMillis;mGraphView.mBi = mOldGraphView.mBi;mGraphView.mLine1 = mOldGraphView.mLine1;mGraphView.mLine2 = mOldGraphView.mLine2;mGraphView.mLine3 = mOldGraphView.mLine3;mGraphView.mText = mOldGraphView.mText;mGraphView.pageParseMillis =

mOldGraphView.pageParseMillis;mGraphView.pageRenderMillis =

mOldGraphView.pageRenderMillis;mOldGraphView = null;mGraphView.mImageView.setImageBitmap(mGraphView.mBi);mGraphView.updateTexts();setContentView(mGraphView);

} else {mGraphView = new GraphView(this);Intent intent = getIntent();Log.i(TAG, "" + intent);

// boolean showImages =//

getIntent().getBooleanExtra(PdfFileSelectActivity.EXTRA_SHOWIMAGES,

Page 4: java source code for pdf viewer

// PdfFileSelectActivity.DEFAULTSHOWIMAGES);PDFImage.sShowImages = true;// boolean antiAlias =//

getIntent().getBooleanExtra(PdfFileSelectActivity.EXTRA_ANTIALIAS,// PdfFileSelectActivity.DEFAULTANTIALIAS);PDFPaint.s_doAntiAlias = true;// boolean keepCaches =//

getIntent().getBooleanExtra(PdfFileSelectActivity.EXTRA_KEEPCACHES,// PdfFileSelectActivity.DEFAULTKEEPCACHES);HardReference.sKeepCaches = false;

if (intent != null) {if

("android.intent.action.VIEW".equals(intent.getAction())) {pdffilename =

storeUriContentToFile(intent.getData());} else {

pdffilename = getIntent().getStringExtra(

StageListActivity.EXTRA_PDFFILENAME);}

}

if (pdffilename == null)pdffilename = "no file selected";

mPage = STARTPAGE;mZoom = STARTZOOM;

setContent(null);

}}

private void setContent(String password) {try {

parsePDF(pdffilename, password);setContentView(mGraphView);startRenderThread(mPage, mZoom);

} catch (PDFAuthenticationFailureException e) {setContentView(R.layout.pdf_file_password);final EditText etPW = (EditText)

findViewById(R.id.etPassword);Button btOK = (Button) findViewById(R.id.btOK);Button btExit = (Button) findViewById(R.id.btExit);btOK.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

String pw = etPW.getText().toString();setContent(pw);

}});btExit.setOnClickListener(new OnClickListener() {

@Override

Page 5: java source code for pdf viewer

public void onClick(View v) {finish();

}});

}}

// that's where it is so slow!!!private synchronized void startRenderThread(final int page, final

float zoom) {if (backgroundThread != null)

return;mGraphView.showText("reading page " + page + ", zoom:" +

zoom);backgroundThread = new Thread(new Runnable() {

@Overridepublic void run() {

try {if (mPdfFile != null) {

// File f = new File("/sdcard/andpdf.trace");

// f.delete();// Log.e(TAG, "DEBUG.START");//

Debug.startMethodTracing("andpdf");showPage(page, zoom);// Debug.stopMethodTracing();// Log.e(TAG, "DEBUG.STOP");

}} catch (Exception e) {

Log.e(TAG, e.getMessage(), e);}backgroundThread = null;

}});updateImageStatus();backgroundThread.start();

}

private void updateImageStatus() {// Log.i(TAG, "updateImageStatus: " +// (System.currentTimeMillis()&0xffff));if (backgroundThread == null) {

mGraphView.updateUi();return;

}mGraphView.updateUi();mGraphView.postDelayed(new Runnable() {

@Overridepublic void run() {

updateImageStatus();}

}, 1000);}

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {

Page 6: java source code for pdf viewer

super.onCreateOptionsMenu(menu);menu.add(Menu.NONE, MEN_PREV_PAGE, Menu.NONE, "Previous

Page");menu.add(Menu.NONE, MEN_NEXT_PAGE, Menu.NONE, "Next Page");menu.add(Menu.NONE, MEN_GOTO_PAGE, Menu.NONE, "Goto Page");menu.add(Menu.NONE, MEN_ZOOM_OUT, Menu.NONE, "Zoom Out");menu.add(Menu.NONE, MEN_ZOOM_IN, Menu.NONE, "Zoom In");menu.add(Menu.NONE, MEN_BACK, Menu.NONE, "Back");menu.add(Menu.NONE, MEN_SAVE, Menu.NONE, "Save");if (HardReference.sKeepCaches)

menu.add(Menu.NONE, MEN_CLEANUP, Menu.NONE, "Clear Caches");

return true;}

/** * Called when a menu item is selected. */@Overridepublic boolean onOptionsItemSelected(MenuItem item) {

super.onOptionsItemSelected(item);switch (item.getItemId()) {case MEN_NEXT_PAGE: {

nextPage();break;

}case MEN_PREV_PAGE: {

prevPage();break;

}case MEN_GOTO_PAGE: {

gotoPage();break;

}case MEN_ZOOM_IN: {

zoomIn();break;

}case MEN_ZOOM_OUT: {

zoomOut();break;

}case MEN_BACK: {

finish();break;

}case MEN_CLEANUP: {

HardReference.cleanup();break;

}case MEN_SAVE: {

save();}}return true;

}

Page 7: java source code for pdf viewer

private void zoomIn() {if (mPdfFile != null) {

if (mZoom < 4) {mZoom *= 1.5;if (mZoom > 4)

mZoom = 4;startRenderThread(mPage, mZoom);

}}

}

private void zoomOut() {if (mPdfFile != null) {

if (mZoom > 0.25) {mZoom /= 1.5;if (mZoom < 0.25)

mZoom = 0.25f;startRenderThread(mPage, mZoom);

}}

}

private void nextPage() {if (mPdfFile != null) {

if (mPage < mPdfFile.getNumPages()) {mPage += 1;startRenderThread(mPage, mZoom);

}}

}

private void prevPage() {if (mPdfFile != null) {

if (mPage > 1) {mPage -= 1;startRenderThread(mPage, mZoom);

}}

}

private void gotoPage() {if (mPdfFile != null) {

showDialog(DIALOG_PAGENUM);}

}

private void save() {

PdfReport report=new PdfReport(pdffilename); report.addAnnotation(annotations); report.save(FileUtils.getUpdateFile(pdffilename)); Toast.makeText(getApplicationContext(),

"UPLOAD SUCCESS!", Toast.LENGTH_SHORT).show();

Page 8: java source code for pdf viewer

}

@Overrideprotected Dialog onCreateDialog(int id) {

switch (id) {case DIALOG_PAGENUM:

LayoutInflater factory = LayoutInflater.from(this);final View pagenumView = factory.inflate(

R.layout.dialog_pagenumber, null);final EditText edPagenum = (EditText) pagenumView

.findViewById(R.id.pagenum_edit);edPagenum.setText(Integer.toString(mPage));return new

AlertDialog.Builder(this).setIcon(R.drawable.icon).setTitle("Jump to

page").setView(pagenumView).setPositiveButton("OK",

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog,

int whichButton) {String

strPagenum = edPagenum.getText()

.toString();int

pageNum = mPage;try {

pageNum = Integer.parseInt(strPagenum);} catch

(NumberFormatException ignore) {}if

((pageNum != mPage)

&& (pageNum >= 1)

&& (pageNum <= mPdfFile

.getNumPages())) {

mPage = pageNum;

startRenderThread(mPage, mZoom);}

}

}).setNegativeButton("Cancel",new

DialogInterface.OnClickListener() {public void

onClick(DialogInterface dialog,

int whichButton) {

Page 9: java source code for pdf viewer

}}).create();

case DIALOG_ANNOTATION:final EditText comment=new

EditText(getApplicationContext());comment.setWidth(250);comment.setHeight(150);return new AlertDialog.Builder(this).setTitle("Nouvelle

Annotation").setView(comment).setPositiveButton("OK",

new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog,

int whichButton) {float

x=mGraphView.getXPercentage();float

y=mGraphView.getYPercentage();String

content=comment.getText().toString();

PdfAnno anno=new PdfAnno();

anno.setX(x);

anno.setY(y);

anno.setContent(content);

anno.setPage(mPage);

annotations.add(anno);

Log.i("PDFVIEWER", "x"+mGraphView.mCurX+" y:"+mGraphView.mCurY+" , " +

"viewleft:"+mGraphView.mImageView.getLeft()+"

,viewTop:"+mGraphView.mImageView.getTop()+"

,mbiWidth:"+mGraphView.mBi.getWidth()+"

,mbiHeight:"+mGraphView.mBi.getHeight()+"

,mPdfPage Width:"+mPdfPage.getWidth()+"

,mPdfPage Height:"+mPdfPage.getHeight()+"

,xp: "+x+" ,yp:"+y);}

Page 10: java source code for pdf viewer

}).setNegativeButton("Cancel",new

DialogInterface.OnClickListener() {public void

onClick(DialogInterface dialog,

int whichButton) {}

}).create();

}return null;

}

private class GraphView extends FullScrollView {private String mText;private long fileMillis;private long pageParseMillis;private long pageRenderMillis;private Bitmap mBi;private String mLine1;private String mLine2;private String mLine3;private ImageView mImageView;// private TextView mLine1View;// private TextView mLine2View;// private TextView mLine3View;private Button mBtPage;private Button mBtPage2;

private boolean mCurDown;private float mCurX;private float mCurY;private float xPercentage;private float yPercentage;

public GraphView(Context context) {super(context);

// layout paramsLinearLayout.LayoutParams lpWrap1 = new

LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,

LayoutParams.WRAP_CONTENT, 1);LinearLayout.LayoutParams lpWrap10 = new

LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,

LayoutParams.WRAP_CONTENT, 10);

// vertical layoutLinearLayout vl = new LinearLayout(context);vl.setLayoutParams(lpWrap10);vl.setOrientation(LinearLayout.VERTICAL);

/* * mLine1 = "PDF Viewer initializing"; mLine1View = new

Page 11: java source code for pdf viewer

* TextView(context); mLine1View.setLayoutParams(lpWrap1);

* mLine1View.setText(mLine1); mLine1View.setTextColor(Color.BLACK);

* vl.addView(mLine1View); * * mLine2 = "unknown number of pages"; mLine2View = new * TextView(context);

mLine2View.setLayoutParams(lpWrap1); * mLine2View.setText(mLine2);

mLine2View.setTextColor(Color.BLACK); * vl.addView(mLine2View); * * mLine3 = "unknown timestamps"; mLine3View = new * TextView(context);

mLine3View.setLayoutParams(lpWrap1); * mLine3View.setText(mLine3);

mLine3View.setTextColor(Color.BLACK); * vl.addView(mLine3View); */addNavButtons(vl);// remember page button for updatesmBtPage2 = mBtPage;

mImageView = new ImageView(context);setPageBitmap(null);updateImage();mImageView.setLayoutParams(lpWrap1);mImageView.setPadding(5, 5, 5, 5);vl.addView(mImageView);

// addNavButtons(vl);

setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,

LayoutParams.FILL_PARENT, 100));setBackgroundColor(Color.LTGRAY);setHorizontalScrollBarEnabled(true);setHorizontalFadingEdgeEnabled(true);setVerticalScrollBarEnabled(true);setVerticalFadingEdgeEnabled(true);addView(vl);

}

private void addNavButtons(ViewGroup vg) {

addSpace(vg, 6, 6);

LinearLayout.LayoutParams lpChild1 = new LinearLayout.LayoutParams(

LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1);

LinearLayout.LayoutParams lpWrap10 = new LinearLayout.LayoutParams(

LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 10);

Page 12: java source code for pdf viewer

Context context = vg.getContext();LinearLayout hl = new LinearLayout(context);hl.setLayoutParams(lpWrap10);hl.setOrientation(LinearLayout.HORIZONTAL);

// zoom out buttonButton bZoomOut = new Button(context);bZoomOut.setLayoutParams(lpChild1);bZoomOut.setText("-");bZoomOut.setWidth(40);bZoomOut.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

zoomOut();}

});hl.addView(bZoomOut);

// zoom in buttonButton bZoomIn = new Button(context);bZoomIn.setLayoutParams(lpChild1);bZoomIn.setText("+");bZoomIn.setWidth(40);bZoomIn.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

zoomIn();}

});hl.addView(bZoomIn);

addSpace(hl, 6, 6);

// prev buttonButton bPrev = new Button(context);bPrev.setLayoutParams(lpChild1);bPrev.setText("<");bPrev.setWidth(40);bPrev.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

prevPage();}

});hl.addView(bPrev);

// page buttonmBtPage = new Button(context);mBtPage.setLayoutParams(lpChild1);String maxPage = ((mPdfFile == null) ? "?" : Integer

.toString(mPdfFile.getNumPages()));mBtPage.setText(mPage + "/" + maxPage);mBtPage.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

gotoPage();

Page 13: java source code for pdf viewer

}});hl.addView(mBtPage);

// next buttonButton bNext = new Button(context);bNext.setLayoutParams(lpChild1);bNext.setText(">");bNext.setWidth(40);bNext.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

nextPage();}

});hl.addView(bNext);

addSpace(hl, 20, 20);

// exit buttonButton bExit = new Button(context);bExit.setLayoutParams(lpChild1);bExit.setText("Back");bExit.setWidth(60);bExit.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

finish();}

});hl.addView(bExit);

addSpace(hl, 20, 20);

// add save buttonButton bSave = new Button(context);bSave.setLayoutParams(lpChild1);bSave.setText("Save");bSave.setWidth(100);bSave.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

save();}

});hl.addView(bSave);

vg.addView(hl);

addSpace(vg, 6, 6);}

private void addSpace(ViewGroup vg, int width, int height) {TextView tvSpacer = new TextView(vg.getContext());tvSpacer.setLayoutParams(new

LinearLayout.LayoutParams(width,height, 1));

Page 14: java source code for pdf viewer

tvSpacer.setText("");// tvSpacer.setWidth(width);// tvSpacer.setHeight(height);vg.addView(tvSpacer);

}

private void showText(String text) {Log.i(TAG, "ST='" + text + "'");mText = text;updateUi();

}

private void updateUi() {uiHandler.post(new Runnable() {

@Overridepublic void run() {

updateTexts();}

});}

private void updateImage() {uiHandler.post(new Runnable() {

@Overridepublic void run() {

mImageView.setImageBitmap(mBi);}

});}

private void setPageBitmap(Bitmap bi) {if (bi != null)

mBi = bi;else {

mBi = Bitmap.createBitmap(700, 500, Config.RGB_565);

Canvas can = new Canvas(mBi);can.drawColor(Color.GRAY);

Paint paint = new Paint();paint.setColor(Color.GRAY);can.drawCircle(100, 100, 100, paint);

can.drawBitmap(loadLogo(), 50, 50, paint);

paint.setStrokeWidth(3);paint.setTextSize(50);paint.setColor(Color.BLACK);

String pdfname=pdffilename.split("/")[2];can.drawText("Bienvenue! PDF "+pdfname+" will

show here later ", 50, 400, paint);}

}

Page 15: java source code for pdf viewer

protected void updateTexts() {mLine1 = "PdfViewer: " + mText;float fileTime = fileMillis * 0.001f;float pageRenderTime = pageRenderMillis * 0.001f;float pageParseTime = pageParseMillis * 0.001f;mLine2 = "render page=" + format(pageRenderTime, 2)

+ ", parse page=" + format(pageParseTime, 2)

+ ", parse file=" + format(fileTime, 2);

int maxCmds = PDFPage.getParsedCommands();int curCmd = PDFPage.getLastRenderedCommand() + 1;mLine3 = "PDF-Commands: " + curCmd + "/" + maxCmds;// mLine1View.setText(mLine1);// mLine2View.setText(mLine2);// mLine3View.setText(mLine3);if (mPdfPage != null) {

if (mBtPage != null)

mBtPage.setText(mPdfPage.getPageNumber() + "/"+

mPdfFile.getNumPages());if (mBtPage2 != null)

mBtPage2.setText(mPdfPage.getPageNumber() + "/"+

mPdfFile.getNumPages());}

}

private String format(double value, int num) {NumberFormat nf = NumberFormat.getNumberInstance();nf.setGroupingUsed(false);nf.setMaximumFractionDigits(num);String result = nf.format(value);return result;

}

public Bitmap loadLogo() {Resources r = this.getContext().getResources();Drawable logo = r.getDrawable(R.drawable.ece_logo);Bitmap bitmap = Bitmap.createBitmap(400, 300,

Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);logo.setBounds(0, 0, 450, 300);logo.draw(canvas);return bitmap;

}

@Overridepublic boolean onTouchEvent(MotionEvent event) {

int action = event.getAction();mCurDown = action == MotionEvent.ACTION_DOWN

|| action == MotionEvent.ACTION_MOVE;

mCurX=event.getX();

Page 16: java source code for pdf viewer

mCurY=event.getY();

// DisplayMetrics dm = new DisplayMetrics();// getWindowManager().getDefaultDisplay().getMetrics(dm);//

if(mCurX<mBi.getWidth()&&mCurY>mImageView.getTop()){//relative position

setXPercentage((mCurX-mImageView.getLeft())/mBi.getWidth());

setYPercentage(1-(mCurY-mImageView.getTop())/mBi.getHeight());

showDialog(DIALOG_ANNOTATION);}

/*int N = event.getHistorySize();for (int i = 0; i < N; i++) {

Log.i("TouchPaint", "Intermediate pointer #" + i);

drawPoint(event.getHistoricalX(i), event.getHistoricalY(i),

event.getHistoricalPressure(i), event

.getHistoricalSize(i));}drawPoint(event.getX(), event.getY(),

event.getPressure(), event.getSize());

*/

return true;}

private void drawPoint(float x, float y, float pressure, float size) {

Canvas can = new Canvas(mBi);Paint mPaint = new Paint();mPaint.setARGB((int) (pressure * 255), 255, 255, 255);can.drawCircle(x, y, 50, mPaint);RectF mRect = new RectF();mRect.set(x - 1 - 2, y - 1 - 2, x + 1 + 2, y + 1 + 2);

}

public void setXPercentage(float xPercentage) {this.xPercentage = xPercentage;

}public void setYPercentage(float yPercentage) {

this.yPercentage = yPercentage;}

Page 17: java source code for pdf viewer

public float getXPercentage() {return xPercentage;

}

public float getYPercentage() {return yPercentage;

}}

private void showPage(int page, float zoom) throws Exception {long startTime = System.currentTimeMillis();long middleTime = startTime;try {

mPdfPage = mPdfFile.getPage(page, true);int num = mPdfPage.getPageNumber();int maxNum = mPdfFile.getNumPages();float wi = mPdfPage.getWidth();float hei = mPdfPage.getHeight();String pageInfo = new File(pdffilename).getName() + " -

" + num+ "/" + maxNum + ": " + wi + "x" + hei;

mGraphView.showText(pageInfo);Log.i(TAG, pageInfo);RectF clip = null;middleTime = System.currentTimeMillis();Bitmap bi = mPdfPage.getImage((int) (wi * zoom),

(int) (hei * zoom), clip, true, true);mGraphView.setPageBitmap(bi);mGraphView.updateImage();

} catch (Throwable e) {Log.e(TAG, e.getMessage(), e);mGraphView.showText("Exception: " + e.getMessage());

}long stopTime = System.currentTimeMillis();mGraphView.pageParseMillis = middleTime - startTime;mGraphView.pageRenderMillis = stopTime - middleTime;

}

private void parsePDF(String filename, String password)throws PDFAuthenticationFailureException {

long startTime = System.currentTimeMillis();try {

File f = new File(filename);long len = f.length();if (len == 0) {

mGraphView.showText("file '" + filename + "' not found");

} else {mGraphView.showText("file '" + filename + "'

has " + len+ " bytes");

openFile(f, password);}

} catch (PDFAuthenticationFailureException e) {throw e;

} catch (Throwable e) {

Page 18: java source code for pdf viewer

e.printStackTrace();mGraphView.showText("Exception: " + e.getMessage());

}long stopTime = System.currentTimeMillis();mGraphView.fileMillis = stopTime - startTime;

}

/** * <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, String password) throws IOException {

// first open the file for random accessRandomAccessFile raf = new RandomAccessFile(file, "r");

// extract a file channelFileChannel channel = raf.getChannel();

// now memory-map a byte-bufferByteBuffer bb = ByteBuffer.NEW(channel.map(

FileChannel.MapMode.READ_ONLY, 0, channel.size()));

// create a PDFFile from the dataif (password == null)

mPdfFile = new PDFFile(bb);else

mPdfFile = new PDFFile(bb, new PDFPassword(password));

mGraphView.showText("Anzahl Seiten:" + mPdfFile.getNumPages());

}

private byte[] readBytes(File srcFile) throws IOException {long fileLength = srcFile.length();int len = (int) fileLength;byte[] result = new byte[len];FileInputStream fis = new FileInputStream(srcFile);int pos = 0;int cnt = fis.read(result, pos, len - pos);while (cnt > 0) {

pos += cnt;cnt = fis.read(result, pos, len - pos);

}return result;

}

Page 19: java source code for pdf viewer

private String storeUriContentToFile(Uri uri) {String result = null;try {

if (mTmpFile == null) {File root =

Environment.getExternalStorageDirectory();if (root == null)

throw new Exception("external storage dir not found");

mTmpFile = new File(root,

"AndroidPdfViewer/AndroidPdfViewer_temp.pdf");mTmpFile.getParentFile().mkdirs();mTmpFile.delete();

} else {mTmpFile.delete();

}InputStream is =

getContentResolver().openInputStream(uri);OutputStream os = new FileOutputStream(mTmpFile);byte[] buf = new byte[1024];int cnt = is.read(buf);while (cnt > 0) {

os.write(buf, 0, cnt);cnt = is.read(buf);

}os.close();is.close();result = mTmpFile.getCanonicalPath();mTmpFile.deleteOnExit();

} catch (Exception e) {Log.e(TAG, e.getMessage(), e);

}return result;

}

@Overrideprotected void onDestroy() {

super.onDestroy();if (mTmpFile != null) {

mTmpFile.delete();mTmpFile = null;

}}

}


Recommended