精华内容
参与话题
问答
  • java导出word文档

    千次阅读 2015-08-26 22:13:05
    java使用模板导出word文档


         使用freemarker模板导出word文档,用的比较多。这里也是采用的这种方式。

          1  编辑一个word文件的模板,用于在程序中需要读入填充在模板中的数据先用字母代替,注意word版本为word2003或高于这个版本;

               如:test.doc


              

         2 把模板另存为xml文件;

             如:test.xml



         3 在xml中查找之前用字母代替的值 加上${} ,如${test}  ${guojia},把文件名改为test.ftl;

      

        4 在项目的WebContent目录下新建一个文件夹,把test.xml放进去;

        5 编写代码;

    package com.web.action;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.struts2.ServletActionContext;
    import org.springframework.stereotype.Controller;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    import freemarker.template.Configuration;
    import freemarker.template.DefaultObjectWrapper;
    import freemarker.template.Template;
    @Controller
    public class ExportAction extends ActionSupport{
    	//word模板
    	public static final String word_template="/test.ftl";  
    	//存放模板的目录
    	public static final String template_path="/template";
    	//临时文件
    	public static final String word_temp="/temp.doc";
    	
    	public String executeExport(){	
    		HttpServletRequest request=ServletActionContext.getRequest();
    		HttpServletResponse response=ServletActionContext.getResponse();	
    		
    		try {
    			Map dataMap=new HashMap();
    			if(getData(request, response, dataMap)){
    				File previewFile=new File(request.getSession().getServletContext().getRealPath(word_temp));
    				InputStream is=new FileInputStream(previewFile);
    				response.reset();
    				response.setContentType("application/vnd.ms-word;charset=UTF-8");
    				response.setHeader("Content-Disposition","attachment; filename=export.doc");
    				OutputStream os=response.getOutputStream();
    				byte[] b=new byte[1024];
    				int len;
    				while((len=is.read(b))!=-1){
    					os.write(b, 0, len);
    				}
    				is.close();
    				os.flush();
    				os.close();
    			}
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    	
    	
    	
    	public static Template configTemplate(HttpServletRequest request,String temp){
    		Template template=null;
    		try {
    			Configuration cfg=new Configuration();
    			ServletContext application=request.getSession().getServletContext();
    			System.out.println(application.getRealPath(template_path));
    			cfg.setDirectoryForTemplateLoading(new java.io.File(application.getRealPath(template_path)));
    			cfg.setObjectWrapper(new DefaultObjectWrapper());
    			template=cfg.getTemplate(temp,"utf-8");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    		return template;
    	}
    	
    	
    	
    	public static void toPreview(HttpServletRequest request,String temp,Map<?, ?> root){
    		try {
    			String previewPath=request.getSession().getServletContext().getRealPath("")+word_temp;
    			Template tmplate=configTemplate(request, temp);
    			FileOutputStream fis=new FileOutputStream(previewPath);
    			Writer out=new OutputStreamWriter(fis,"utf-8");
    			tmplate.process(root, out);
    			out.flush();
    			out.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
    	
    	
    	public boolean getData(HttpServletRequest request,HttpServletResponse response,Map dataMap){
    		dataMap.put("test", "测试");
    		dataMap.put("guojia", "中国");
    		dataMap.put("shoudu", "首都");
    		toPreview(request, word_template, dataMap);
    		return true;
    	}
    	
    }
    


          6 我用的struts2,executeExport为处理请求的方法,之前返回值我写的是任意字符串,不影响结果但是抛出异常 java.lang.IllegalStateException,我把返回的字符串改成null,这个异常被解决了。呵呵 当然这是和导出无关的事情,只是在这个程序里遇到了这个问题。

          7  导出结果:

















































































    
    展开全文
  • Java导出Word文档

    2013-03-15 17:00:27
    导出需要jar包:iText-5.0.6.jar,iTextAsian.jar,iText-rtf-2.1.7.jar,jxl.jar,网上有大把 以下都是我以前项目中用过的...导出word: package com.bank.util; import java.awt.Color; import java.io.FileOut

    导出需要jar包:iText-5.0.6.jar,iTextAsian.jar,iText-rtf-2.1.7.jar,jxl.jar,网上有大把

    以下都是我以前项目中用过的,现整理下,把自己的数据加进去即可,希望能帮到大家!

    导出word:

    package com.bank.util;
    
    import java.awt.Color;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import com.lowagie.text.Cell;
    import com.lowagie.text.Document;
    import com.lowagie.text.DocumentException;
    import com.lowagie.text.Element;
    import com.lowagie.text.Font;
    import com.lowagie.text.FontFactory;
    import com.lowagie.text.Image;
    import com.lowagie.text.PageSize;
    import com.lowagie.text.Paragraph;
    import com.lowagie.text.Phrase;
    import com.lowagie.text.Table;
    import com.lowagie.text.pdf.BaseFont;
    import com.lowagie.text.rtf.RtfWriter2;
    
    public class WordTools {
    
     public void createDocContext(String file) throws DocumentException,
     IOException {
     // 设置纸张大小
     Document document = new Document(PageSize.A4);
     // 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中
     RtfWriter2.getInstance(document, new FileOutputStream(file));
     document.open();
     // 设置中文字体
     BaseFont bfChinese = BaseFont.createFont("STSongStd-Light",
     "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
     // 标题字体风格
     Font titleFont = new Font(bfChinese, 12, Font.BOLD);
     // 正文字体风格
     Font contextFont = new Font(bfChinese, 10, Font.NORMAL);
     Paragraph title = new Paragraph("标题");
     // 设置标题格式对齐方式
     title.setAlignment(Element.ALIGN_CENTER);
     title.setFont(titleFont);
     document.add(title);
    
     String contextString = "iText是一个能够快速产生PDF文件的java类库。"
     + " \n"// 换行
     + "iText的java类对于那些要产生包含文本,"
     + "表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。"
     + "使用iText与PDF能够使你正确的控制Servlet的输出。";
     Paragraph context = new Paragraph(contextString);
     // 正文格式左对齐
     context.setAlignment(Element.ALIGN_LEFT);
     context.setFont(contextFont);
     // 离上一段落(标题)空的行数
     context.setSpacingBefore(5);
     // 设置第一行空的列数
     context.setFirstLineIndent(20);
     document.add(context);
    
             //利用类FontFactory结合Font和Color可以设置各种各样字体样式
     /**
     * Font.UNDERLINE 下划线,Font.BOLD 粗体
     */
     Paragraph underline = new Paragraph("下划线的实现", FontFactory.getFont(
     FontFactory.HELVETICA_BOLDOBLIQUE, 18, Font.UNDERLINE,
     new Color(0, 0, 255)));
     document.add(underline);
     
     // 设置 Table 表格
     Table aTable = new Table(3);
     int width[] = {25,25,50};
     aTable.setWidths(width);//设置每列所占比例
     aTable.setWidth(90); // 占页面宽度 90%
    
     aTable.setAlignment(Element.ALIGN_CENTER);//居中显示
     aTable.setAlignment(Element.ALIGN_MIDDLE);//纵向居中显示
     aTable.setAutoFillEmptyCells(true); //自动填满
     aTable.setBorderWidth(1); //边框宽度
     aTable.setBorderColor(new Color(0, 125, 255)); //边框颜色
     aTable.setPadding(0);//衬距,看效果就知道什么意思了
     aTable.setSpacing(0);//即单元格之间的间距
     aTable.setBorder(2);//边框
    
     //设置表头
     /**
     * cell.setHeader(true);是将该单元格作为表头信息显示;
     * cell.setColspan(3);指定了该单元格占3列;
     * 为表格添加表头信息时,要注意的是一旦表头信息添加完了之后, \
     * 必须调用 endHeaders()方法,否则当表格跨页后,表头信息不会再显示
     */
     Cell haderCell = new Cell("表格表头");
     haderCell.setHeader(true);
     haderCell.setColspan(3);
     aTable.addCell(haderCell);
     aTable.endHeaders();
    
     Font fontChinese = new Font(bfChinese, 12, Font.NORMAL, Color.GREEN);
     Cell cell = new Cell(new Phrase("这是一个测试的 3*3 Table 数据", fontChinese ));
     cell.setVerticalAlignment(Element.ALIGN_TOP);
     cell.setBorderColor(new Color(255, 0, 0));
     cell.setRowspan(2);
     aTable.addCell(cell);
    
     aTable.addCell(new Cell("#1"));
     aTable.addCell(new Cell("#2"));
     aTable.addCell(new Cell("#3"));
     aTable.addCell(new Cell("#4"));
     Cell cell3 = new Cell(new Phrase("一行三列数据", fontChinese ));
     cell3.setColspan(3);
     cell3.setVerticalAlignment(Element.ALIGN_CENTER);
     aTable.addCell(cell3);
    
     document.add(aTable);
     document.add(new Paragraph("\n"));
     //添加图片
    // Image img=Image.getInstance("http://127.0.0.1:8080/testSystem/images/1_r1_c1.png");
    // img.setAbsolutePosition(0, 0);
    // img.setAlignment(Image.RIGHT);//设置图片显示位置
    // img.scaleAbsolute(12,35);//直接设定显示尺寸
    // img.scalePercent(50);//表示显示的大小为原尺寸的50%
    // img.scalePercent(25, 12);//图像高宽的显示比例
    // img.setRotation(30);//图像旋转一定角度
    // document.add(img);
    
     document.close();
     } 
     public static void main(String[] args){
      WordTools b=new WordTools();
       try {
        b.createDocContext("d:/demo.doc");
       } catch (DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
    }
    }


    展开全文
  • java 导出word文档

    2012-12-27 21:25:33
    需要的jar包:itext-2.1.7.jar 和 itext-rtf-2.1.7.jar 【下载】 ...import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import j

    需要的jar包:itext-2.1.7.jar 和  itext-rtf-2.1.7.jar       【下载

     

    package test;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
     
    import com.lowagie.text.Document;
    import com.lowagie.text.DocumentException;
    import com.lowagie.text.Element;
    import com.lowagie.text.Font;
    import com.lowagie.text.PageSize;
    import com.lowagie.text.Paragraph;
    import com.lowagie.text.pdf.BaseFont;
    import com.lowagie.text.rtf.RtfWriter2;
     
     
     
    public class GetWord {
     private static Document document;
     private static BaseFont baseFont;
     
    //创建word,并设置纸张文档
     
     private static void openWordFile(String fileName) throws DocumentException,
       IOException {
      document = new Document(PageSize.A4);
      RtfWriter2.getInstance(document, new FileOutputStream(fileName));
      document.open();
      baseFont = BaseFont.createFont();
     }
     
    //设置标题
     
     private static boolean setTitle(String title) throws DocumentException {
      Font font = new Font(baseFont, 12, Font.BOLD);
      Paragraph pTitle = new Paragraph(title + "\n");
      pTitle.setFont(font);
      pTitle.setAlignment(Element.ALIGN_CENTER);
     
      return document.add(pTitle);
     
     }
     
    //设置文档内容
     
     private static boolean setContent(String content) throws DocumentException {
      Font font = new Font(baseFont, 10, Font.NORMAL);
      Paragraph pContent = new Paragraph(content);
      pContent.setFont(font);
      pContent.setAlignment(Element.ALIGN_LEFT);
      pContent.setSpacingAfter(5);
      pContent.setFirstLineIndent(20);
      return document.add(pContent);
     }
     
    //对外使用的接口
     
     public static boolean CreateWordFile(String url, String title,
       List<String> contents) {
      boolean returnValue = false;
      try {
       openWordFile(url);
       returnValue = setTitle(title);
       for (int i = 0; i < contents.size(); i++) {
        returnValue = returnValue && setContent(contents.get(i));
       }
       document.close();
      } catch (DocumentException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     
      return returnValue;
     
     }
     
    //对外使用的接口
     
     public static boolean CreateWordFile(String url, String title,
       Map<problem,List<options>> contents) {
      boolean returnValue = false;
      try {
       openWordFile(url);
       returnValue = setTitle(title);
       
       Integer num = 1;
       for (problem pr : contents.keySet()) {
    	   String str = num +"、 "+pr.getQuestion();
    	  returnValue = returnValue && setContent(str);
    		if (contents.get(pr) != null) {
    			for (options op : contents.get(pr)) {
    				str = "   " + op.getName() + ": " + op.getContents();
    				returnValue = returnValue && setContent(str);
    			}
    		}else{
    			returnValue = returnValue && setContent(null) && setContent(null);
    		}
    	  num++;
    	  returnValue = returnValue && setContent(null);
      }
       document.close();
      } catch (DocumentException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     
      return returnValue;
     
     }
     
     //对外使用的接口
     public static boolean CreateWordFile(String url, String title,
       String content) {
      boolean returnValue = false;
      try {
       openWordFile(url);
       returnValue = setTitle(title);
       returnValue = returnValue && setContent(content);
       document.close();
      } catch (DocumentException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }
     
      return returnValue;
     
     }
     
    public static void main(String[] args ) {
      GetWord wordUtil = new GetWord();
      List<String> strList = new ArrayList<String>();
      strList.add("哈哈哈哈");
      strList.add("呵呵呵呵呵");
      
      Map<problem,List<options>> contents =  new HashMap<problem, List<options>>();
      List<options> olist = new ArrayList<options>();
      olist.add(new options("A", "呵呵 不知道"));
      olist.add(new options("B", "你说过,末日后,一起"));
      
      contents.put(new problem("你喜欢我吗?","b"), olist);
      List<options> list = new ArrayList<options>();
      list.add(new options("A", "呵呵 不知道"));
      list.add(new options("B", "你说过,末日后,一起"));
      list.add(new options("C", "你下吧 ,我不想说了"));
      list.add(new options("D", "或许我们真的不合适"));
      contents.put(new problem("我们之间存在感情吗?","b"), list);
      contents.put(new problem("请解释,爱情到底是什么?","b"), null);
      
    //传入内容为String
      wordUtil.CreateWordFile("e:\\word.doc", "感情调查", "我说过的、哼");
    
    //传入内容为map
      wordUtil.CreateWordFile("e:\\word-map.doc", "感情调查", contents);
     
    //传入内容为List
      wordUtil.CreateWordFile("e:\\word-list.doc", "标题居中", strList);
     
     }
    }
    
    class options{
    	private String name;
    	private String contents;
    
    	public options(String name, String content){
    		this.contents = content;
    		this.name = name;
    	}
    	
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getContents() {
    		return contents;
    	}
    	public void setContents(String contents) {
    		this.contents = contents;
    	}
    }
    
    class problem{
    	private String question;
    	private String answer;
    
    	public problem(String q,String a){
    		this.question = q;
    		this.answer = a;
    	}
    	
    	public String getQuestion() {
    		return question;
    	}
    	public void setQuestion(String question) {
    		this.question = question;
    	}
    	public String getAnswer() {
    		return answer;
    	}
    	public void setAnswer(String answer) {
    		this.answer = answer;
    	}
    }
    
    


     

    展开全文
  • 看了下文档,最终决定使用模板的方式来导出数据,感觉也是最简单的一种方式了。过程如下:使用composer下载PHPWord到项目中composer require phpoffice/phpword可以看到,phpword的下载量还是挺高的下载完后就可以...

    既然有PHPExcel,那么肯定也会有PHPWord库,且都是phpoffice家的。看了下文档,最终决定使用模板的方式来导出数据,感觉也是最简单的一种方式了。

    过程如下:

    使用composer下载PHPWord到项目中

    composer require phpoffice/phpword

    可以看到,phpword的下载量还是挺高的

    573d39388380c8ae24e4a5cad291a764.png

    下载完后就可以开始制作我们的需求模板了,如下图所示,模板中使用${变量名}作为占位符,到时候用代码替换即可,${company_name}、${pic}等都是占位符

    00f150b32e9c2a22d6e0a804fb615b8a.png

    制作好模板就可以开始写代码了。

    //导出word大致可以分为三步
    //1.创建模板对象
    $document = new TemplateProcessor('./template.docx');
    
    //2.插入数据
    //插入文字
    $document->setValue('company_name', 'XXX有限公司');
    
    
    //插入图片
    $document->setImageValue('pic1', './img/gyy.jpeg');
    $document->setImageValue('pic2', './img/zyt.jpeg');
    
    //插入文字
    $document->setValue('organizationo', '123456');
    
    //3.保存文件
    $document->saveAs('./target.docx');
    

    导出效果如下:

    5f0bf41be4e2d8a818124df79a9d8f39.png

    可以看到默认导出都word的图片比较小,phpword支持自定义图片的大小,这里需要修改setImageValue方法的第二个参数,如果想自定义宽高就需要传入一个数组,格式如下

    array("path" => xx, "width" => yy, "height" => zz)

    path代表要插入图片的路径,width和height分别代表宽高

    修改后的代码如下

    //1.创建模板对象
    $document = new TemplateProcessor('./template.docx');
    
    //2.插入数据
    //插入文字
    $document->setValue('company_name', 'XXX有限公司');
    
    
    //插入图片,宽200像素,高300像素
    $picParam = ['path' => './img/gyy.jpeg', 'width' => 200, 'height' => 300]; 
    $document->setImageValue('pic1', $picParam);
    
    $picParam2 = ['path' => './img/zyt.jpeg', 'width' => 200, 'height' => 300];
    $document->setImageValue('pic2', $picParam2);
    
    //插入文字
    $document->setValue('organizationo', '123456');
    
    //3.保存文件
    $document->saveAs('./target.docx');
    

    最终导出效果如下:

    图片变成了我们期望的大小了。

    f594b36828a540c1ef4d50cc53e05bbc.png

    如果想把生成的文件下载到浏览器,可以在生成文件后加上如下代码即可

    //4.从浏览器下载
    ob_clean();
    ob_start();
    $fp = fopen('./target.docx',"r");
    $file_size = filesize('./target.docx');
    Header("Content-type:application/octet-stream");
    Header("Accept-Ranges:bytes");
    Header("Accept-Length:".$file_size);
    Header("Content-Disposition:attchment; filename=".'测试文件.docx');
    $buffer = 1024;
    $file_count = 0;
    while (!feof($fp) && $file_count < $file_size){
        $file_con = fread($fp,$buffer);
        $file_count += $buffer;
        echo $file_con;
    }
    fclose($fp);
    ob_end_flush();
    

    以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要

    PHP进阶架构师>>>视频、面试文档免费获取shimo.im
    d6f227c2e6692dad8a1808a5d218c36f.png

    或 者关注咱们下面的知乎专栏

    PHP架构师圈子zhuanlan.zhihu.com
    ba84166c28b8df15ddc16feb10ef1eac.png
    展开全文
  • Freemarker java导出word文档 ** 一、生成Word模板 生产word模版主要分为两步,一个是把word文档另存为xml文档,注意是另存为。然后把xml文档后缀改为ftl文档。在编辑word文档的时候,最好把需要填充或替换的位置,...
  • 在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表、医院的患者统计报表、电商平台的销售报表等等。 导出Word方式多种多样,通常有以下几种方式: 1. 使用第三方Java工具类库Hutool...
  • 使用的POI接口 传入一个Map,然后根据key:value的形式填充word文档。 ...@ApiOperation(value = "导出word文档") @ApiImplicitParams({@ApiImplicitParam(name = "response",value = "返回流"...
  • 使用java导出word文档

    2018-05-25 17:55:46
    这时候,我们应该考虑使用FreeMarker的模板技术快速实现这个复杂的功能,实现思路是这样的:先创建一个word文档,按照需求在word中填好一个模板,然后把对应的数据换成变量(你自己默认好的),然后将文档保存为xml...
  • 使用Java导出word文档

    2018-03-05 10:04:16
    先创建一个word文档,按照需求在word中填好一个模板,然后把对应的数据换成变量2.另存为–&gt;保存类型:word2003XML文档(∗.xml)3.用变成工具打开以保存的xml文件,检查你的2.另存为–&gt;保存类型:word2003...
  • java导出word文档(easypoi)

    千次阅读 2019-03-14 18:30:53
    导出word,引用的是easypoi的jar 第一步:导入jar <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.0.3</version>...
  • 使用freemarker技术,首先将word模板另存为xml文档,方便填充数据。然后将后缀名改为ftl,简单方便.
  • 分为两个部分: 1.生成word文档(略去生成模板文件过程) 2.发送至客户端 privatebooleancreateDoc(Map<String,String>map,StringfilePath, StringfileNam...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 1.先找出将要生成的Word文档模板(也是一份Word文档,只不过里边写了占位符)。 2.将模板文件另存为xml文件,转为xml之后并把后缀名改为ftl...5.声明Word文档导出公共类。 public class WordUtil { public s...
  • Java导出Word文档案例

    2012-05-10 21:55:52
    最近做的一个Flex项目中要把报表导出Word文件中。网上查了好多资料后最终在网友的帮助和自己的奋斗下成功搞定。现把代码贴出来供大家批评指正并一起学习。 package org.replace; import java.io.File; ...
  • import com.lowagie.text.*; import com.lowagie.text.Font; import com.lowagie.text.rtf.RtfWriter2; import com.lowagie.text.rtf.style.RtfFont; import com.test.action.monitor.service.CommonService; import
  • Java导出Word文档(可设置字体)

    千次阅读 2017-01-20 17:41:23
    原作者:兰博基尼 ...导出内容导Word文档中,可设置字体,亲测可用。 importjava.io.FileOutputStream; import java.io.IOException; import java.util.List; importcom.lowagie.text.Document; impo
  • 导出Word文档整理前言​ 业务需要将数据库中存的图片导出成word文档,并给这些图片按照文件名生成目录。以下为解决方案,通常在导出文件时,poi使用的频率较高,可以导出各类模板类的和非模板类的文件,但是在导出...
  • 最近在做一个word导出功能,需求非常简单,只需要将内容导出word文件里即可,对于word的格式并没有要求。功能不复杂,想快速实现这个功能,但是使用POI的话,比较麻烦。本文记录一下通过一个工具类即可实现简单的...
  • 本文目录 一、Controller ...本文记录一下通过一个工具类即可实现简单的word导出的功能,上一篇文章讲的是通过这个工具类实现服用在本地,word文档下载到本地的功能。本文将会实现项目部署到服务

空空如也

1 2 3 4 5 ... 20
收藏数 825
精华内容 330
关键字:

java导出word文档

java 订阅