您的位置:首页 > 移动开发 > Android开发

android打开office资源

2016-12-16 10:38 357 查看
我们都知道安卓打开office资源可以用浏览器打开,但是需要翻墙,而iOS打开只需要自带的webview就能打开。真是坑人啊






我找了半天找到poi,然后自己改了下,实现了office资源的展示。下面就为大家来介绍我的思路

工具:eclipse,android-poi.jar

1.android打开doc资源

思路:把下载下来的doc文档转化为webview支持的html文件,用webview打开

步骤:先下载资源到sd卡里面,拿到路径。可能用到的类有

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.PicturesManager;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.PictureType;
import org.w3c.dom.Document;
这么几个poi的类

拿到文件路径,用下面的方法
public void convert2Html(String fileName, String outPutFile)
throws TransformerException, IOException,
ParserConfigurationException,OutOfMemoryError{
HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(
fileName));
WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
DocumentBuilderFactory.newInstance().newDocumentBuilder()
.newDocument());
// 设置图片路径
wordToHtmlConverter.setPicturesManager(new PicturesManager() {
public String savePicture(byte[] content, PictureType pictureType,
String suggestedName, float widthInches, float heightInches) {
// 相对html路径
return suggestedName;
}
});
// 保存图片
List<Picture> pics = wordDocument.getPicturesTable().getAllPictures();
File file1 = new File(savePath);
if (pics != null) {
for (int i = 0; i < pics.size(); i++) {
Picture pic = (Picture) pics.get(i);
try {
pic.writeImageContent(new FileOutputStream(new File(file1
.getPath() + "/" + pic.suggestFullFileName())));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
wordToHtmlConverter.processDocument(wordDocument);
Document htmlDocument = wordToHtmlConverter.getDocument();
ByteArrayOutputStream out = new ByteArrayOutputStream();
DOMSource domSource = new DOMSource(htmlDocument);
StreamResult streamResult = new StreamResult(out);

TransformerFactory tf = TransformerFactory.newInstance();
Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
serializer.setOutputProperty(OutputKeys.METHOD, "html");
serializer.transform(domSource, streamResult);
out.close();
// 保存html文件
writeFile(new String(out.toByteArray()), outPutFile);

}

// 将html文件保存到sd卡
public void writeFile(String content, String path) {
FileOutputStream fos = null;
BufferedWriter bw = null;
try {
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
}
fos = new FileOutputStream(file);
bw = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"));
bw.write(content);
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
try {
if (bw != null)
bw.close();
if (fos != null)
fos.close();
} catch (IOException ie) {
}
}
}
filename是文件路径,ouputfile是转化后的文件保存路径。
转化完成后用webview加载本地html即可
// WebView加载显示本地html文件
webView.loadUrl("file://" +
savePath + docName + ".html");
现在这个方法支持doc文件,docx文件不支持,还没找到方法。

2.打开ppt文件(这个功能可能有点简单,只是单纯的展示作用)
思路:ppt文件--转化为多张图片--用webview来展示(原因:由于功能需求:做成展示功能,所以ppt里面的东西不能点击,播放声音)
用到的poi的类有

import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.usermodel.SlideShow;

将ppt转换为图片
初始化slide和slideshow
//path文件路径
ppt = new SlideShow(new File(path));
//ppt总页数
pgsize = ppt.getPageSize();

slide = ppt.getSlides();

slideCount = slide.length;

转化png
/**
* 生成图片
*/

private void addImageView(final int pos) {
final Bitmap bmp = Bitmap.createBitmap((int) pgsize.getWidth(), (int) pgsize.getHeight(), Config.RGB_565);
Canvas canvas = new Canvas(bmp);
Paint paint = new Paint();
paint.setColor(android.graphics.Color.WHITE);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
canvas.drawPaint(paint);
final Graphics2D graphics2d = new Graphics2D(canvas);
final AtomicBoolean isCanceled = new AtomicBoolean(false);
// render
Thread runnable = new Thread() {
@Override
public void run() {
try {
if(slide==null){
return;
}
slide[pos].draw(graphics2d, isCanceled, handler, pos);
Message msg = handler.obtainMessage();
// msg.obj = imageView;
// imageView.setTag(bmp);
write(Bitmap2Bytes(bmp), pos);
msg.what = 3;
msg.arg1 = pos;
handler.sendMessage(msg);
if(bmp!=null&&!bmp.isRecycled()){
bmp.recycle();
}
} catch (Exception e) {
Message msg = handler.obtainMessage();
try {
slide[pos + 1].draw(graphics2d, isCanceled, handler, pos);

// msg.obj = imageView;
// imageView.setTag(bmp);
try {
write(Bitmap2Bytes(bmp), pos + 1);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
msg.what = 3;
msg.arg1 = pos + 1;
handler.sendMessage(msg);
if (bmp != null && !bmp.isRecycled()) {
bmp.recycle();
}
} catch (Exception e2) {
msg.what = 3;
msg.arg1 = pos + 1;
handler.sendMessage(msg);
}
} catch (OutOfMemoryError e) {
// Toast.makeText(getActivity(), "打开异常,请重新打开",
// Toast.LENGTH_LONG).show();
System.gc();
}
}
};
runnable.start();
}


这个poi有些图片会生成不出来,所以有时候就会缺失,但是大部分的ppt都是能够完整生成出来的。
最后图片在一个file里面,按生成的顺序,里面的排列也是按顺序来的,所以可以直接用webview展示
private void load
4000
WebView() {
File fiele = new File(pptPath);
File[] files = fiele.listFiles();
if (files.length != 0) {
loadingdialog.dismiss();
String data = "<html>" + "<body align=center>" +
getImagesHtml(files) + "</body>" +
"</html>";
Log.e("网页html", data);
mWebView.getSettings().setAllowFileAccess(true);
mWebView.loadDataWithBaseURL("file://" + pptPath, data, "text/html", "UTF-8", null);
}
}

private String getImagesHtml(File[] file) {
String data = "";
for (File file2 : file) {
data += "<img" + " src=file://" + file2.getAbsolutePath() + " width=" + pgsize.getWidth() + " height="
+ (pgsize.getHeight() + ScreenSizeUtil.Dp2Px(getActivity(), 48)) + " display:block; margin:0 auto;" + "><br/>";
}
return data;
}



3.打开pdf资源

直接上主代码
package org.ebookdroid.core;

import java.io.File;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;

import org.ebookdroid.core.actions.ActionDialogBuilder;
import org.ebookdroid.core.actions.ActionEx;
import org.ebookdroid.core.actions.ActionMethod;
import org.ebookdroid.core.actions.ActionMethodDef;
import org.ebookdroid.core.actions.ActionTarget;
import org.ebookdroid.core.actions.IActionController;
import org.ebookdroid.core.actions.params.EditableValue;
import org.ebookdroid.core.cache.CacheManager;
import org.ebookdroid.core.events.CurrentPageListener;
import org.ebookdroid.core.events.DecodingProgressListener;
import org.ebookdroid.core.log.LogContext;
import org.ebookdroid.core.models.DecodingProgressModel;
import org.ebookdroid.core.models.DocumentModel;
import org.ebookdroid.core.models.ZoomModel;
import org.ebookdroid.core.presentation.OutlineAdapter;
import org.ebookdroid.core.settings.AppSettings;
import org.ebookdroid.core.settings.ISettingsChangeListener;
import org.ebookdroid.core.settings.SettingsManager;
import org.ebookdroid.core.settings.books.BookSettings;
import org.ebookdroid.core.settings.books.Bookmark;
import org.ebookdroid.core.settings.ui.SettingsUI;
import org.ebookdroid.core.touch.IMultiTouchListener;
import org.ebookdroid.core.touch.TouchManager;
import org.ebookdroid.core.touch.TouchManagerView;
import org.ebookdroid.core.utils.AndroidVersion;
import org.ebookdroid.core.utils.PathFromUri;
import org.ebookdroid.core.views.PageViewZoomControls;
import org.ebookdroid.core.views.ViewEffects;
import org.ebookdroid.utils.LengthUtils;
import org.ebookdroid.utils.StringUtils;

import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.text.Editable;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

@ActionTarget(
// action list
actions = {
// start
@ActionMethodDef(id = R.id.actions_addBookmark, method = "addBookmark"),
@ActionMethodDef(id = R.id.mainmenu_close, method = "closeActivity"),
@ActionMethodDef(id = R.id.actions_gotoOutlineItem, method = "gotoOutlineItem"),
@ActionMethodDef(id = R.id.actions_redecodingWithPassord, method = "redecodingWithPassord"),
@ActionMethodDef(id = R.id.mainmenu_settings, method = "showAppSettings"),
@ActionMethodDef(id = R.id.mainmenu_bookmark, method = "showBookmarkDialog"),
@ActionMethodDef(id = R.id.mainmenu_booksettings, method = "showBookSettings"),
@ActionMethodDef(id = R.id.mainmenu_goto_page, method = "showDialog"),
@ActionMethodDef(id = R.id.mainmenu_outline, method = "showOutline"),
@ActionMethodDef(id = R.id.mainmenu_nightmode, method = "toggleNightMode"),
@ActionMethodDef(id = R.id.mainmenu_zoom, method = "toggleControls"),
@ActionMethodDef(id = R.id.mainmenu_thumbnail, method = "setCurrentPageAsThumbnail"),
@ActionMethodDef(id = R.id.mainmenu_about, method = "showAbout"),
@ActionMethodDef(id = R.id.actions_toggleTouchManagerView, method = "toggleControls"),
@ActionMethodDef(id = R.id.actions_openOptionsMenu, method = "openOptionsMenu")
// finish
})
public abstract class BaseViewerActivity extends AbstractActionActivity
implements IViewerActivity, DecodingProgressListener,
CurrentPageListener, ISettingsChangeListener {

public static final LogContext LCTX = LogContext.ROOT.lctx("Core");

private static final String E_MAIL_ATTACHMENT = "[E-mail Attachment]";

private static final int DIALOG_GOTO = 0;

public static final DisplayMetrics DM = new DisplayMetrics();

private IDocumentView view;

private final AtomicReference<IDocumentViewController> ctrl = new AtomicReference<IDocumentViewController>(
new EmptyContoller());

private Toast pageNumberToast;

private ZoomModel zoomModel;

private PageViewZoomControls zoomControls;

private CustormFramLayout frameLayout;

private DecodingProgressModel progressModel;

private DocumentModel documentModel;

private String currentFilename;

private TouchManagerView touchView;

private boolean menuClosedCalled;

private boolean temporaryBook;

private IMultiTouchListener mtl;

private UserApp userApp;

private String url;

private String isTasking;
private boolean isTemp;
private String code;
MsgReceiver msgReceiver;
private ActionBar actionBar;
private Boolean actionBarIsShow = true;
// 是否为服务启动PDF查看器
private Boolean commondServiceStart = false;

private RelativeLayout allRelayout;

private boolean isLessonBefore = false;

/**
* Instantiates a new base viewer activity.
*/
public BaseViewerActivity() {
super();
}
private boolean isOpenByService = false;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindowManager().getDefaultDisplay().getMetrics(DM);
SettingsManager.addListener(this);
Intent intent = getIntent();// 获取意图
url = intent.getData().toString();
openUtils = new OpenFileUtils(this);
// 11
// actions.createAction(R.id.mainmenu_goto_page, new
// Constant("dialogId", DIALOG_GOTO));
allRelayout = new RelativeLayout(this);
frameLayout = createMainContainer();
view = new BaseDocumentView(this);

userApp = UserApp.getInstance();
isTasking = intent.getStringExtra("isTasking");
isTemp = intent.getBooleanExtra("isTemp", false);
code = intent.getStringExtra("code");
isOpenByService =intent.getBooleanExtra("isSyncOpen", false);
isLessonBefore = intent.getBooleanExtra("isLessonBefore", false);
actionBar = getActionBar();
actionBar.hide();
actions.createAction(R.id.mainmenu_zoom).putValue("view",
getZoomControls());
actions.createAction(R.id.actions_toggleTouchManagerView).putValue(
"view", getTouchView());
NoteButtonWindow.ACTIVITY_MAP.put(this.getClass().getName(), this);
initActivity();
initView();
// 动态注册广播接收器
msgReceiver = new MsgReceiver();
IntentFilter intentFilter = new IntentFilter();
// 动态注册Action
intentFilter.addAction("com.iteach2.app.COMMOND");
registerReceiver(msgReceiver, intentFilter);
}

@Override
protected void onPause() {
super.onPause();

SettingsManager.storeBookSettings();
}

/**
* 广播接收器
*
* @author len
*
*/
public class MsgReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
Boolean sycn = intent.getBooleanExtra("sycn", false);
Boolean isSync = intent.getBooleanExtra("cancelSync", false);
try {
if (sycn) {
// 获取广播 显示文档Y轴
frameLayout.setSync(true);
commondServiceStart = true;
String y = intent.getStringExtra("pdfPageY");
if (y == null)
y = "0";
view.scrollTo(0, Integer.parseInt(y));
back_btn.setVisibility(View.INVISIBLE);
layout.setVisibility(View.INVISIBLE);

} else {
// 判断是否为服务启动的activity true:销毁
frameLayout.setSync(false);
commondServiceStart = false;
back_btn.setVisibility(View.VISIBLE);
if(isSync&&isOpenByService){
BaseViewerActivity.this.finish();
}

}
} catch (Exception e) {
}

}

}

