当前位置: 首页 > 科技观察

如何在Android中读写Worddoc-docx和PDF文件?

时间:2023-03-14 15:47:31 科技观察

最近想在项目中生成Worddoc和docx文件。经过一番百度google,发现主流的通过java语言实现的是Apache的POI组件。除了POI,这里还有一个实现,不过我没有研究,有兴趣的同学可以研究下。关于POI,可以访问ApachePOI官网获取详细信息。进入主题!由于项目中只使用了doc和docx组件,下面只是介绍这两个组件的使用。1.如何在AndroidStudio中使用POI组件。从POI官网来看,好像暂时不支持IntelliJIDE,如下图,所以这里我们采用直接下载jar包导入工程的方式。通过官网->Overview->Components可以看到d和docx文件分别对应组件HWPF和XWPF,而HWPF和XWPF分别对应poi-scratchpad和poi-ooxml下载,进入Apache下载页面,选择***版本下载,如下。选择ThelatestbetareleaseisApachePOI3.16-beta2跳转到poi-bin-3.16-beta2-20170202.tar.gz,然后点击poi-bin-3.16-beta2-20170202.tar.gz,选择镜像下载成功.注意事项Linux系统选择.tar.gzWindows系统选择.zip解压解压下载的压缩包,将得到如下文件。不熟悉如何导入的同学可以看看AndroidStudio导入jar包教程1.doc为doc文件,需要将jar包放在lib文件夹下,poi-3.16-beta2.jar,poi-scratchpad-3.16-beta2.jar进入android工程的libs目录(lib文件夹下的junit-4.12.jar和log4j-1.2.17.jar我的工程没有放,也不例外,可以少)。2.docx对于docx,需要导入lib文件夹下的jar包,poi-3.16-beta2.jar、poi-ooxml-3.16-beta2.jar、poi-ooxml-schemas-3.16-beta2.jar和ooxml-lib包,因为一直报Warning:IngoringInnerClassesattributeforananonymousinnerclass的错误,并且因为doc基本满足我的需求,导入这么多jar导致apk体积变大,所以一直没有实施的。有兴趣的同学可以研究一下。2、实现doc文件的读写ApachePOI中的HWPF模块专门用于读写doc格式文件。在HWPF中,我们使用HWPFDocument来表示一个worddoc文档。在看代码之前,有必要了解一下HWPFDocument中的几个概念:注意:Section、Paragraph、CharacterRun和Table都是继承自Range。读写前注意:ApachePOI提供的HWPFDocument类只能读写标准的.doc文件,也就是说,如果通过修改后缀名生成doc文件或者直接命名创建,会报错“Your文件似乎不是有效的OLE2文档”无效的标头签名;读取0x7267617266202E31,应为0xE11AB1A1E011CFD0-您的文件似乎不是有效的OLE2文档”无效的标头签名;读取0x7267617266202E31,应为0xE11AB1A1E011CFD0-您的文件似乎不是有效的OLE2document.在文件的日常应用中,我们很少从word文件中读取信息,更多的时候是将内容写入word文件,使用POI从worddoc文件中读取数据主要有两种方式:通过读取WordExtractor和通过HWPFDocument读取WordExtractor内部读取信息时,仍然是通过HWPFDocument获取。使用WordExtractor读取在使用WordExtractor读取文件时,我们只能读取文件的文本内容和基于文档的一些属性。至于文档内容的属性,我们是看不到的。如果要读取文档内容的属性,需要使用HWPFDocument来读取。下面是使用WordExtractor读取文件的例子://通过WordExtractor读取文件(Objecto){Log.d(TAG,String.valueOf(o));}publicvoidtestReadByExtractor()throwsException{InputStreamis=newFileInputStream(PATH);WordExtractorextractor=newWordExtractor(is);//输出word文档log的所有文本(extractor.getText());log(extractor.getTextFromPieces());//输出页眉内容log("Header:"+extractor.getHeaderText());//输出页脚内容log("Footer:"+extractor.getFooterText());//输出当前word文档的元数据信息,包括作者,文档的修改时间等。log(extractor.getMetadataTextExtractor().getText());//获取每个段落的文本StringparaTexts[]=extractor.getParagraphText();for(inti=0;i