android打开office资源

编程入门 行业动态 更新时间:2024-10-10 14:24:33

android打开office<a href=https://www.elefans.com/category/jswz/34/1770980.html style=资源"/>

android打开office资源

我们都知道安卓打开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);// renderThread runnable = new Thread() {@Overridepublic 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 blocke1.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 loadWebView() {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.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 AbstractActionActivityimplements 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.*/@Overridepublic 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();// 动态注册ActionintentFilter.addAction("com.iteach2.app.COMMOND");registerReceiver(msgReceiver, intentFilter);}@Overrideprotected void onPause() {super.onPause();SettingsManager.storeBookSettings();}/*** 广播接收器* * @author len* */public class MsgReceiver extends BroadcastReceiver {@Overridepublic 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;}@Overrideprotected 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();}@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic 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,final 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();}// 切换文档@Overridepublic 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解码(加载)进度条@Overridepublic void decodingProgressChanged(final int currentlyDecoding) {runOnUiThread(new Runnable() {@Overridepublic void run() {try {setProgressBarIndeterminateVisibility(false);getWindow().setFeatureInt(Window.FEATURE_INDETERMINATE_PROGRESS,currentlyDecoding == 0 ? 10000 : currentlyDecoding);} catch (final Throwable e) {}}});}@Overridepublic 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);}@Overrideprotected 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";@Overrideprotected void onResume() {super.onResume();}@Overrideprotected void onStop() {super.onStop();}@Overridepublic boolean onMenuOpened(final int featureId, final Menu menu) {getDocView().changeLayoutLock(true);getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);return super.onMenuOpened(featureId, menu);}@Overridepublic void onPanelClosed(final int featureId, final Menu menu) {menuClosedCalled = false;super.onPanelClosed(featureId, menu);if (!menuClosedCalled) {onOptionsMenuClosed(menu);}}@Overridepublic 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)mit();}@Overrideprotected Dialog onCreateDialog(final int id) {switch (id) {case DIALOG_GOTO:return new GoToPageDialog(this);}return null;}/*** Gets the zoom model.* * @return the zoom model*/@Overridepublic ZoomModel getZoomModel() {if (zoomModel == null) {zoomModel = new ZoomModel();}return zoomModel;}@Overridepublic IMultiTouchListener getMultiTouchListener() {if (mtl == null) {mtl = new IMultiTouchListener() {@Overridepublic void onTwoFingerPinchEnd() {getZoomModel()mit();}@Overridepublic void onTwoFingerPinch(float oldDistance,float newDistance) {zoomModel.setZoom(zoomModel.getZoom() * newDistance/ oldDistance);}@Overridepublic void onTwoFingerTap() {Toast.makeText(BaseViewerActivity.this, "TWO FINGER TAP", 0);}};}return mtl;}@Overridepublic DecodeService getDecodeService() {return documentModel != null ? documentModel.getDecodeService() : null;}/*** Gets the decoding progress model.* * @return the decoding progress model*/@Overridepublic DecodingProgressModel getDecodingProgressModel() {return progressModel;}@Overridepublic DocumentModel getDocumentModel() {return documentModel;}@Overridepublic IDocumentViewController getDocumentController() {return ctrl.get();}@Overridepublic Context getContext() {return this;}@Overridepublic IDocumentView getDocView() {return view;}@Overridepublic Activity getActivity() {return this;}@Overridepublic 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);}@Overridepublic 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();}@Overridepublic 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);}@Overridepublic 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;}@Overridepublic void run() {execute(" ");}@Overrideprotected 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");}}@Overrideprotected 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");}}@Overrideprotected 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");}}@Overridepublic void setProgressDialogMessage(final int resourceID,final Object... args) {final String message = getString(resourceID, args);publishProgress(message);}@Overrideprotected void onProgressUpdate(final String... values) {if (values != null && values.length > 0) {progressDialog.setMessage(values[0]);}}}private class EmptyContoller implements IDocumentViewController {@Overridepublic void zoomChanged(final float newZoom, final float oldZoom) {}@Overridepublic void commitZoom() {}@Overridepublic void goToPage(final int page) {}@Overridepublic void invalidatePageSizes(final InvalidateSizeReason reason,final Page changedPage) {}@Overridepublic int getFirstVisiblePage() {return 0;}@Overridepublic int calculateCurrentPage(final ViewState viewState) {return 0;}@Overridepublic int getLastVisiblePage() {return 0;}@Overridepublic void verticalConfigScroll(final int i) {}@Overridepublic void redrawView() {}@Overridepublic void redrawView(final ViewState viewState) {}@Overridepublic void setAlign(final PageAlign byResValue) {}@Overridepublic IViewerActivity getBase() {return BaseViewerActivity.this;}@Overridepublic IDocumentView getView() {return view;}@Overridepublic void updateAnimationType() {}@Overridepublic void updateMemorySettings() {}@Overridepublic void drawView(final Canvas canvas, final ViewState viewState) {}@Overridepublic boolean onLayoutChanged(final boolean layoutChanged,final boolean layoutLocked, final Rect oldLaout,final Rect newLayout) {return false;}@Overridepublic Rect getScrollLimits() {return new Rect(0, 0, 0, 0);}@Overridepublic boolean onTouchEvent(final MotionEvent ev) {return false;}@Overridepublic void onScrollChanged(final int newPage, final int direction) {}@Overridepublic boolean dispatchKeyEvent(final KeyEvent event) {return false;}@Overridepublic ViewState updatePageVisibility(final int newPage,final int direction, final float zoom) {return new ViewState(this);}@Overridepublic void show() {}@Overridepublic final void init(final IBookLoadTask task) {}@Overridepublic void pageUpdated(final int viewIndex) {}@Overridepublic void toggleNightMode(boolean nightMode) {}}@Overridepublic 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 blocke.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打开office资源

本文发布于:2024-03-13 00:11:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1732743.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:资源   android   office

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!