private View initTitleView() {
View view = LayoutInflater.from(this).inflate(R.layout.newtitle_layout,
null);
return view;
}

@Override
protected void onDestroy() {
if (documentModel != null) {
documentModel.recycle();
documentModel = null;
}
if (temporaryBook) {
CacheManager.clear(E_MAIL_ATTACHMENT);
}
SettingsManager.removeListener(this);
StudentCommentService.syncPdf = false;
unregisterReceiver(msgReceiver);
super.onDestroy();
}

@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
String code = intent.getStringExtra("code");
if (this.code == null || !this.code.equals(code)) {
toPdf(intent);
}

}

private void initActivity() {
final AppSettings oldSettings = null;
if (SettingsManager.getAppSettings() == null) {
SettingsManager.init(this);
}
final AppSettings newSettings = SettingsManager.getAppSettings();

final AppSettings.Diff diff = new AppSettings.Diff(oldSettings,
newSettings);
this.onAppSettingsChanged(oldSettings, newSettings, diff);
}

private Button back_btn;
private DecodeService decodeService;
private String fileName;
private LinearLayout linearLayout;

private void initView() {
View title_view = initTitleView();
RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT, ScreenSizeUtil.Dp2Px(
this, 48));
title_view.setLayoutParams(p);
view.getView().setLayoutParams(
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT));
frameLayout.addView(view.getView());
frameLayout.addView(getZoomControls());
frameLayout.addView(getTouchView());
frameLayout.setLayoutParams(new RelativeLayout.LayoutParams(
android.widget.RelativeLayout.LayoutParams.FILL_PARENT,
android.widget.RelativeLayout.LayoutParams.FILL_PARENT));
allRelayout.addView(frameLayout);
LinearLayout.LayoutParams p1 = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
allRelayout.setLayoutParams(p1);
linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.addView(title_view);
linearLayout.addView(allRelayout);
if (isLessonBefore) {
initFeed();
initFeedListView();
}
initLayout();
setContentView(linearLayout);
back_btn = (Button) title_view.findViewById(R.id.openfile_back_btn);
decodeService = createDecodeService();
documentModel = new DocumentModel(decodeService);
documentModel.addListener(BaseViewerActivity.this);
progressModel = new DecodingProgressModel();
progressModel.addListener(BaseViewerActivity.this);
toPdf(getIntent());
back_btn.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
BaseViewerActivity.this.finish();
}
});
}

