安卓生成word文档(使用了Spire.Doc.Android)

最近产品提了一个新需求,让移动端生成word文件,不是那种表格型的,正常排版的数据,翻来翻去都没有找到合适的,最后发现了一个成熟的三方spire 跟大家分享一下,使用了免费版,有瑕疵,特此记录一下。 后端同事推荐还有一种poi也可以实现,这里只做简单的分享,大家可以自行去查阅poi相关的东西,都不难。

效果:

 首先:导入jar包,链接:https://pan.baidu.com/s/1tssXG67Etp1HfUTLNCE1Jg 
提取码:1024

然后直接上代码:

String namePaths = "";//生成的word文件路径
btn_output_word.setOnClickListener(new View.OnClickListener() {//导出word
    @Override
    public void onClick(View v) {
        //因为导出word中有图片,时间会稍微较长,为了体验加一个加载的loading,你们也可以忽略
        dialog1 = new LoadProgressDialog(MainActivity.this, "正在导出word...");
        dialog1.show();

         //需要文件读写权限
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) {
                //数据源
            final List<ProblemTitleBean> list = new ArrayList<>();
            list.clear();
            list.addAll(beanList0);
            list.addAll(beanList1);
            list.addAll(beanList2);
            list.addAll(beanList3);
            if (list.size() < 1) {
                return;
            }
                //开启一个线程去做生成操作
            new Thread(new Runnable() {
                @Override
                public void run() {
                        // district_name:是我的word文件名开头
                    namePaths = outWordPaths(district_name, list);
                }
            }).start();
        }
    }
});

//关键方法

 private String outWordPaths(String distline_name, List<ProblemTitleBean> list) {
        //创建Word文档
        Document document = new Document();
        //添加一个section
        Section section = document.addSection();
        //添加三个段落至section
        Paragraph para1 = section.addParagraph();

        para1.appendText(distline_name + "台区现场排查异常问题报告");//标题



        for (int i = 0; i < list.size(); i++) {

            Paragraph para2 = section.addParagraph();
            para2.appendText((i + 1) + " 设备名称:" +         list.get(i).getProblem_name());
            Paragraph para3 = section.addParagraph();
            para3.appendText("问题描述:" + list.get(i).getProblem_text());
            //添加第二个段落
            Paragraph paragraph4 = section.addParagraph();
            //添加图片到段落(我这个是本地图片路径)
            if (list.get(i).getProblem_pic_path()!=null && list.get(i).getProblem_pic_path()!="") {
//添加图片的方法
                DocPicture picture = paragraph4.appendPicture(list.get(i).getProblem_pic_path());
                //设置图片宽度
                picture.setWidth(200f);
                //设置图片高度
                picture.setHeight(150f);
            }

            //设置其余两个段落的格式,因为没用到给注释了
//            ParagraphStyle style2 = new ParagraphStyle(document);
//            style2.setName("paraStyle");
//            style2.getCharacterFormat().setFontName("宋体");
//            style2.getCharacterFormat().setFontSize(11f);
//            document.getStyles().add(style2);
//            para2.applyStyle("paraStyle");
//            para3.applyStyle("paraStyle");

            //设置第二段和第三段的段首缩进
            para2.getFormat().setFirstLineIndent(25f);
            para3.getFormat().setFirstLineIndent(25f);
            paragraph4.getFormat().setFirstLineIndent(25f);

            //设置第一段和第二段的段后间距
            para2.getFormat().setAfterSpacing(10f);
            para3.getFormat().setAfterSpacing(10f);
            paragraph4.getFormat().setAfterSpacing(10f);
        }
        para1.getFormat().setAfterSpacing(15f);
        //将第一段作为标题,设置标题格式
        ParagraphStyle style1 = new ParagraphStyle(document);
        style1.setName("titleStyle");
        style1.getCharacterFormat().setBold(true);
        style1.getCharacterFormat().setTextColor(Color.BLUE);
        style1.getCharacterFormat().setFontName("宋体");
        style1.getCharacterFormat().setFontSize(12f);
        document.getStyles().add(style1);
        para1.applyStyle("titleStyle");

        //设置第一个段落的对齐方式
        para1.getFormat().setHorizontalAlignment(HorizontalAlignment.Center);

        //保存文档
        String path = Environment.getExternalStorageDirectory().getPath();
        //这里换成你们自己路径
        File file = new File(path + "/dfsoft/hippo/word");
        if (!file.exists()) {
            file.mkdirs();
        }
        String fileName = "";
        fileName = distline_name + "台区现场排查异常问题报告"+ ".docx";//文档格式docx

        String fileWordPath = file.getPath() + "/" + fileName;
        document.saveToFile(fileWordPath, FileFormat.Docx);
        mHandler.sendEmptyMessage(1);//这里是我开的线程,用来关闭dialog,不用的可以忽略
        return fileWordPath;
    }

