㈠ 如何用android解析docx文档
android上查阅word类型文档的方式主要有几种,下载诸如wps,office等应用,用户可以直接打开需要查看的word文档,对于应用开发者来说,如何在自己的应用中集成word文档查阅功能,使自己的app不受限于第三方应用有没有安装,有时候还是需要考虑的。
集成app阅读word功能也可以通过几种方式实现,例如购买专门的sdk包,像Aspose等(money啊)或者服务器端处理成图片或者html,然后android端去请求访问等方式。对于大部分个人开发者而言,这两种方式就显得比较重量级了。
下面介绍两种专门解析docx文件的方式:docx4j 以及poi
Docx4j
github地址:https://github.com/plutext/AndroidDocxToHtml
这个是官网demo,基本可以直接使用,解析出来的格式比较全,样式也比较接近原文档,就是解析速度令人不敢恭维,手机上测试的话,一般一份儿docx文档都需要30s以上甚至更多,有时候测试文档明明就只有几十k大小而已,对于比较大,比较复杂的文档,时间就更是让人崩溃。解析速度不是令人满意。
解析测试中遇到的bug
1.表格丢失,内容丢失:内嵌表格(表格中还有表格的这种)的内容和样式会有部分丢失现象
2.表格(又是我?)样式:假如文档中的表格在word文档中排版时超出了该文档的边界线,你会发现超出边界的内容又不见了
3.目录乱码:如果文档中有目录,目录会被加上一些超链接,需要手工处理去掉
4.图片无法解析:有一些格式的图片无法解析,比如EMF,WMF这种类型的
5.批注无法显示:目前没有找到批注显示的地方,暂且算丢失吧,后面在试试
6.。。。其它暂时还没被发现的问题
POI
poi是apache的一个开源项目,不多说,直接上官网去下载就可以
官网地址:http://poi.apache.org/
如果你是android studio用户:那就很简单了
只需要引入依赖(版本号不一定哦,gradle会自己把相关依赖包下载到位):
compile 'fr.opensagres.xdocreport:org.apache.poi.xwpf.converter.xhtml:1.0.5'
那如果你是eclipse用户(伙计,赶紧用studio吧)
需要手工引入以下jar包,包括:
poi , poi-ooxml , ooxml-schema,org.apache.poi.xwpf.converter.xhtml,org.apache.poi.xwpf.converter.core
实现代码如下
{
InputStream is = new FileInputStream(file);
XWPFDocument docx = new
XWPFDocument(is);
OutputStream os = new ByteArrayOutputStream();
String imgDesPath = "/sdcard/img";
File imgFile = new File("/sdcard/img");
this.baseUrl = this.getDir("image", Context.MODE_PRIVATE).toURL().toString();
if (!imgFile.exists()) {
file.mkdirs();
}
poi解析的问题
速度比docx4j要稍快一点,会有文档内容解析不全样式丢失的情况
流程
调用接口将docx转化为html,然后app中通过webview加载该html即可显示
转化代码如下(我就想问下,这代码格式到底该怎么调啊~好烦躁):
try {
InputStream is = new FileInputStream(file);
XWPFDocument docx = new
XWPFDocument(is);
OutputStream os = new ByteArrayOutputStream();
String imgDesPath = "/sdcard/img";
File imgFile = new File("/sdcard/img");
this.baseUrl = this.getDir("image", Context.MODE_PRIVATE).toURL().toString();
if (!imgFile.exists()) {
file.mkdirs();
}
XHTMLOptions options = XHTMLOptions.create().URIResolver(new BasicURIResolver(imgDesPath));
options.setExtractor(new FileImageExtractor(imgFile));
options.setIgnoreStylesIfUnused(false);
options.setFragment(true);
XHTMLConverter.getInstance().convert(docx, os, options);
**os.write("/sdcard/xxx/html文件")**
} catch (Exception e) {
Log.d(TAG, "catch " + e.getMessage());
}
webview 里面直接load 上面生成的html文件就可以了
㈡ android系统可以装word办公 软件吗
可以,android的办公软件也蛮多的,给你推荐一款个人觉得不错的
office办公利器破解版:
http://www.apkok.com/soft/4_5040.html
通过它你能够查看、创建和编辑Word、Excel和PowerPoint等文档,支持的基本格式包括:doc,
docx,
xls,
xlsx,
ppt,
pptx,这基本上能够满足你对基本的办公文档的应用需求了。
㈢ Android开发如何读取并显示word和pdf文档
通过对数据库的索引,我们还为您准备了:
Android开发如何读取并显示word和pdf文档呢
问:有做过类似项目的朋友讲一下么?
答:大家好! 我是个Android新手,最近有个项目,其中有个需求就是在Android应用程序中查看word和pdf格式的文档(PS:不是用intent调用第三方软件打开文档哦~),可惜Android没有直接显示word和pdf文档的view。于是本菜鸟上网查了好久好久好久哇= =...
===========================================
android开发中怎样读取一个文件里的内容并把内容显...
问:我以为和java的读写文件一样的,但他好像有自己的获取输入输出留的方法...
答:基本上都差不多。 一般来说。文件,XML都放在assets这个文件夹下。
===========================================
android怎么读取带有图片的WORD文档
问:我以为和java的读写文件一样的,但他好像有自己的获取输入输出留的方法...
答:用Document to go或者quick office这类软件就可以了。这些软件在机锋市场和豌豆荚里一搜就有
===========================================
【Android开发】请问Android怎么打开word文件?
问:请问Android怎么打开word文件?网上看了好多,但都不能运行,有的说用PO...
答:用quick ooffice,在网络移动应用上下载quick office(pro版),拷贝到手机,安装好就行
===========================================
android编程:怎样读取txt文件
问:请问Android怎么打开word文件?网上看了好多,但都不能运行,有的说用PO...
答:StringBuffer buffer = new StringBuffer(); try { FileInputStream fis = new FileInputStream("/sdcard/XXX.txt"); InputStreamReader isr = new InputStreamReader(fis,"GB2312");//文件编码Unicode,UTF-8,ASCII,GB2312,Big5 Reader in = new...
===========================================
Android开发中读写office文件(word,ppt,excel)...
问:最近在写一个基于android平台的办公套件,其中设计到对word,ppt,excel...
答:简单的,可以使用POI处理 想处理复杂和能用的,只有在服务器端处理,再返回手机android查看
===========================================
Android开发 ,如何读取AndroidMainfest.xml里面的...
问:AndroidMainfest.xml文件如下:我想在Androd程序中读取android:largeHea...
答:largeheap是一个布尔类型的
===========================================
android程序中如何打开并编辑word,excel等文件?
问:我现在已经使用POI包,将内容放在html里,在webview上显示出来,但是不...
答:word?excel?笑话,微软都没有开发基于安卓版本的word,不过最近应该有动作了把。但是,你的软件和人家的软件,是属于两个APP,最多是给你个接口让你启动,但是至于编辑,你得看看人家的应用有没给你接口
===========================================
android开发中,如何实现读取pdf格式的文件,并把...
问:最近做关于android开发,读取pdf格式文件的应用,但是不知道如何下手啊...
答:得嵌入PDF第三方软件或自己编写一个类似的打开软件吧,否则理论上是看不了的。(仅供参考)
㈣ android怎么打开word文件
Android ----Intent 的各种打开文件 doc word
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.net.Uri.Builder;
import java.io.File;
import android.content.Intent;
//自定义android Intent类,
//可用于获取打开以下文件的intent
//PDF,PPT,WORD,EXCEL,CHM,HTML,TEXT,AUDIO,VIDEO
public class MyIntent
{
//android获取一个用于打开HTML文件的intent
public static Intent getHtmlFileIntent( String param )
{
Uri uri = Uri.parse(param ).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(param ).build();
Intent intent = new Intent("android.intent.action.VIEW");
intent.setDataAndType(uri, "text/html");
return intent;
}
//android获取一个用于打开图片文件的intent
public static Intent getImageFileIntent( String param )
{
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromFile(new File(param ));
intent.setDataAndType(uri, "image/*");
return intent;
}
//android获取一个用于打开PDF文件的intent
public static Intent getPdfFileIntent( String param )
{
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromFile(new File(param ));
intent.setDataAndType(uri, "application/pdf");
return intent;
}
//android获取一个用于打开文本文件的intent
public static Intent getTextFileIntent( String paramString, boolean paramBoolean)
{
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (paramBoolean)
{
Uri uri1 = Uri.parse(param );
intent.setDataAndType(uri1, "text/plain");
}
while (true)
{
return intent;
Uri uri2 = Uri.fromFile(new File(param ));
intent.setDataAndType(uri2, "text/plain");
}
}
//android获取一个用于打开音频文件的intent
public static Intent getAudioFileIntent( String param )
{
Intent intent = new Intent("android.intent.action.VIEW");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("oneshot", 0);
intent.putExtra("configchange", 0);
Uri uri = Uri.fromFile(new File(param ));
intent.setDataAndType(uri, "audio/*");
return intent;
}
//android获取一个用于打开视频文件的intent
public static Intent getVideoFileIntent( String param )
{
Intent intent = new Intent("android.intent.action.VIEW");
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("oneshot", 0);
intent.putExtra("configchange", 0);
Uri uri = Uri.fromFile(new File(param ));
intent.setDataAndType(uri, "video/*");
return intent;
}
//android获取一个用于打开CHM文件的intent
public static Intent getChmFileIntent( String param )
{
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromFile(new File(param ));
intent.setDataAndType(uri, "application/x-chm");
return intent;
}
//android获取一个用于打开Word文件的intent
public static Intent getWordFileIntent( String param )
{
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromFile(new File(param ));
intent.setDataAndType(uri, "application/msword");
return intent;
}
//android获取一个用于打开Excel文件的intent
public static Intent getExcelFileIntent( String param )
{
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromFile(new File(param ));
intent.setDataAndType(uri, "application/vnd.ms-excel");
return intent;
}
//android获取一个用于打开PPT文件的intent
public static Intent getPptFileIntent( String param )
{
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.fromFile(new File(param ));
intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
return intent;
}