/**
* 增加收藏控件
*/
private void initFeed() {/*
* CheckBox image = (CheckBox)
* getLayoutInflater().from
* (this).inflate(R.layout.collect_checkbox, null);
* RelativeLayout.LayoutParams p = new
* RelativeLayout
* .LayoutParams(RelativeLayout.LayoutParams
* .WRAP_CONTENT,
* RelativeLayout.LayoutParams.WRAP_CONTENT);
* p.rightMargin = ScreenSizeUtil.Dp2Px(this, 20);
* p.topMargin = ScreenSizeUtil.Dp2Px(this, 20);
* p.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
* image.setLayoutParams(p);
* image.setBackgroundResource
* (R.drawable.collext_checkbox_bg); //分割线 View
* fengeView = new View(this);
* RelativeLayout.LayoutParams fp = new
* RelativeLayout
* .LayoutParams(ScreenSizeUtil.Dp2Px(this, 1),
* RelativeLayout.LayoutParams.MATCH_PARENT);
* fp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
* fengeView.setBackgroundColor(Color.BLACK);
* fengeView.setLayoutParams(fp);
* frameLayout.addView(image);
* frameLayout.addView(fengeView);
*/
}

/**
* 增加反馈列表
*/
private void initFeedListView() {/*
* // LinearLayout feedlistlayout =
* (LinearLayout)
* getLayoutInflater().from(this) //
* .inflate(R.layout.feedlistview_layout,
* null); RelativeLayout.LayoutParams p =
* new
* RelativeLayout.LayoutParams(ScreenSizeUtil
* .Dp2Px(this, 150),
* RelativeLayout.LayoutParams
* .MATCH_PARENT);
* p.addRule(RelativeLayout.ALIGN_PARENT_RIGHT
* ); feedlistlayout.setLayoutParams(p);
* RelativeLayout.LayoutParams layoutParams
* =
* (android.widget.RelativeLayout.LayoutParams
* ) frameLayout.getLayoutParams();
* layoutParams
* .rightMargin=ScreenSizeUtil.Dp2Px(this,
* 150);
* feedlistlayout.setBackgroundColor(Color
* .WHITE); TextView feedText = (TextView)
* feedlistlayout.findViewById(R.id.
* openfile_fankui_record_textView);
* ListView listView = (ListView)
* feedlistlayout
* .findViewById(R.id.openfiles_fankui_listView
* ); allRelayout.addView(feedlistlayout);
*/
}