最后 你就可以在创建的文件夹看到生成的文件;

我们需求是直接分享出去,

if (namePaths != null && !"".equals(namePaths)) {
    Intent email = tool.email(namePaths);
    startActivity(Intent.createChooser(email, "请选择邮件发送软件!"));
} else {
    Toast.makeText(MainActivity.this, "发送失败!", Toast.LENGTH_SHORT).show();
}

仅供大家参考,ps:因为是免费版所以生成的word首行会有个他们的水印,参考了两种方案,第一种就是自己手动删除(当然这太lowL);第二种我看网上说可以使用别的word操作框架去操作删除参考poi,不过这样会导致项目很大,感觉暂时没有好的处理方式,希望大家有好方法的可以知会我,一起分享进步~

完结,撒花

 

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
Spire.Doc for Java是一款功能强大的Java Word组件,可以帮助Java开发者快速实现Word文档的创建、读取和编辑等操作。其中,根据模板生成Word文档Spire.Doc for Java的一项重要功能,下面简单介绍一下它的使用方法。 1. 创建模板文档 首先,我们需要创建一个Word模板文档,其中包含需要替换的占位符和样式等信息。可以使用Microsoft Word等工具创建模板文档,并将其保存为docdocx格式。 2. 加载模板文档 在Java代码中,使用Spire.Doc for Java的Document类加载模板文档,代码如下: ```java import com.spire.doc.*; public class LoadTemplate { public static void main(String[] args) { // 创建Document对象 Document doc = new Document(); // 加载模板文档 doc.loadFromFile("template.docx"); } } ``` 其中,loadFromFile方法的参数为模板文档的路径。 3. 替换占位符 接下来,我们需要根据实际需求替换模板文档中的占位符。Spire.Doc for Java提供了replace方法来实现占位符的替换,代码如下: ```java import com.spire.doc.*; public class ReplacePlaceholder { public static void main(String[] args) { // 创建Document对象 Document doc = new Document(); // 加载模板文档 doc.loadFromFile("template.docx"); // 替换占位符 doc.replace("{{name}}", "张三", true, true); doc.replace("{{age}}", "25", true, true); // 保存文档 doc.saveToFile("output.docx", FileFormat.Docx_2013); } } ``` 其中,replace方法的第一个参数为需要替换的占位符,第二个参数为替换后的文本内容,第三个参数表示是否区分大小写,第四个参数表示是否替换整个单词。 4. 设置样式 如果需要设置生成Word文档的样式,可以使用Spire.Doc for Java提供的各种样式类来实现,例如ParagraphStyle、CharacterFormat等。具体使用方法可以参考Spire.Doc for Java的官方文档。 5. 保存文档 最后,调用Document类的saveToFile方法将生成Word文档保存到指定路径,代码如下: ```java doc.saveToFile("output.docx", FileFormat.Docx_2013); ``` 其中,第一个参数为保存的文件路径,第二个参数为保存的文档格式,可以选择docdocx、pdf等多种格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值