Android usa Poi para modificar documentos Doc

Tabla de contenido

prefacio

1. ¿Qué es el PDI?

2. Usar pasos

1. Importar biblioteca

2. Crear clase de herramienta Poi

3. Cita

3. Estilo de plantilla

Resumir



prefacio

 Complete o seleccione en la interfaz y luego asigne el contenido seleccionado al documento de Word. Los documentos son plantillas.

Las diferentes versiones de Android necesitan adaptarse para leer archivos.


 

1. ¿Qué es el PDI?

 POI es una biblioteca de código abierto de Apache Software Foundation.POI proporciona una API para programas Java para leer y escribir archivos en formato de Microsoft Office.

estructura:

HSSF: brinda la capacidad de leer y escribir archivos en formato Microsoft Excel.

XSSF: brinda la capacidad de leer y escribir archivos en formato Microsoft Excel OOXML.

HWPF: brinda la capacidad de leer y escribir archivos en formato Microsoft Word.

HSLF: brinda la capacidad de leer y escribir archivos en formato Microsoft PowerPoint.

HDGF: brinda la capacidad de leer y escribir archivos en formato Microsoft Visio. 

2. Usar pasos

1. Importar biblioteca

  Dirección de descarga de puntos de interés

El proyecto presenta los siguientes tres paquetes jar, estoy usando la versión 3.9

 

 Dirección de descarga de puntos de interés

 
 

 

2. Crear clase de herramienta Poi

 


object PoiUtil {
    private val TAG = "PoiUtil"

    /**
     * 直接读取asset目录下的模板文件
     * @param context 上下文
     * @param openFileName 模板的文件名称
     * @param savePath 保存得文件路径
     * @param saveName 保存得文件名
     * @param map 需要替换的内容
     *
     * @return
     */
    fun init(
        context: Context,
        openFileName: String,
        savePath: String,
        saveName: String,
        map: HashMap<String, String>
    ) = if (writeToDoc(context.assets.open(openFileName), savePath, saveName, map)) {
        "$savePath$saveName"
    } else {
        null
    }


    /**
     * @param templetDocInStream 模板文件的InputStream
     * @param targetDocPath 保存得文件路径
     * @param targetDocName 保存得文件名
     * @param dataMap 需要替换的内容
     *
     * @return 成功 true 失败 false
     */
    private fun writeToDoc(
        templetDocInStream: InputStream,
        targetDocPath: String,
        targetDocName: String,
        dataMap: Map<String, String>
    ): Boolean {
        var file = File(targetDocPath)
        if (!file.exists()) {
            file.mkdirs()
        }
        file = File(targetDocPath + targetDocName)
        if (!file.exists()) {
            file.createNewFile()
        }

        val doc = HWPFDocument(templetDocInStream) //获取word文本内容,整个文本
        val out = FileOutputStream(file) //把doc输出到输出流中HDoc.write(out);
        try { //得到模板doc文件的HWPFDocument对象
            val range = doc.range //替换文本内容,将自定义的$xxx$替换成实际文本
            dataMap.entries.forEach {
                range.replaceText(it.key, it.value)
            }
            //写到另一个文件中
            doc.write(out)
            Log.e(TAG, "writeToDoc  成功保存路径》》${targetDocPath}$targetDocName")
            out.close()

            templetDocInStream.close()
            return true
        } catch (e: IOException) {
            Log.e(TAG, "writeToDoc IOException: $e")
            e.printStackTrace()
            return false
        } catch (e: Exception) {
            Log.e(TAG, "writeToDoc Exception: $e")
            e.printStackTrace()
            return false
        } finally {
            out.close()
            templetDocInStream.close()
        }

    }

}

3. Cita

        val m = HashMap<String, String>()
// %xxxx% 是要和模板定义的标识一致
            m["%add%"] = "青岛"
            m["%preson%"] = "李四"
            m["%idcard%"] = "130109696945655"
            m["%year%"] = "2022" 
            PoiUtil.init(this, "doc/外出请假申请书.doc", "/sdcard/docs/", "外出请假申请书2.doc", m)

3. Estilo de plantilla

La plantilla de todos es diferente.


 

Resumir

 Las diferentes versiones de Android necesitan adaptarse para leer archivos.

El Poi que estoy usando es la versión 3.9.

Supongo que te gusta

Origin blog.csdn.net/weixin_41620505/article/details/127088278
Recomendado
Clasificación