private OpenFileUtils openUtils;
RelateLayout layout;

private void initLayout() {
layout = new RelateLayout(this);
RelativeLayout.LayoutParams pa = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
pa.rightMargin = -ScreenSizeUtil.Dp2Px(this, 200);
pa.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
layout.setLayoutParams(pa);
layout.setType(getIntent().getIntExtra("fileType", 1));
layout.setOnitemClickListener(new onItemClickListener() {

@Override
public void goToRescourse(ResouceAdapterJson item) {
finish();
openUtils.openFile(item.getId(), item.getType(), item.getPath());
}
});
allRelayout.addView(layout);
}

private void toPdf(Intent intent) {
Uri data = intent.getData();
if (getIntent().getScheme().equals("content")) {
temporaryBook = true;
fileName = E_MAIL_ATTACHMENT;
CacheManager.clear(fileName);
} else {
fileName = PathFromUri.retrieve(getContentResolver(), data);
}
SettingsManager.init(fileName);
SettingsManager.applyBookSettingsChanges(null,
SettingsManager.getBookSettings(), null);
startDecoding(decodeService, fileName, "");
}

private TouchManagerView getTouchView() {
if (touchView == null) {
// pdfView 工具类
touchView = new TouchManagerView(this);
}
return touchView;
}

// pdf解码(加载)
private void startDecoding(final DecodeService decodeService,
final String fileName, final String password) {
view.getView()
.post(new BookLoadTask(decodeService, fileName, password));
}

