Android 本地预览Excel,Word,PPT,PDF [ 解决Android asposed转Excel乱码问题 ]

Android 本地预览Excel,Word,PPT,PDF [ 解决Android asposed转Excel乱码问题 ],第1张

概述Android本地预览Excel,Word,PPT,PDF解决Androidasposed转Excel乱码问题近期获得一个需求,要求做一个类似WPS的功能,不过只需要预览不需要编辑Android本身没有提供预览Office的组件,百度后发现腾讯TBS可以做到这一点,试了下,效果不尽人意;附腾讯TBS链接:https://

AndroID 本地预览Excel,Word,PPT,pdf

解决AndroID asposed转Excel乱码问题

近期获得一个需求, 要求做一个类似WPS的功能, 不过只需要预览不需要编辑

AndroID本身没有提供预览Office的组件, 百度后发现腾讯TBS可以做到这一点,试了下,效果不尽人意;

附腾讯TBS链接 : https://x5.tencent.com/tbs/index.HTML

我采用的方案是首先通过aspose将excel,word,ppt转为pdf, 然后用pdfVIEwer打开;

aspose链接 : https://www.aspose.com/

pdfVIEwer链接 : https://github.com/barteksc/AndroIDpdfVIEwer

需要引入cells , slIDes ,words 三个jar包, 分别对应 Excel , PPT , Word ;

jar包连带源码都下最后附上链接, jar包也可以直接用aspose官网下载;

运行效果实例

部分代码实例 :

选择文件【调用系统的文件管理】

/** * 选择文件【调用系统的文件管理】 */private fun choosefile() {    startActivityForResult(Intent().apply {        action = Intent.ACTION_GET_CONTENT        type = "*/*"        addcategory(Intent.category_OPENABLE)    }, REQUEST_CHOOSE_file)}

onActivityResult

//  选择文件返回    overrIDe fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {        super.onActivityResult(requestCode, resultCode, data)        if (resultCode == RESulT_OK) {            if (requestCode == REQUEST_CHOOSE_file) {                data?.let {                    val uri = it.data                    val path = fileChooseUtil.getInstance(this).getChoosefileResultPath(uri)                    openfile(path)                }            }        }    }

openfile

private fun openfile(path: String) {    loading.visibility = VIEw.VISIBLE    GlobalScope.launch {        val realPath = getRealPath(path)        runOnUiThread {            loading.visibility = VIEw.INVISIBLE            if (TextUtils.isEmpty(realPath)) {                ToastUtils.showShort("格式不支持")                return@runOnUiThread            }            pdfVIEw.fromfile(file(realPath))                .pages(0, 2, 1, 3, 3, 3) // all pages are displayed by default                .enableSwipe(true) // allows to block changing pages using swipe                .swipeHorizontal(false)                .enableDoubletap(true)                .defaultPage(0)                .onError {                    ToastUtils.showLong("onError: ${it.message} ")                }                .onTap { false }                .enableAnnotationRendering(false) // render annotations (such as comments, colors or forms)                .password(null)                .scrollHandle(null)                .enableAntialiasing(true) // improve rendering a little bit on low-res screens                // spacing between pages in dp. To define spacing color, set vIEw background                .spacing(0)                .autoSpacing(false) // add dynamic spacing to fit each page on its own on the screen                .linkHandler {}                .pageFitPolicy(FitPolicy.WIDTH) // mode to fit pages in the vIEw                .fitEachPage(false) // fit each page to the vIEw, else smaller pages are scaled relative to largest page.                .pageSnap(false) // snap pages to screen boundarIEs                .pageFling(false) // make a fling change only a single page like VIEwPager                .nightmode(false) // toggle night mode                .load()        }    }}

getRealPath

/** * 获取pdf路径 */private fun getRealPath(path: String): String {    //  首先需要判断 原始类型是否为pdf    val type = getfileType(path)    val filename = getfilename(path)    //  如果是pdf 直接返回    if (type == "pdf") {        return path    }    val realPath = tempDir + file.separator + filename + type + ".pdf"    //  如果已存在 直接返回    if (file(realPath).exists()) {        return realPath    }    //  Word    if (type == "doc" || type == "docx") {        try {            val document = document(path)            document.save(realPath, SaveFormat.pdf)            return realPath        } catch (e: Exception) {            e.printstacktrace()        }        //  Excel    } else if (type == "xlsx" || type == "xls") {        try {            AsposedUtils.excel2pdf(path, realPath)            return realPath        } catch (e: Exception) {            e.printstacktrace()        }        //  PPT    } else if (type == "ppt" || type == "pptx") {        try {            AsposedUtils.ppt2pdf(path, realPath)            return realPath        } catch (e: Exception) {            e.printstacktrace()        }    }    return ""}

解决aspose excel转换后中文乱码问题

复制中文字体[随便选一个, 我选的微软雅黑]到assets中将assets中的字体拷贝到储存中转换Excel时, 将字体传给WorkbooktempDir 下有微软雅黑字体
fun excel2pdf(sourcefilePath: String, desfilePath: String) {    try {        //  中文乱码处理  主要是设置微软雅黑字体        val configs = IndivIDualFontConfigs()        configs.setFontFolder(tempDir, true)        val loadOptions = LoadOptions()        loadOptions.FontConfigs = configs        //  loadOptions.languageCode = CountryCode.CHINA        val pdfSaveOptions = pdfSaveOptions()        pdfSaveOptions.onePagePerSheet = true        //  原始excel路径        val wb = Workbook(sourcefilePath, loadOptions)        val fileOS = fileOutputStream(desfilePath)        //  数组为几就展示几页        val showSheets = intArrayOf(wb.worksheets.count)        //  隐藏workbook中不需要的sheet页。        //  printSheetPage(wb, showSheets)        wb.save(fileOS, pdfSaveOptions)        fileOS.flush()        fileOS.close()        println("完毕")    } catch (e: Exception) {        e.printstacktrace()    }}
总结

以上是内存溢出为你收集整理的Android 本地预览Excel,Word,PPT,PDF [ 解决Android asposed转Excel乱码问题 ]全部内容,希望文章能够帮你解决Android 本地预览Excel,Word,PPT,PDF [ 解决Android asposed转Excel乱码问题 ]所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1004983.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存