1.下載poi相關(guān)jar包,導(dǎo)入工程爆安,配置build.gradle文件
dependencies {
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
api fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.6'
}
2.創(chuàng)建空文檔叛复,文檔內(nèi)注入標(biāo)簽:$content$
3.創(chuàng)建PoiUtils 類(lèi),并實(shí)現(xiàn)
/**
* 生成一個(gè)doc文件
* @param templetDocPath 模板文件的完整路徑
* @param targetDocPath 生成的目標(biāo)文件的完整路徑
* @param dataMap 替換的數(shù)據(jù)*/
public static void writeToDoc(String templetDocPath, String targetDocPath, Map<String,String> dataMap){
try
{
//得到模板doc文件的HWPFDocument對(duì)象
InputStream in = new FileInputStream(templetDocPath);
writeToDoc(in,targetDocPath,dataMap);
}
catch(IOException e)
{
e.printStackTrace();
}
}
/**
* 生成一個(gè)doc文件扔仓,主要用于直接讀取asset目錄下的模板文件褐奥,不用先復(fù)制到sd卡中
* @param templetDocInStream 模板文件的InputStream
* @param targetDocPath 生成的目標(biāo)文件的完整路徑
* @param dataMap 替換的數(shù)據(jù)*/
public static void writeToDoc(InputStream templetDocInStream, String targetDocPath, Map<String,String> dataMap){
try
{
//得到模板doc文件的HWPFDocument對(duì)象
HWPFDocument HDoc = new HWPFDocument(templetDocInStream);
// 獲取word文本內(nèi)容,整個(gè)文本
Range range = HDoc.getRange();
// 替換文本內(nèi)容翘簇,將自定義的$xxx$替換成實(shí)際文本
for(Map.Entry<String, String> entry : dataMap.entrySet())
{
range.replaceText(entry.getKey(), entry.getValue());
}
//寫(xiě)到另一個(gè)文件中
FileOutputStream out = new FileOutputStream(targetDocPath, true);
//把doc輸出到輸出流中
HDoc.write(out);
out.close();
templetDocInStream.close();
}
catch(IOException e)
{
e.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
}
4.創(chuàng)建橋文件撬码,并在需要調(diào)用的地方調(diào)用:
private void create(MethodChannel.Result result,Map<String,String> argument) {
try {
InputStream templetDocStream = activity.getAssets().open("empty.doc");
String targetDocPath = activity.getExternalFilesDir("docTest").getPath() + File.separator + argument.get("name") + ".doc";//這個(gè)目錄,不需要申請(qǐng)存儲(chǔ)權(quán)限
Map<String, String> dataMap = new HashMap<String, String>();
dataMap.put("$content$", argument.get("content"));
PoiUtils.writeToDoc(templetDocStream,targetDocPath,dataMap);
result.success(targetDocPath);
} catch (IOException e) {
e.printStackTrace();
result.success("errorEnd");
}
}
打完收工版保,參考文檔:
https://www.cnblogs.com/whycxb/p/9789760.html