// 输入密码
private void askPassword(final DecodeService decodeService,
fi
e3a3
nal String fileName) {
setContentView(R.layout.password);
final Button ok = (Button) findViewById(R.id.pass_ok);

ok.setOnClickListener(actions
.getOrCreateAction(R.id.actions_redecodingWithPassord)
.putValue("decodeService", decodeService)
.putValue("fileName", fileName));

final Button cancel = (Button) findViewById(R.id.pass_cancel);
cancel.setOnClickListener(actions
.getOrCreateAction(R.id.mainmenu_close));
}

// 重新解码
@ActionMethod(ids = R.id.actions_redecodingWithPassord)
public void redecodingWithPassord(final ActionEx action) {
final EditText te = (EditText) findViewById(R.id.pass_req);
final DecodeService decodeService = action
.getParameter("decodeService");
final String fileName = action.getParameter("fileName");

startDecoding(decodeService, fileName, te.getText().toString());
}

// 显示错误信息
private void showErrorDlg(final String msg) {
setContentView(R.layout.error);
final TextView errortext = (TextView) findViewById(R.id.error_text);
if (msg != null && msg.length() > 0) {
errortext.setText(msg);
} else {
errortext.setText("Unexpected error occured!");
}
final Button cancel = (Button) findViewById(R.id.error_close);
finish();
}

// 切换文档
@Override
public IDocumentViewController switchDocumentController() {
try {
final BookSettings bs = SettingsManager.getBookSettings();

final IDocumentViewController newDc = bs.viewMode.create(this);
final IDocumentViewController oldDc = ctrl.getAndSet(newDc);

getZoomModel().removeListener(oldDc);
getZoomModel().addListener(newDc);

return newDc;
} catch (final Throwable e) {
throw new RuntimeException(e);
}
}

// pdf解码(加载)进度条
@Override
public void decodingProgressChanged(final int currentlyDecoding) {
runOnUiThread(new Runnable() {

@Override
public void run() {
try {
setProgressBarIndeterminateVisibility(false);
getWindow().setFeatureInt(
Window.FEATURE_INDETERMINATE_PROGRESS,
currentlyDecoding == 0 ? 10000 : currentlyDecoding);
} catch (final Throwable e) {
}
}
});
}

@Override
public void currentPageChanged(final PageIndex oldIndex,
final PageIndex newIndex) {
final int pageCount = documentModel.getPageCount();
String prefix = "";

if (pageCount > 0) {
final String pageText = (newIndex.viewIndex + 1) + "/" + pageCount;
if (SettingsManager.getAppSettings().getPageInTitle()) {
prefix = "(" + pageText + ") ";
} else {
if (pageNumberToast != null) {
pageNumberToast.setText(pageText);
} else {
pageNumberToast = Toast.makeText(this, pageText, 300);
}
pageNumberToast.setGravity(Gravity.TOP | Gravity.LEFT, 0, 0);
pageNumberToast.show();
}
}

getWindow().setTitle(prefix + currentFilename);
SettingsManager.currentPageChanged(oldIndex, newIndex);
}

private void setWindowTitle() {
currentFilename = LengthUtils.safeString(getIntent().getData()
.getLastPathSegment(), E_MAIL_ATTACHMENT);
currentFilename = StringUtils.cleanupTitle(currentFilename);
getWindow().setTitle(currentFilename);
}

@Override
protected void onPostCreate(final Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
setWindowTitle();
}

private PageViewZoomControls getZoomControls() {
if (zoomControls == null) {
zoomControls = new PageViewZoomControls(this, getZoomModel());
zoomControls.setGravity(Gravity.RIGHT | Gravity.BOTTOM);
}
return zoomControls;
}

private CustormFramLayout createMainContainer() {
return new CustormFramLayout(this);
}

protected abstract DecodeService createDecodeService();

/**
* Called on creation options menu
*
* @param menu
* the main menu
* @return true, if successful
* @see android.app.Activity#onCreateOptionsMenu(android.view.Menu)
*/
public boolean sync = false;
TextView control_close;

public Thread thread;
public String SYCN_WAIT = "START";

@Override
protected void onResume() {

super.onResume();
}

@Override
protected void onStop() {
super.onStop();
}

@Override
public boolean onMenuOpened(final int featureId, final Menu menu) {
getDocView().changeLayoutLock(true);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
return super.onMenuOpened(featureId, menu);
}

@Override
public void onPanelClosed(final int featureId, final Menu menu) {
menuClosedCalled = false;
super.onPanelClosed(featureId, menu);
if (!menuClosedCalled) {
onOptionsMenuClosed(menu);
}
}

@Override
public void onOptionsMenuClosed(final Menu menu) {
menuClosedCalled = true;
final Window w = getWindow();
if (SettingsManager.getAppSettings().getFullScreen()) {
w.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else {
w.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
view.changeLayoutLock(false);
}

@ActionMethod(ids = R.id.actions_openOptionsMenu)
public void openOptionsMenu(final ActionEx action) {
if (!getDocView().isLayoutLocked()) {
this.openOptionsMenu();
}
}

@ActionMethod(ids = R.id.actions_gotoOutlineItem)
public void gotoOutlineItem(final ActionEx action) {
final Integer item = action
.getParameter(IActionController.DIALOG_ITEM_PROPERTY);
final List<OutlineLink> outline = action.getParameter("outline");

final String link = outline.get(item).getLink();
if (link.startsWith("#")) {
int pageNumber = 0;
try {
pageNumber = Integer.parseInt(link.substring(1)
.replace(" ", ""));
} catch (final Exception e) {
pageNumber = 0;
}
if (pageNumber < 1 || pageNumber > documentModel.getPageCount()) {
Toast.makeText(
getApplicationContext(),
getResources()
.getString(
R.string.error_page_out_of_rande,
documentModel.getDecodeService()
.getPageCount()), 2000).show();
return;
}
getDocumentController().goToPage(pageNumber - 1);
} else if (link.startsWith("http:")) {
final Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(link));
startActivity(i);
}
}

@ActionMethod(ids = R.id.mainmenu_outline)
public void showOutline(final ActionEx action) {
final List<OutlineLink> outline = documentModel.getDecodeService()
.getOutline();
if ((outline != null) && (outline.size() > 0)) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.outline_title);
builder.setAdapter(new OutlineAdapter(this, outline),
actions.getOrCreateAction(R.id.actions_gotoOutlineItem)
.putValue("outline", outline));
final AlertDialog alert = builder.create();
alert.show();
} else {
Toast.makeText(getApplicationContext(), R.string.outline_missed,
Toast.LENGTH_SHORT).show();
}
}

@ActionMethod(ids = R.id.mainmenu_goto_page)
public void showDialog(final ActionEx action) {
final Integer dialogId = action.getParameter("dialogId");
showDialog(dialogId);
}

@ActionMethod(ids = R.id.mainmenu_booksettings)
public void showBookSettings(final ActionEx action) {
SettingsUI.showBookSettings(this,
SettingsManager.getBookSettings().fileName);
}

@ActionMethod(ids = R.id.mainmenu_settings)
public void showAppSettings(final ActionEx action) {
SettingsUI.showAppSettings(this);
}

@ActionMethod(ids = R.id.mainmenu_nightmode)
public void toggleNightMode(final ActionEx action) {
SettingsManager.getAppSettings().switchNightMode();
getDocumentController().toggleNightMode(
SettingsManager.getAppSettings().getNightMode());
}

@ActionMethod(ids = R.id.mainmenu_thumbnail)
public void setCurrentPageAsThumbnail(final ActionEx action) {
final Page page = getDocumentModel().getCurrentPageObject();
if (page != null) {
getDocumentModel().createBookThumbnail(
SettingsManager.getBookSettings(), page, true);
}
}

@ActionMethod(ids = R.id.mainmenu_bookmark)
public void showBookmarkDialog(final ActionEx action) {
final int page = getDocumentModel().getCurrentViewPageIndex();

final String message = getString(R.string.add_bookmark_name);

final EditText input = new EditText(this);
input.setText(getString(R.string.text_page) + " " + (page + 1));
input.selectAll();

final ActionDialogBuilder builder = new ActionDialogBuilder(actions);
builder.setTitle(R.string.menu_add_bookmark).setMessage(message)
.setView(input);
builder.setPositiveButton(R.id.actions_addBookmark, new EditableValue(
"input", input));
builder.setNegativeButton().show();
}

@ActionMethod(ids = R.id.actions_addBookmark)
public void addBookmark(final ActionEx action) {
final Editable value = action.getParameter("input");
final String name = value.toString();
final BookSettings bs = SettingsManager.getBookSettings();
bs.bookmarks.add(new Bookmark(name, getDocumentModel()
.getCurrentIndex(), 0, 0));
SettingsManager.edit(bs).commit();
}

@Override
protected Dialog onCreateDialog(final int id) {
switch (id) {
case DIALOG_GOTO:
return new GoToPageDialog(this);
}
return null;
}

/**
* Gets the zoom model.
*
* @return the zoom model
*/
@Override
public ZoomModel getZoomModel() {
if (zoomModel == null) {
zoomModel = new ZoomModel();
}
return zoomModel;
}

@Override
public IMultiTouchListener getMultiTouchListener() {
if (mtl == null) {
mtl = new IMultiTouchListener() {

@Override
public void onTwoFingerPinchEnd() {
getZoomModel().commit();
}

@Override
public void onTwoFingerPinch(float oldDistance,
float newDistance) {
zoomModel.setZoom(zoomModel.getZoom() * newDistance
/ oldDistance);

}

@Override
public void onTwoFingerTap() {
Toast.makeText(BaseViewerActivity.this, "TWO FINGER TAP", 0);
}

};
}
return mtl;
}

@Override
public DecodeService getDecodeService() {
return documentModel != null ? documentModel.getDecodeService() : null;
}

/**
* Gets the decoding progress model.
*
* @return the decoding progress model
*/
@Override
public DecodingProgressModel getDecodingProgressModel() {
return progressModel;
}

@Override
public DocumentModel getDocumentModel() {
return documentModel;
}

@Override
public IDocumentViewController getDocumentController() {
return ctrl.get();
}

@Override
public Context getContext() {
return this;
}

@Override
public IDocumentView getDocView() {
return view;
}

@Override
public Activity getActivity() {
return this;
}

@Override
public IActionController<?> getActionController() {
return actions;
}

@ActionMethod(ids = { R.id.mainmenu_zoom,
R.id.actions_toggleTouchManagerView })
public void toggleControls(final ActionEx action) {
final View view = action.getParameter("view");
ViewEffects.toggleControls(view);
}

@Override
public final boolean dispatchKeyEvent(final KeyEvent event) {
if (getDocumentController().dispatchKeyEvent(event)) {
return true;
}

switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_BACK:
if (event.getRepeatCount() == 0) {
closeActivity(null);
}
return true;
default:
return super.dispatchKeyEvent(event);
}
}

@ActionMethod(ids = R.id.mainmenu_close)
public void closeActivity(final ActionEx action) {
if (documentModel != null) {
documentModel.recycle();
documentModel = null;
}
if (temporaryBook) {
CacheManager.clear(E_MAIL_ATTACHMENT);
SettingsManager.removeCurrentBookSettings();
} else {
SettingsManager.clearCurrentBookSettings();
}
finish();
}

@Override
public void onAppSettingsChanged(final AppSettings oldSettings,
final AppSettings newSettings, final AppSettings.Diff diff) {
if (diff.isRotationChanged()) {
setRequestedOrientation(newSettings.getRotation().getOrientation());
}

if (diff.isFullScreenChanged() && !AndroidVersion.is3x) {
final Window window = getWindow();
if (newSettings.getFullScreen()) {
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else {
window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
}

if (diff.isShowTitleChanged() && diff.isFirstTime()) {
final Window window = getWindow();
try {
if (!newSettings.getShowTitle()) {
window.requestFeature(Window.FEATURE_NO_TITLE);
} else {
// Android 3.0+ you need both progress!!!
window.requestFeature(Window.FEATURE_PROGRESS);
window.requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setProgressBarIndeterminate(true);
}
} catch (final Throwable th) {
LCTX.e("Error on requestFeature call: " + th.getMessage());
}
}
if (diff.isKeepScreenOnChanged()) {
view.getView().setKeepScreenOn(newSettings.isKeepScreenOn());
}

if (diff.isNightModeChanged() && !diff.isFirstTime()) {
getDocumentController().toggleNightMode(newSettings.getNightMode());
}
TouchManager.applyOldStyleSettings(newSettings);
}

@Override
public void onBookSettingsChanged(final BookSettings oldSettings,
final BookSettings newSettings, final BookSettings.Diff diff,
final AppSettings.Diff appDiff) {

boolean redrawn = false;
if (diff.isViewModeChanged() || diff.isSplitPagesChanged()
|| diff.isCropPagesChanged()) {
redrawn = true;
final IDocumentViewController newDc = switchDocumentController();
if (!diff.isFirstTime()) {
newDc.init(null);
newDc.show();
}
}

if (diff.isFirstTime()) {
getZoomModel().initZoom(newSettings.getZoom());
}

final IDocumentViewController dc = getDocumentController();
if (diff.isPageAlignChanged()) {
dc.setAlign(newSettings.pageAlign);
}

if (diff.isAnimationTypeChanged()) {
dc.updateAnimationType();
}

if (!redrawn && appDiff != null) {
if (appDiff.isMaxImageSizeChanged()
|| appDiff.isPagesInMemoryChanged()
|| appDiff.isDecodeModeChanged()) {
dc.updateMemorySettings();
}
}

final DocumentModel dm = getDocumentModel();
if (dm != null) {
currentPageChanged(PageIndex.NULL, dm.getCurrentIndex());
}
}

final class BookLoadTask extends AsyncTask<String, String, Exception>
implements IBookLoadTask, Runnable {

private final DecodeService m_decodeService;
private String m_fileName;
private String m_password;
private ProgressDialog progressDialog;

public BookLoadTask(final DecodeService decodeService,
final String fileName, final String password) {
m_decodeService = decodeService;
m_fileName = fileName;
m_password = password;
}

@Override
public void run() {
execute(" ");
}

@Override
protected void onPreExecute() {
LCTX.d("onPreExecute(): start");
try {
final String message = getString(R.string.msg_loading);
progressDialog = ProgressDialog.show(BaseViewerActivity.this,
"", message, true);
} catch (final Throwable th) {
LCTX.e("Unexpected error", th);
} finally {
LCTX.d("onPreExecute(): finish");
}
}

@Override
protected Exception doInBackground(final String... params) {
LCTX.d("doInBackground(): start");
try {
if (getIntent().getScheme().equals("content")) {
final File tempFile = CacheManager
.createTempFile(getIntent().getData());
m_fileName = tempFile.getAbsolutePath();
}
getDocView().waitForInitialization();
m_decodeService.open(m_fileName, m_password);
getDocumentController().init(this);
return null;
} catch (final Exception e) {
LCTX.e(e.getMessage(), e);
return e;
} catch (final Throwable th) {
LCTX.e("Unexpected error", th);
return new Exception(th.getMessage());
} finally {
LCTX.d("doInBackground(): finish");
}
}

@Override
protected void onPostExecute(final Exception result) {
LCTX.d("onPostExecute(): start");
try {
if (result == null) {
getDocumentController().show();

final DocumentModel dm = getDocumentModel();
currentPageChanged(PageIndex.NULL, dm.getCurrentIndex());
setProgressBarIndeterminateVisibility(false);

progressDialog.dismiss();
} else {
progressDialog.dismiss();

final String msg = result.getMessage();
if ("PDF needs a password!".equals(msg)) {
askPassword(m_decodeService, m_fileName);
} else {
showErrorDlg(msg);
}
}
} catch (final Throwable th) {
LCTX.e("Unexpected error", th);
} finally {
LCTX.d("onPostExecute(): finish");
}
}

@Override
public void setProgressDialogMessage(final int resourceID,
final Object... args) {
final String message = getString(resourceID, args);
publishProgress(message);
}

@Override
protected void onProgressUpdate(final String... values) {
if (values != null && values.length > 0) {
progressDialog.setMessage(values[0]);
}
}

}

private class EmptyContoller implements IDocumentViewController {

@Override
public void zoomChanged(final float newZoom, final float oldZoom) {
}

@Override
public void commitZoom() {
}

@Override
public void goToPage(final int page) {
}

@Override
public void invalidatePageSizes(final InvalidateSizeReason reason,
final Page changedPage) {
}

@Override
public int getFirstVisiblePage() {
return 0;
}

@Override
public int calculateCurrentPage(final ViewState viewState) {
return 0;
}

@Override
public int getLastVisiblePage() {
return 0;
}

@Override
public void verticalConfigScroll(final int i) {
}

@Override
public void redrawView() {
}

@Override
public void redrawView(final ViewState viewState) {
}

@Override
public void setAlign(final PageAlign byResValue) {
}

@Override
public IViewerActivity getBase() {
return BaseViewerActivity.this;
}

@Override
public IDocumentView getView() {
return view;
}

@Override
public void updateAnimationType() {
}

@Override
public void updateMemorySettings() {
}

@Override
public void drawView(final Canvas canvas, final ViewState viewState) {
}

@Override
public boolean onLayoutChanged(final boolean layoutChanged,
final boolean layoutLocked, final Rect oldLaout,
final Rect newLayout) {
return false;
}

@Override
public Rect getScrollLimits() {
return new Rect(0, 0, 0, 0);
}

@Override
public boolean onTouchEvent(final MotionEvent ev) {
return false;
}

@Override
public void onScrollChanged(final int newPage, final int direction) {
}

@Override
public boolean dispatchKeyEvent(final KeyEvent event) {
return false;
}

@Override
public ViewState updatePageVisibility(final int newPage,
final int direction, final float zoom) {
return new ViewState(this);
}

@Override
public void show() {
}

@Override
public final void init(final IBookLoadTask task) {
}

@Override
public void pageUpdated(final int viewIndex) {
}

@Override
public void toggleNightMode(boolean nightMode) {
}
}

@Override
public void onBackPressed() {
finish();
overridePendingTransition(R.anim.in_from_left, R.anim.out_of_right);
unregisterReceiver(msgReceiver);
super.onBackPressed();
}

}
这个可能长,这是找的第三方的,主代码就是解码和topdf这个方法中,稍后会贴上这pdf的源代码
启动这块的代码为 Uri uri = Uri.parse("file://" + file.getPath());
Intent pdfIntent = new Intent(Intent.ACTION_VIEW, uri);
pdfIntent.putExtra("isTasking", "false");
pdfIntent.putExtra("code", fileName);
pdfIntent.putExtra("url", url);
pdfIntent.setClass(context, PdfViewerActivity.class);
context.startActivity(pdfIntent);
有些参数可以不传(这是项目需要)

4.打开txt文件
这个就简单了直接读取txt文件
读取方法
new Thread() {
public void run() {
File file = new File(SdCardUtil.getSourcePath() + code);
if (file.exists()) {
try {
InputStream in = new FileInputStream(file);
String string = getString(in);
Message msg = handler.obtainMessage();
msg.obj = string;
handler.sendMessage(msg);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();getString方法
public static String getString(InputStream inputStream) {
InputStreamReader inputStreamReader = null;
try {
inputStreamReader = new InputStreamReader(inputStream, "gbk");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
BufferedReader reader = new BufferedReader(inputStreamReader);
StringBuffer sb = new StringBuffer("");
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}


pdf源码下载地址
点击打开链接

android-poi源码地址
点击打开链接

有什么不对的地方请指出,我也是刚学习


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android poi