精华内容
下载资源
问答
  • word文档
    千次阅读
    2021-06-28 10:27:22

    新建文档 (电脑入门到精通网 www.58116.cn)

    我们讲了Word第一课后,有位朋友和我说用起来太麻烦了,问他怎么个麻烦法,他说,有时要打印几份文件,每打印一份就要退出一次Word重来,所以特别麻烦。 其实根本用不着退出Word。你可以在Word里面关掉已经打印出来的文件,然后新建一个文档或者打开另外的文档,同时打开几个文件也可以。 (电脑入门到精通网 www.58116.cn)

    怎么做呢?很简单的,先看新建文档。我们打开Word。Word启动之后自动建立了一个新文档,注意现在标题栏上的文档名称是“文档1.doc”,单击工具栏上的"新建空白文档"按钮,现在我们就又新建了一个空白的文档,它的名字叫做“文档2.doc”。再单击这个按钮,就出现了“文档3”。这是我们新建一个文档最常用的方法。

    (电脑入门到精通网 www.58116.cn)

    建立新文档 还 有几种 方法:

    (电脑入门到精通网 www.58116.cn)

    1通过“开 始”菜单 的“新建Office 文档”命 令来 建立:

    单 击“开始” 按钮,单击 “新建 Office 文档”命令 (电脑入门到精通网 www.58116.cn)

    打开“新建Office文档”对话框,选择“空文档”: (电脑入门到精通网 www.58116.cn)

    单击“确定”按钮,出现了Word的启动画面,我们就建立了一个新的Word文档。

    (电脑入门到精通网 www.58116.cn)

    2 使用快捷键来建立: 在Word中按Ctrl+N键,可以建立一个新的空白文档。

    (电脑入门到精通网 www.58116.cn)

    3 在Word中使用“文件”菜单的“新建”命令来建立: (电脑入门到精通网 www.58116.cn)

    4 在“我的电脑”和“资源管理器”中使用“新建”命令来建立:

    (电脑入门到精通网 www.58116.cn)

    5 使用右键菜单来建立: 在桌面上空白处单击鼠标右键,在快捷菜单中单击“新建”项,从弹出的子菜单中选择“Microsoft Word文档”,给这个文档起好名字,这个文档就建立好了。

    (电脑入门到精通网 www.58116.cn)

    打开文档

    (电脑入门到精通网 www.58116.cn)

    怎么在Word里打开以前存盘的文档呢?我的朋友说他一直都是先退出Word,然后去双击要打开的文件,Word就会自动启动并打开那个文件。

    其实打开和新建一样,不用退出Word也可以打开文件,单击工具栏上的“打开”按钮,就可以打开一个“打开文件”对话框。

    (电脑入门到精通网 www.58116.cn)

    我们来看看怎么打开D盘“笑话”文件夹中的“笑话.doc”。

    (电脑入门到精通网 www.58116.cn)

    (电脑入门到精通网 www.58116.cn)

    单击这个下拉列表框,从弹出的列表中选择“D:”,也就是D盘,现在下面的文件列表中出现的就是D盘的内容了,双击打开这个“笑话”文件夹,列表中就出现了“笑话.doc”文件,选中这个文件,单击“打开”按钮,就打开这个文件了。

    (电脑入门到精通网 www.58116.cn)

    打开文档 还 有几种 方法:

    (电脑入门到精通网 www.58116.cn)

    1通过“开始”菜单的“打开Office文档”命令来打开;

    (电脑入门到精通网 www.58116.cn)

    2 在Word里按“Ctrl+O”键。 在Word中使用“文件”菜单的“打开”命令。 (电脑入门到精通网 www.58116.cn)

    3使用“文件”菜单中的历史记录来打开文档:打开“文件”菜单,在下面有一栏显示了我们最近打开过的文档,单击其中的一条,就可以打开相应的文档了; (电脑入门到精通网 www.58116.cn)

    我们还可以设置这个文档显示的数目:打开“工具”菜单,单击“选项”命令,打开“选项”对话框,单击“常规”选项卡,在这里有一个“列出最近使用文件?个”选项,输入框中可以输入文件的数目,而清除这个复选框则可以让Word不再记忆曾经打开的文件。

    (电脑入门到精通网 www.58116.cn)

    保存文档 (电脑入门到精通网 www.58116.cn)

    现在我们来看看保存文档。这次我们讲一点新东西: (电脑入门到精通网 www.58116.cn)

    打开“另存为”对话框;这里有一个“新建文件夹”按钮,它可是很有用的:我们平时的文件都是分类存放的,而有时要保存编辑的稿件,觉得放到哪里都不合适,这时我们就可以新建一个文件夹把文件放到里面。单击这个“新建文件夹”按钮,在打开的对话框中输入文件夹的名字“稿件”, (电脑入门到精通网 www.58116.cn)

    单击“确定”按钮,回到“另存为”对话框;输入文档的名字,单击“保存”按钮,我们就可以把文档保存在新建的文件夹中了。

    (电脑入门到精通网 www.58116.cn)

    多文档切换 (电脑入门到精通网 www.58116.cn)

    不过现在就有另一个问题了,现在我们打开了几个文档,而不是像以前那样只打开一个文档,如果我

    们想从现在这个文档切换到另外的一个文档中,该怎 么办呢?一般的办法是使用窗口菜单来切换当前编辑

    的文档。 (电脑入门到精通网 www.58116.cn)

    打开窗口菜单,菜单的最下面列出了我们打开的 所有文档,带有对号的是当前编辑的文档,单击“文

    档2.doc”,就切换到了“文档2.doc”。 当然你也 可以按下ALT+TAB键来切换,这是Word 2000新增的

    切换功能。

    (电脑入门到精通网 www.58116.cn)

    关闭文档和退出Word (电脑入门到精通网 www.58116.cn)

    现在我们打开了多个文档,假如我们现在要关闭这个“文档2.doc”,单击标题栏上的这个“关闭”按

    钮就可以了。 你可能要问,这个按钮不是退出Word时用的吗?是这样,在只打开了一个文档时是点这个

    按钮会退出Word,但在同时打开了几个文档时,它的作用就只是关闭当前编辑的文档了。现在我们只有

    一个打开的文档,在刚才的关闭按钮的下面,也就是菜单栏的最右端,又出现了一个关闭按钮。现在标题栏上

    的“关闭”按钮的作用是关闭当前编辑的文件并且退出Word,而菜单栏上的“关闭”按钮就只是关闭当前文档,

    而不退出Word了。 (电脑入门到精通网 www.58116.cn)

    在打开了几个文档的时候可以直接退出Word,打开“文件”菜单,选择“退出”命令,就可以直接退出Word了。选择这个命令后,出现了一个对话框,这是提示我们要关闭的文档没有存盘,要不要现在保存,

    (电脑入门到精通网 www.58116.cn)

    (电脑入门到精通网 www.58116.cn)

    这是Word的一项功能。如果在上次保存之后你又对文档做了改动,它就会提醒你进行保存;现在的这些文件都没有保存价值,所以我们选择“否”。不过你以后遇到这个对话框时可要想清楚,是不是要保存。 虽然忘了保存文件时,退出Word会提醒你存盘,但你也要养成经常保存文件的习惯。不然万一遇到停电之类的特殊情况,可是谁也帮不了你。

    (电脑入门到精通网 www.58116.cn)

    文档的保护 (电脑入门到精通网 www.58116.cn)

    (电脑入门到精通网 www.58116.cn)

    有时编辑的文档不希望别人进行修改,这时可以给文档设置一个口令,把文档保护起来:打开“工具”菜单,单击“选项”命令,打开“选项”对话框,单击“保存”选项卡,在“修改权限密码”文本框中输入一个密码(如图14),单击“确定”按钮,此时会出现一个“确认密码”对话框,再一次输入密码,单击“确定”按钮,密码就设置好了,关闭并保存文档,再打开它,就会出现一个“密码”对话框,要求我们输入一个密码,否则就只能以只读方式打开文档。

    (电脑入门到精通网 www.58116.cn)

    如果你不希望别人看到文档的内容,还可以设置一个“打开权限密码”,打开“选项”对话框,在“常规”选项卡的“打开权限密码”正文框中输入密码,单击“确定”按钮,弹出“确认密码”对话框,再次输入密码,单击“确定”按钮,同样保存退出,再打开文档时会弹出一个“密码”对话框,现在如果不输入密码就不能打开文档了。要是不想要密码了,打开“选项”对话框,在两个密码的正文框里把密码清除就可以了。 (电脑入门到精通网 www.58116.cn)

    (电脑入门到精通网 www.58116.cn)

    96e4ec3aed6ec090647ad6de965533e5.gif

    要是把密码忘了,你最好和微软的人联系,让他们帮你来解决这个问题。 (电脑入门到精通网 www.58116.cn)

    在Word中还可以对文档的一部分内容设置修改口令,防止别人修改,方法是打开“工具”菜单,单击“保护文档”命令,在“保护文档”对话框中选择要保护的内容,比如批注、修订等,输入密码,单击“确定”按钮,同样会出现一个“确认密码”对话框,确认一下密码就可以了。

    存为Web页面

    (电脑入门到精通网 www.58116.cn)

    (电脑入门到精通网 www.58116.cn)

    把一个文档保存成一个网页:打开“文件”菜单,单击“另存为Web页”命令,打开“另存为”对话框,选择保存的文件夹,输入文件名,单击“保存”按钮,就可以保存出一个Web页来。 (电脑入门到精通网 www.58116.cn)

    不过在保存时会丢失一部分格式的设置,因为在页面视图中的某些格式在浏览器中是无法实现的,单击“继续”按钮,Word自动转到了Web版式视图中,在这里设置的格式就可以在浏览器中完全显示了。 (电脑入门到精通网 www.58116.cn)

    打开“文件”菜单,单击“Web页预览”按钮,就可以直接用浏览器来查看所做网页的实际效果了。在Word 2000中可以直接从打开对话框中打开并编辑Web文件夹中的文档,也可以直接把文档保存到Web文件夹中。

    (电脑入门到精通网 www.58116.cn)

    在IE5中单击“编辑”按钮的下拉箭头,选择“使用Microsoft Word for windows进行编辑”,可以启动Word对网页进行编辑。

    (电脑入门到精通网 www.58116.cn)

    Web文件夹是Office 2000中增加的一个功能,它允许你将Office文档直接保存到Web服务器上,以方便文档的更新。

    (电脑入门到精通网 www.58116.cn)

    设置Web文件夹:打开“我的电脑”,双击“Web文件夹”图标,打开“Web文件夹”,双击“添加Web文件夹”图标,打开“添加Web文件夹”对话框,在“请键入要添加的位置”输入框中输入放置Web文件夹的URL,单击“下一步”按钮,输入这个Web文件夹的名称,单击“完成”按钮,一个Web文件夹就建立好了。

    (电脑入门到精通网 www.58116.cn)

    使用Web文件夹:在Word的打开和保存对话框的左边有一个Web文件夹按钮,单击这个按钮,双击文档要打开或保存的文件夹,选择文档打开或输入名称保存就可以了。

    (电脑入门到精通网 www.58116.cn)

    新手学习办公软件应用的朋友,推荐下载金山WPS办公软件,因为是免费的,功能和微软的收费办公软件一样的,而且文档互相兼容。 (电脑入门到精通网 www.58116.cn)

    (责任编辑:电脑入门到精通网 www.58116.cn)

    更多相关内容
  • 如何将一个word文档按页分割成多个word文档,很有参考价值
  • 在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下。总的来说,Java导出word大致有5种解决方案比较。 1.2 方案比较 1、Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件...

    1.1 概述

    在网上找了好多天将数据库中信息导出到word中的解决方案,现在将这几天的总结分享一下。总的来说,Java导出word大致有5种解决方案比较。

    1.2 方案比较

    1、JacobJava-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。通过Jacob实现了在Java平台上对微软OfficeCOM接口进行调用。

    优点:调用微软OfficeCOM接口,生成的word文件格式规范。

    缺点:服务器只能是windows平台,不支持unixlinux,且服务器上必须安装微软Office

    2、Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式文件,可以通过这些APIJava中读写ExcelWord等文件。

    优点:跨平台支持windowsunixlinux

    缺点:相对与对word文件的处理来说,POI更适合excel处理,对于word实现一些简单文件的操作凑合,不能设置样式且生成的word文件格式不够规范。

    3、Java2word是一个在Java程序中调用 MS Office Word文档的组件(类库)。该组件提供了一组简单的接口,以便Java程序调用他的服务操作Word文档。 这些服务包括: 打开文档、新建文档、查找文字、替换文字,插入文字、插入图片、插入表格,在书签处插入文字、插入图片、插入表格等。

    优点:足够简单,操作起来要比FreeMarker简单的多。

    缺点:没有FreeMarker强大,不能够根据模版生成Word文档,word的文档的样式等信息都不能够很好的操作。

    4、FreeMarker生成word文档的功能是由XML+FreeMarker来实现的。先把word文件另存为xml,在xml文件中插入特殊的字符串占位符,将xml翻译为FreeMarker模板,最后用Java来解析FreeMarker模板,编码调用FreeMarker实现文本替换并输出Doc

    优点:比Java2word功能强大,也是纯Java编程。

    缺点:生成的文件本质上是xml,不是真正的word文件格式,有很多常用的word格式无法处理或表现怪异,比如:超链、换行、乱码、部分生成的文件打不开等。

    5、PageOffice生成word文件。PageOffice封装了微软Office繁琐的vba接口,提供了简洁易用的Java编程对象,支持生成word文件,同时实现了在线编辑word文档和读取word文档内容。

    优点:跨平台支持windows、unixlinux,生成word文件格式标准,支持文本、图片、表格、字体、段落、颜色、超链、页眉等各种格式的操作,支持多word合并,无需处理并发,不耗费服务器资源,运行稳定。

    缺点:必须在客户端生成文件(可以不显示界面),不支持纯服务器端生成文件。

    1.3 Apache POI

    1.3.1 参考一

    1、poiword文档结构介绍之正文段落

    一个文档包含多个段落,一个段落包含多个Runs,一个Runs包含多个RunRun是文档的最小单元

    获取所有段落:List<XWPFParagraph> paragraphs = word.getParagraphs();

    获取一个段落中的所有RunsList<XWPFRun> xwpfRuns = xwpfParagraph.getRuns();

    获取一个Runs中的一个RunXWPFRun run = xwpfRuns.get(index);

    2、poi之word文档结构介绍之正文表格

    一个文档包含多个表格,一个表格包含多行,一行包含多列(格),每一格的内容相当于一个完整的文档

    获取所有表格:List<XWPFTable> xwpfTables = doc.getTables();

    获取一个表格中的所有行:List<XWPFTableRow> xwpfTableRows = xwpfTable.getRows();

    获取一行中的所有列:List<XWPFTableCell> xwpfTableCells = xwpfTableRow.getTableCells();

    获取一格里的内容:List<XWPFParagraph> paragraphs = xwpfTableCell.getParagraphs();

    之后和正文段落一样

    注:

    • 表格的一格相当于一个完整的docx文档,只是没有页眉和页脚。里面可以有表格,使用xwpfTableCell.getTables()获取等等,
    • poi文档中段落和表格是完全分开的,如果在两个段落中有一个表格,在poi中是没办法确定表格在段落中间的。只有文档的格式固定,才能正确的得到文档的结构。

    3、poi之word文档结构介绍之页眉:

    一个文档可以有多个页眉,页眉里面可以包含段落和表格

    获取文档的页眉:List<XWPFHeader> headerList = doc.getHeaderList();

    获取页眉里的所有段落:List<XWPFParagraph> paras = header.getParagraphs();

    获取页眉里的所有表格:List<XWPFTable> tables = header.getTables();

    4、poi之word文档结构介绍之页脚

    页脚和页眉基本类似,可以获取表示页数的角标

    1.3.2 参考二

    (1) POI操作Word简介
    POI读写Excel功能强大、操作简单。但是POI操作时,一般只用它读取word文档,POI只能能够创建简单的word文档,相对而言POI操作时的功能太少。

    (2) POI创建Word文档的简单示例

    XWPFDocument doc = new XWPFDocument();// 创建Word文件
    XWPFParagraph p = doc.createParagraph();// 新建一个段落
    p.setAlignment(ParagraphAlignment.CENTER);// 设置段落的对齐方式
    p.setBorderBottom(Borders.DOUBLE);//设置下边框
    p.setBorderTop(Borders.DOUBLE);//设置上边框
    p.setBorderRight(Borders.DOUBLE);//设置右边框
    p.setBorderLeft(Borders.DOUBLE);//设置左边框
    XWPFRun r = p.createRun();//创建段落文本
    r.setText("POI创建的Word段落文本");
    r.setBold(true);//设置为粗体
    r.setColor("FF0000");//设置颜色
    p = doc.createParagraph();// 新建一个段落
    r = p.createRun();
    r.setText("POI读写Excel功能强大、操作简单。");
    XWPFTable table= doc.createTable(3, 3);//创建一个表格
    table.getRow(0).getCell(0).setText("表格1");
    table.getRow(1).getCell(1).setText("表格2");
    table.getRow(2).getCell(2).setText("表格3");
    FileOutputStream out = newFileOutputStream("d:\\POI\\sample.doc");
    doc.write(out);
    out.close();
    

    在这里插入图片描述

    (3) POI读取Word文档里的文字

    FileInputStream stream = newFileInputStream("d:\\POI\\sample.doc");
    XWPFDocument doc = new XWPFDocument(stream);// 创建Word文件
    for(XWPFParagraph p : doc.getParagraphs())//遍历段落
    {
     System.out.print(p.getParagraphText());
    }
    for(XWPFTable table : doc.getTables())//遍历表格
    {
     for(XWPFTableRow row : table.getRows())
     {
     for(XWPFTableCell cell : row.getTableCells())
     {
     System.out.print(cell.getText());
     }
     }
    

    1.3.4 代码示例

    该代码示例只是一个demo,简单的生成了一个word文件,包括word文档常规的一些样式设置,包括设置文件字体、首行缩进、设置文字大小,段落的对齐方式,换行。还有常见的表格的创建,以及表格的合并效果等等。

    直接看效果图:

    在这里插入图片描述

    public void createFile(HttpServletRequest request, HttpServletResponse response) throws IOException {
            //创建文本对象
            XWPFDocument docxDocument = new XWPFDocument();
            //创建第一段落
            XWPFParagraph firstParagraphX = docxDocument.createParagraph();
            firstParagraphX.setAlignment(ParagraphAlignment.CENTER);
    
            XWPFRun runTitle = firstParagraphX.createRun();
            runTitle.setText("医院报告申请");
            runTitle.setBold(true);
            runTitle.setFontSize(24);
            runTitle.setFontFamily("宋体");
            runTitle.addCarriageReturn();//回车键
            runTitle.setKerning(30);
    
            XWPFParagraph paragraphX = docxDocument.createParagraph();
    
            paragraphX.setAlignment(ParagraphAlignment.LEFT);//对齐方式
            paragraphX.setFirstLineIndent(400);//首行缩进
            //创建段落中的run
            XWPFRun run = paragraphX.createRun();
            run.setText("开始新的额一页了健康卡离开了危,机容量为金融界王仁君我快速建房可谓集,有分页吗,按时交付问我问问");
            //run.addCarriageReturn();//回车键
    
            XWPFRun run2 = paragraphX.createRun();
            run2.setText("这是第二段了吧,接口了就废了我今儿来将危及,不知道嗯么回事了了,啦啦啦啦啦啦啦");
            run2.setText("这个不是能分段吗,测试一下试试");
            run2.setBold(true);//加粗
    
            //创建第二段落
            XWPFParagraph paragraphX2 = docxDocument.createParagraph();
            paragraphX2.setIndentationFirstLine(420);//首行缩进
            XWPFRun secondRun = paragraphX2.createRun();
            secondRun.setText("第二天的开始,就忙吧尽快立法捡垃圾而");
            secondRun.setColor("FFC0CB");
            secondRun.setUnderline(UnderlinePatterns.SINGLE);
            secondRun.addCarriageReturn();
    
            //创建表格 4行*5列(创建table 时,会有一个默认一行一列的表格)
           // XWPFTable table =  createTable( docxDocument,4,5);
            XWPFTable table = docxDocument.createTable(4,5);
            table.setWidth("95%");
            table.setWidthType(TableWidthType.PCT);//设置表格相对宽度
            table.setTableAlignment(TableRowAlign.CENTER);
    
            //合并单元格
            XWPFTableRow row1 = table.getRow(0);
            XWPFTableCell cell1 = row1.getCell(0);
            CTTcPr cellCtPr = getCellCTTcPr(cell1);
            cellCtPr.addNewHMerge().setVal(STMerge.RESTART);
    
            XWPFTableCell cell2 = row1.getCell(1);
            CTTcPr cellCtPr2 = getCellCTTcPr(cell2);
            cellCtPr2.addNewHMerge().setVal(STMerge.CONTINUE);
    
            //给表格填充文本
            setTableText(docxDocument);
    
    
            XWPFParagraph endParagraphX = docxDocument.createParagraph();
            endParagraphX.setAlignment(ParagraphAlignment.RIGHT);
    
            XWPFRun endRun = endParagraphX.createRun();
            endRun.setText("2021年11月18日");
    
            String path="F://home//docBoke.docx";
            File file = new File(path);
            FileOutputStream stream = new FileOutputStream(file);
            docxDocument.write(stream);
            stream.close();
            System.out.println("文件生成完成!");
        }
    
        private void setTableText(XWPFDocument docxDocument) {
            //获取第一个表格
            XWPFTable table = docxDocument.getTableArray(0);
            List<XWPFTableRow> rows = table.getRows();
            int i=1;
            for(XWPFTableRow row :rows){
                List<XWPFTableCell> cells = row.getTableCells();
                for(XWPFTableCell cell: cells){
                    cell.setText("第"+String.valueOf(i++)+"格");
                    cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
                    //cell.setWidthType(TableWidthType.PCT);
                    //cell.setWidth("30%");
                }
            }
    
        }
    
        public static CTTcPr getCellCTTcPr(XWPFTableCell cell) {
            CTTc cttc = cell.getCTTc();
            CTTcPr tcPr = cttc.isSetTcPr() ? cttc.getTcPr() : cttc.addNewTcPr();
            return tcPr;
        }
    

    1.4 FreeMarker

    FreeMarker是一个基于Java的模板引擎,最初专注于使用MVC软件架构生成动态网页。但是,它是一个通用的模板引擎,不依赖于servletsHTTPHTML,因此它通常还用于生成源代码,配置文件或电子邮件。
    此时,我们用它动态生成xml文件,进而导出word文档。

    1.4.1 流程图

    在这里插入图片描述

    1.4.2 代码示例

    以前项目常常要导出word文档,我大多时候还是用freemarker的模板来实现,现总结一下关键步骤,供大家参考。

    一、模板的制作

    先用Word做一个模板,如下图:
    在这里插入图片描述

    (注意,上面是有表格的,我设置了边框不可见)然后另存为XML文件,之后用工具打开这个xml文件,有人用firstobject XML Editor感觉还不如notepad++,我这里用notepad++,主要是有高亮显示,和元素自动配对,效果如下:
    在这里插入图片描述
    上面黑色的地方基本是我们之后要替换的地方,比如xytitle替换为${xytitle},对已表格要十分注意,比如选择题下面的表格,我们可以通过<w:tr>查找来定位,一对<w:tr></w:tr>代表一行,也就是一条记录(一道题),我们这里要用一对<#list></#list>来将其包括,以便后续填充数据,具体可参照Freemarker页面语法,例如这里选择题,我们是两行为一条记录,所以要<#list></#list>要包括两行,形如:<#list table1 as plan1><w:tr>题号 题目</w:tr><w:tr>选项</w:tr></#list>,然后在这其中找着对应的xzn,xztest,ans1,ans2,ans3,ans4替换为${plan1.xzn},${plan1.xztest},${plan1.ans1},${plan1.ans2},${plan1.ans3},${plan1.ans4},注意这里的table1plan1命名,table1后续填充数据要用到,其他的替换同理操作,得到效果如下:
    在这里插入图片描述
    保存后,修改后缀名为ftl,至此模板制作完毕。

    二、编程实现

    这里用到了freemarker-2.3.13.jar包,代码如下:

    package common;
     
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    import java.io.Writer;
    import java.util.Map;
     
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
     
    public class DocumentHandler {
     
    	private Configuration configuration = null;
     
    	public DocumentHandler() {
    		configuration = new Configuration();
    		configuration.setDefaultEncoding("utf-8");
    	}
     
    	public void createDoc(Map<String,Object> dataMap,String fileName) throws UnsupportedEncodingException {
    		//dataMap 要填入模本的数据文件
    		//设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,
    		//这里我们的模板是放在template包下面
    		configuration.setClassForTemplateLoading(this.getClass(), "/template");
    		Template t=null;
    		try {
    			//test.ftl为要装载的模板
    			t = configuration.getTemplate("fctestpaper.ftl");
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		//输出文档路径及名称
    		File outFile = new File(fileName);
    		Writer out = null;
    		FileOutputStream fos=null;
    		try {
    			fos = new FileOutputStream(outFile);
    			OutputStreamWriter oWriter = new OutputStreamWriter(fos,"UTF-8");
    			//这个地方对流的编码不可或缺,使用main()单独调用时,应该可以,但是如果是web请求导出时导出后word文档就会打不开,并且包XML文件错误。主要是编码格式不正确,无法解析。
    			//out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
    			 out = new BufferedWriter(oWriter); 
    		} catch (FileNotFoundException e1) {
    			e1.printStackTrace();
    		}
    		 
            try {
    			t.process(dataMap, out);
    			out.close();
    			fos.close();
    		} catch (TemplateException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
            
            //System.out.println("---------------------------");
    	}
    }
    

    然后是准备数据调用就行,代码如下:

    package com.havenliu.document;
     
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
     
    public class Main {
     
    	/**
    	 * @param args
    	 * @throws UnsupportedEncodingException 
    	 */
    	public static void main(String[] args) throws UnsupportedEncodingException {;
     
    		Map<String, Object> dataMap = new HashMap<String, Object>();
    		dataMap.put("xytitle", "试卷");
    		int index = 1;
    		// 选择题
    		List<Map<String, Object>> list1 = new ArrayList<Map<String, Object>>();//题目
    		List<Map<String, Object>> list11 = new ArrayList<Map<String, Object>>();//答案
    		index = 1;
    		for (int i = 0; i < 5; i++) {
     
    			Map<String, Object> map = new HashMap<String, Object>();
    			map.put("xzn", index + ".");
    			map.put("xztest",
    					"(   )操作系统允许在一台主机上同时连接多台终端,多个用户可以通过各自的终端同时交互地使用计算机。");
    			map.put("ans1", "A" + index);
    			map.put("ans2", "B" + index);
    			map.put("ans3", "C" + index);
    			map.put("ans4", "D" + index);
    			list1.add(map);
     
    			Map<String, Object> map1 = new HashMap<String, Object>();
    			map1.put("fuck", index + ".");
    			map1.put("abc", "A" + index);
    			list11.add(map1);
     
    			index++;
    		}
    		dataMap.put("table1", list1);
    		dataMap.put("table11", list11);
     
    		// 填空题
    		List<Map<String, Object>> list2 = new ArrayList<Map<String, Object>>();
    		List<Map<String, Object>> list12 = new ArrayList<Map<String, Object>>();
    		index = 1;
    		for (int i = 0; i < 5; i++) {
     
    			Map<String, Object> map = new HashMap<String, Object>();
    			map.put("tkn", index + ".");
    			map.put("tktest",
    					"操作系统是计算机系统中的一个___系统软件_______,它管理和控制计算机系统中的___资源_________.");
    			list2.add(map);
     
    			Map<String, Object> map1 = new HashMap<String, Object>();
    			map1.put("fill", index + ".");
    			map1.put("def", "中级调度" + index);
    			list12.add(map1);
     
    			index++;
    		}
    		dataMap.put("table2", list2);
    		dataMap.put("table12", list12);
     
    		// 判断题
    		List<Map<String, Object>> list3 = new ArrayList<Map<String, Object>>();
    		List<Map<String, Object>> list13 = new ArrayList<Map<String, Object>>();
    		index = 1;
    		for (int i = 0; i < 5; i++) {
     
    			Map<String, Object> map = new HashMap<String, Object>();
    			map.put("pdn", index + ".");
    			map.put("pdtest",
    					"复合型防火墙防火墙是内部网与外部网的隔离点,起着监视和隔绝应用层通信流的作用,同时也常结合过滤器的功能。");
    			list3.add(map);
     
    			Map<String, Object> map1 = new HashMap<String, Object>();
    			map1.put("judge", index + ".");
    			map1.put("hij", "对" + index);
    			list13.add(map1);
     
    			index++;
    		}
    		dataMap.put("table3", list3);
    		dataMap.put("table13", list13);
     
    		// 简答题
    		List<Map<String, Object>> list4 = new ArrayList<Map<String, Object>>();
    		List<Map<String, Object>> list14 = new ArrayList<Map<String, Object>>();
    		index = 1;
    		for (int i = 0; i < 5; i++) {
     
    			Map<String, Object> map = new HashMap<String, Object>();
    			map.put("jdn", index + ".");
    			map.put("jdtest", "说明作业调度,中级调度和进程调度的区别,并分析下述问题应由哪一级调度程序负责。");
    			list4.add(map);
     
    			Map<String, Object> map1 = new HashMap<String, Object>();
    			map1.put("answer", index + ".");
    			map1.put("xyz", "说明作业调度,中级调度和进程调度的区别,并分析下述问题应由哪一级调度程序负责。");
    			list14.add(map1);
     
    			index++;
    		}
    		dataMap.put("table4", list4);
    		dataMap.put("table14", list14);
     
    		MDoc mdoc = new MDoc();
    		mdoc.createDoc(dataMap, "E:/outFile.doc");
    	}
     
    }
    

    注意上面map中的key必须和模板中的对应,否则会报错。效果如下:

    在这里插入图片描述

    展开全文
  • 我们在使用电脑办公的时候,常常都使用到Word文档来进行一定的信息编辑会文章的编辑等,一般情况下,只需要在所使用的电脑中下载安装一个Office办公软件就可以达到这一目的。但是就在前短时间,就有用户向小编咨询,...

    我们在使用电脑办公的时候,常常都使用到Word文档来进行一定的信息编辑会文章的编辑等,一般情况下,只需要在所使用的电脑中下载安装一个Office办公软件就可以达到这一目的。但是就在前短时间,就有用户向小编咨询,当他使用鼠标右键点击Win10系统电脑桌面空白处的时候,发现在“新建”中没有Word文档,但是经过查看,也确实安装了Office办公软件。这到底是怎么一回事呢?下面小编就将上述找不到Word文档的解决方法告诉大家,希望大家在遇到这种问题的时候可以快速的将问题解决。

    095f158eb899527c71f3cc72d49e3f7f.png

    添加方法:

    方法一

    1、使用键盘的快捷键“Win+R”将“运行”对话窗口唤出;

    2、然后在“运行”的对话窗口中的输入栏中输入“Regedit”指令并点击回车键,随后就可以进入到“注册表编辑器”的界面当中;

    3、然后在“注册表编辑器”界面的左侧找到“HKEY_CLASSES_ROOT”文件夹,随后在“HKEY_CLASSES_ROOT”文件夹中找到word相对应的后缀名.docx和.doc。比如:excle的后缀为.xlsx和.xls,ppt的后缀为.pptx和.ppt;

    4、找到后鼠标右键点击右侧空白处,在展开的选项栏中点击“新建”,然后再点击“项”,将新建“项”的名字设置为“Word.Sheet.12”;

    5、随后点击新建的“项”,在这个名为“Word.Sheet.12”的“项”中再次建立一个全新的“项”,而这个全新的“项”命名为“ShellNew”,接着在这个ShellNew项中新建一个值,并将这个新建的值命名为FileName,数值数据无需填写;

    6、新建结束后退出“注册表编辑器”的窗口界面,再使用鼠标右键点击电脑桌面,查看是否可以新建一个word文档。若可以进行word文档的新建,则问题解决,若还是不能就只有重新安装。

    方法二

    1、若通过方法一的进行操作之后还是不能新建word文档,那就有可能是你所安装的Office办公软件不是正版或者不是完整版才会导致这种情况,我们可以通过点击下列的图标进行正版的Office办公软件进行下载使用;

    8c3282d8b96fa8c3690688d406691696.png大小:68.68 MB版本:10.1.0.7468 个人正式版环境:WinXP, Win7, Win8, Win10, WinAll

    2、当下载安装之后就可以鼠标右键点击桌面的空白处,然后点击“新建”,在“新建”的选项中就可以看到word文档,随即就可以新建使用了。

    上述就是在Win10系统中无法新建word文档的解决方法,在进行Office办公软件下载安装的时候千万要注意,必须安装正版的Office办公软件,否则就有可能出现上述的故障一样,严重时有可能会导致文件的丢失。想获取更多的电脑操作方法及软件的使用方法,敬请关注河东软件园,我们将我们将竭尽为你解答。

    展开全文
  • Java导出Word文档的实现

    万次阅读 多人点赞 2020-10-18 16:17:13
    在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表、医院的患者统计报表、电商平台的销售报表等等。 导出Word方式多种多样,通常有以下几种方式: 1. 使用第三方Java工具类库Hutool...

     

    前言

    在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表、医院的患者统计报表、电商平台的销售报表等等。

    导出Word方式多种多样,通常有以下几种方式:

        1. 使用第三方Java工具类库Hutool的Word工具类,参考网址为https://www.hutool.cn/docs/#/poi/Word生成-Word07Writer;

        2. 利用Apache POI和FreeMarker模板引擎;

        3. 第三方报表工具。

    上面的几种方式虽然可以实现Word文档的导出,但有以下缺点

        第一种方式操作简单,但也只能生成简单的Word文档,无法生成有表格的Word文档;

        第二种方式可以生成复杂的Word文档,但是还要进行Word转xml,xml转ftl的双重转换,不适合内容经常变更的Word文档;

        第三种方式有时候不适合对格式要求严格的文档。

    那么,有没有既简单又高效的导出Word的方法呢?答案是肯定有的。接下来我就来介绍一种用Java语言实现的,通过XDocReportFreeMarker模板引擎生成Word文档的方法。

    准备环境

    开发语言:

    Java7及以上的版本。

    开发工具:

    Eclipse/Idea。

    第三方依赖库:

    XDocReport、POI、Freemarker。

    模板语言:

    FreeMarker。

    Word编辑器:

    Microsoft 365或其他版本较高的Word编辑器。

    示例Word模板

                         

    制作模板

    Word模板如上图,可以看到,结构比较简单,包括两个部分,第一部分是纯文字和数字,第二部分主要是表格。我们在实际的开发过程中生成的报表几乎都是动态生成的,所以模板中的数字和表格里的数据都要替换成我们后台的实际数据。

    替换Word模板中的动态变量,我们需要掌握两个知识点:

        1.Word文档中的Word域,word域是引导Word在文档中自动插入文字、图形、页码或其他信息的一组代码。在这里我们可以把         Word域理解成标识符,这个标识符表示Word文档中要被替换的内容;

        2.FreeMarker模板下的变量表达式,比如用${city}替换Word示例模板中的北京市。

    了解了以上两个概念后,我们就可以动手编辑Word模板了,步骤如下:

    1. 首先在Word模板中选中要替换的文本,在这儿拿标题中的"北京市"为例,然后键盘使用 Ctrl + F9 组合键将其设置为域,此时文本会被"{}"包围,接着鼠标右键选择【编辑域(E)...】:

    2. 在弹出的对话框中,类别选择“邮件合并”,域名选择 "MergeField",域属性中的域名填入模版表达式${city},点击【确定】按钮:

    3. 编辑后的效果如下:

    4. 掌握替换文本的方法后,我们可以把Word模板第一部分需要替换的内容都替换成模板变量:

    Word模板中表格数据的处理

    表格中的数据实质上就是对集合的遍历。

    表格数据的处理其实和上面对文本内容的处理是类似的,只不过要在Word模板中加上集合的变量,Java代码中也要有对集合进行特对的处理(这个在后面的代码展示部分会说)。

    具体操作步骤如下:

    1. 选定表格中要替换的文本,然后键盘使用 Ctrl + F9 组合键将其设置为域,接着鼠标右键选择【编辑域(E)...】:

    2. 在弹出的对话框中,类别选择“邮件合并”,域名选择 "MergeField",域属性中的域名填入模版表达式${goods.num},点击【确定】按钮;

    3. 重复步骤2,替换表格中的其他文本内容:

    后台代码

    添加依赖到pom.xml文件

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.jxls</groupId>
        <artifactId>jxls</artifactId>
        <version>2.6.0</version>
        <exclusions>
            <exclusion>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.jxls</groupId>
        <artifactId>jxls-poi</artifactId>
        <version>1.2.0</version>
    </dependency>
    <dependency>
        <groupId>fr.opensagres.xdocreport</groupId>
        <artifactId>fr.opensagres.xdocreport.core</artifactId>
        <version>2.0.2</version>
    </dependency>
    <dependency>
        <groupId>fr.opensagres.xdocreport</groupId>
        <artifactId>fr.opensagres.xdocreport.document</artifactId>
        <version>2.0.2</version>
    </dependency>
    <dependency>
        <groupId>fr.opensagres.xdocreport</groupId>
        <artifactId>fr.opensagres.xdocreport.template</artifactId>
        <version>2.0.2</version>
    </dependency>
    <dependency>
        <groupId>fr.opensagres.xdocreport</groupId>
        <artifactId>fr.opensagres.xdocreport.document.docx</artifactId>
        <version>2.0.2</version>
    </dependency>
    <dependency>
        <groupId>fr.opensagres.xdocreport</groupId>
        <artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>
        <version>2.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.23</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.5</version>
    </dependency>

    编写Java代码

    package com.tzsj.test;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    import org.junit.Test;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import fr.opensagres.xdocreport.core.XDocReportException;
    import fr.opensagres.xdocreport.document.IXDocReport;
    import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
    import fr.opensagres.xdocreport.template.IContext;
    import fr.opensagres.xdocreport.template.TemplateEngineKind;
    import fr.opensagres.xdocreport.template.formatter.FieldsMetadata;
    import io.renren.entity.Goods;
    
    @Controller
    @RequestMapping("/word")
    public class WordTest {
    	@Test
    	public void test() throws IOException, XDocReportException {
    		generateWord();
    	}
    	
    	public void generateWord() throws IOException, XDocReportException {
    		//获取Word模板,模板存放路径在项目的resources目录下
    	    InputStream ins = this.getClass().getResourceAsStream("/模板.docx");
            //注册xdocreport实例并加载FreeMarker模板引擎
            IXDocReport report = XDocReportRegistry.getRegistry().loadReport(ins,     
                                   TemplateEngineKind.Freemarker);
            //创建xdocreport上下文对象
            IContext context = report.createContext();
            
            //创建要替换的文本变量
            context.put("city", "北京市");
            context.put("startDate", "2020-09-17");
            context.put("endDate", "2020-10-16");
            context.put("totCnt", 3638763);
            context.put("totAmt", "6521");
            context.put("onCnt", 2874036);
            context.put("onAmt", "4768");
            context.put("offCnt", 764727);
            context.put("offAmt", "1753");
            context.put("typeCnt", 36);
            
            List<Goods> goodsList = new ArrayList<Goods>();
            Goods goods1 = new Goods();
            goods1.setNum(1);
            goods1.setType("臭美毁肤");
            goods1.setSv(675512);
            goods1.setSa("589");
            Goods goods2 = new Goods();
            goods2.setNum(2);
            goods2.setType("女装");
            goods2.setSv(602145);
            goods2.setSa("651");
            Goods goods3 = new Goods();
            goods3.setNum(3);
            goods3.setType("手机");
            goods3.setSv(587737);
            goods3.setSa("866");
            Goods goods4 = new Goods();
            goods4.setNum(4);
            goods4.setType("家具家装");
            goods4.setSv(551193);
            goods4.setSa("783");
            Goods goods5 = new Goods();
            goods5.setNum(5);
            goods5.setType("食物饮品");
            goods5.setSv(528604);
            goods5.setSa("405");
            goodsList.add(goods1);
            goodsList.add(goods2);
            goodsList.add(goods3);
            goodsList.add(goods4);
            goodsList.add(goods5);
            context.put("goods", goodsList);
            
            //创建字段元数据
            FieldsMetadata fm = report.createFieldsMetadata();
            //Word模板中的表格数据对应的集合类型
            fm.load("goods", Goods.class, true);
           
            //输出到本地目录
            FileOutputStream out = new FileOutputStream(new File("D://商品销售报表.docx"));
            report.process(context, out);
    	}
    
    }
    

    Word模板中生成序号

    给表格数据添加序号是通过后台代码生成的,比如上面的"goods1.setNum(1)"这段代码,其实也可以在Word模板中设置对应的域变量来实现序号的填充。

    语法如下:

    @before-row[#list sequence as item]
        item?index
    @after-row[/#list]

    在表格中添加上面的表达式,XDocReport就会自动解析并生成序号,表格中的其他字段也需要进行相应的改动:

    提示:

    1. 序号的表达式要拆成三个域,如下图,要把这三部分分别设置成域;

         设置完成的结果参考上面表格中的序号表达式,表达式中"item?index+1"是因为序号是从0开始的,所以要加1

    2. 表格中除序号的列需要改成item.xxx而不是之前的goods.xxx:

    3. 生成效果如下:

    建议:序号最好在后台生成,用序号表达式生成的序号列会占用比较大的空间,对资源有所浪费。

    补充

    1. JavaWeb项目中通常是通过浏览器下载的方式来下载Word文档,此时只需要把之前下载到本地的代码改成浏览器端下载的代码即可:

    //输出到本地目录
    //FileOutputStream out = new FileOutputStream(new File("D://商品销售报表.docx"));
    //report.process(context, out);
    
    //浏览器端下载
    response.setCharacterEncoding("utf-8");  
    response.setContentType("application/msword");  
    String fileName = "商品销售报表.docx";  
    response.setHeader("Content-Disposition", "attachment;filename="  
    				    .concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));  
    report.process(context, response.getOutputStream());

    2. Word模板中的表格的长度最好充满Word文档的左右两边,否则如果表格下面还有其他文本内容,下面的文本内容会自动填充到表格的缝隙处,而且会对下面的文本内容进行覆盖。

    加餐

    其实,导出Word模板,上面的模板和代码已经够用了,但也有少数模板需要添加图片和图形(比如饼状图)。

    制作图片

    图片的生成不使用编辑域,使用模板图片和Word的书签功能,而且需要在元数据中加入图片类型的代码,以下为具体步骤:

    1. 在Word模版中需要插入图片的位置插入一张模版图片,然后鼠标单击模板图片插入一个书签,设置书签名称,比如img1, 最后点击【添加】按钮:

     2. 如果需要插入多个图片,就在需要插入图片的位置插入多个模板图片并插入书签设置对应的书签名称即可,后台代码如下: 

    package com.tzsj.test;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import org.junit.Test;
    import fr.opensagres.xdocreport.core.XDocReportException;
    import fr.opensagres.xdocreport.document.IXDocReport;
    import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
    import fr.opensagres.xdocreport.template.IContext;
    import fr.opensagres.xdocreport.template.TemplateEngineKind;
    import fr.opensagres.xdocreport.template.formatter.FieldsMetadata;
    
    public class ImgTest {
    
    	@Test
    	public void test() throws IOException, XDocReportException {
    		generateWordForImg();
    	}
    	
    	
    	public void generateWordForImg() throws IOException, XDocReportException {
    		//获取Word模板,模板存放路径在项目的resources目录下
    	    InputStream ins = this.getClass().getResourceAsStream("/图片.docx");
            //注册xdocreport实例并加载FreeMarker模板引擎
            IXDocReport report = XDocReportRegistry.getRegistry().loadReport(ins, 
                                   TemplateEngineKind.Freemarker);
            //创建xdocreport上下文对象
            IContext context = report.createContext();
            
            FieldsMetadata fm = report.createFieldsMetadata();
            //元数据中加入图片
            fm.addFieldAsImage("img1");
            fm.addFieldAsImage("img2");
            
            //获取图片
            InputStream img1 = this.getClass().getResourceAsStream("/11.jpg");
            InputStream img2 = this.getClass().getResourceAsStream("/33.jpg");
            
            //把图片添加到上下文对象
            context.put("img1", img1);
            context.put("img2", img2);
            
            //输出到本地目录
            FileOutputStream out = new FileOutputStream(new File("D://图片报表.docx"));
            report.process(context, out);
    	}
    
    }
    

     3. 导出效果如下:

    制作图形

    要在Word文档中生成柱状图、饼状图等图形,需要在项目中引入第三方绘图工具,在这里使用xchart来演示在Word中生成饼状图图形。

    生成饼状图和生成图片的方法很类似,具体步骤如下:

    1. 在Word模版中需要插入图片的位置插入一张模版图片,然后鼠标单击模板图片插入一个书签,设置书签名称,比如chart,最后点击【添加】按钮:

    2. 编写代码:

    2.1 在pom.xml文件中添加xchart的依赖:

    <dependency>
    	<groupId>org.knowm.xchart</groupId>
    	<artifactId>xchart</artifactId>
    	<version>3.5.4</version>
    </dependency>

    2.2 后台代码:

    package com.tzsj.test;
    
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import org.junit.Test;
    import org.knowm.xchart.BitmapEncoder;
    import org.knowm.xchart.PieChart;
    import org.knowm.xchart.PieChartBuilder;
    import fr.opensagres.xdocreport.core.XDocReportException;
    import fr.opensagres.xdocreport.document.IXDocReport;
    import fr.opensagres.xdocreport.document.images.ByteArrayImageProvider;
    import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
    import fr.opensagres.xdocreport.template.IContext;
    import fr.opensagres.xdocreport.template.TemplateEngineKind;
    import fr.opensagres.xdocreport.template.formatter.FieldsMetadata;
    
    public class ChartTest {
    
    	@Test
    	public void test() throws IOException, XDocReportException {
    		generateWordForChart();
    	}
    	
    	
    	public void generateWordForChart() throws IOException, XDocReportException {
    		//获取Word模板,模板存放路径在项目的resources目录下
    	    InputStream ins = this.getClass().getResourceAsStream("/饼图.docx");
            //注册xdocreport实例并加载FreeMarker模板引擎
            IXDocReport report = XDocReportRegistry.getRegistry().loadReport(ins,                 
                                     TemplateEngineKind.Freemarker);
            
            //创建xdocreport上下文对象
            IContext context = report.createContext();
            
            FieldsMetadata fm = report.createFieldsMetadata();
            //元数据中加入图片
            fm.addFieldAsImage("chart");
            
            PieChart chart = new PieChartBuilder().width(800).height(620)
                                    .title("销售饼图").build();
            
            //给饼图设置对应的值
            chart.addSeries("臭美毁肤", 589);
            chart.addSeries("女装", 651);
            chart.addSeries("手机", 866);
            chart.addSeries("家居家装", 783);
            chart.addSeries("食物饮品", 405);
            
            //生成饼图
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            BitmapEncoder.saveBitmap(chart, baos, BitmapEncoder.BitmapFormat.JPG);
            
            //把饼图添加到上下文对象
            context.put("chart", new ByteArrayImageProvider(baos.toByteArray()));
            
            //输出到本地目录
            FileOutputStream out = new FileOutputStream(new File("D://饼图报表.docx"));
            report.process(context, out);
    	}
    
    
    }
    

    3. 导出效果如下:

    总结

    这就是用Java语言实现,结合XDocReportFreeMarker模板引擎生成Word文档的方法。希望能给致力于开发的小伙伴带来一丝丝帮助。

    如果您在浏览过程中遇到什么问题,请在下方评论区给我留言。

    本人入驻的其他平台:

    • 微信公众号弹指时间 。
    • 网易音乐人弹指时间

    展开全文
  • java poi 通过模板生成word文档

    热门讨论 2014-07-22 17:10:34
    java使用poi,根据模板,生成word文档.
  • 完美解决方案:Java生成复杂Word文档

    热门讨论 2011-07-18 19:31:06
    客户要求用程序生成标准的word文档,要能打印,而且不能变形,以前用过很多解决方案,都在客户严格要求下牺牲的无比惨烈。  POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个20多页,...
  • 批量对word文档进行操作

    千次阅读 2022-02-11 15:42:46
    前面几章我们以经介绍了怎么批量对excel和ppt操作今天我们说说对word文档的批量操作 应用 python-docx允许您创建新文档以及对现有文档进行更改。实际上,它只允许您对现有文档进行更改;只是如果您从一个没有任何...
  • 完整项目,直接可以导入到myeclipse中运行,代码有详细注释,在readme.txt文件里面有注意事项。
  • POI读取word文档的文字内容和图片内容

    千次下载 热门讨论 2014-09-04 13:55:55
    POI读取word文档的文字内容和图片内容
  • 用Python读写Word文档入门

    千次阅读 2021-11-06 00:22:31
    最近有同事需要批量出500个Word文档,按照1个Word文档耗时1分钟来算也需要8.33小时足足有1天工时。于是,这位同事找到了才哥帮忙,才哥接过需求花了不到30分钟写好脚本,运行脚本不...
  • java生成word的实例 java导出Word文档的实例 项目说明
  • vue 导出word文档(包括图片)

    千次阅读 热门讨论 2022-04-24 13:39:28
    vue 导出word文档(包括图片)
  • 利用VBA代码将一个word文档按页分割成多个word文档
  • C#操作word文档 C#实现Word中表格信息读取
  • FreeMarker生成word文档

    千次阅读 2021-07-01 19:31:29
    这里写目录标题利用FreeMarker生成word文档简介创建模版文件处理普通文本处理表格处理勾选框创建Java项目相关依赖工具类 利用FreeMarker生成word文档 简介 最近项目中有需要生成word文档给前端下载的需求,这里使用 ...
  • 这时,若原文件所在的磁盘已满,没有空间用于存放该临时文件,就有可能导致打开Word文档没有响应。解决方法:这种情况只需将该文档所在磁盘分区的文件移动一部分到其他分区,释放一部分磁盘空间即可。原因二:Word...
  • 一招教你将网页内容转化为word文档保存相信很多小伙伴在日常办公中都会遇到要将网页内容转化为word文档保存的情况,那么具体该如何操作呢?方法很简单,下面小编就来为大家介绍。具体如下:1. 首先,在电脑上的...
  • word文档中排序在工具栏的“开始”选项中。查找及使用步骤:1、打开一个需要排序的Word文档。2、在页面上方的工具栏中找到下图做红色标注的排序图标。3、点击排序图标后,进入排序文字的界面,可以根据需要选择排序...
  • 在左侧找到HKEY_CLASSES_root目录,并展开。首先,我们利用CTRL + F...我们可以看到右侧有一个(默认),此时的默认值为Word_auto_file,如果不是该值也不要紧。双击(默认)一项,将其改为Word.Document.12。关闭注册...
  • 在线文档转word文档

    千次阅读 2021-08-11 10:45:01
    在线文档转word文档 1 概述 互联网的高速发展和对协同办公的高诉求,对传统的word文档发起了极大的挑战,工作中使用word结合石墨、语雀、seatable类的在线文档表格进行数据的编辑和存储,但是针对固定场景下需要离线...
  • word文档保存后找不到了如何解决

    千次阅读 2021-07-28 03:40:04
    word文档保存后找不到了如何解决腾讯视频/爱奇艺/优酷/外卖 充值4折起相信很多小伙伴都在使用Word软件来编辑文档,在使用的过程中,总会遇到这样那样的问题,今天就跟大家介绍一下word文档保存后找不到了的具体解决...
  • word文档打开速度慢的几个原因和解决方法发布时间:2012-11-20 16:51:07 作者:佚名 我要评论如果你遇到打开Word文档需要花耗几分钟以上的情况,或者打Word之外的其他的Office文档时,显然你的电脑中Offie组件和系统...
  • word文档怎么插入下一页

    千次阅读 2020-12-20 20:44:33
    1.word编辑的时候下一页 怎么弄啊word文档增加新页主要有以下几个途径:1、自动添加新页。当文档内容超出一页高度时,会自动添加新页,超出一页的内容将自动移到下一页。2、手动添加新页,主要有使用快捷键和菜单...
  • 准备工具:电脑,WPS软件1....4.在桌面功能页面中找到输入框,在输入框中重命名自己的文档(避免和已有文档重复)。5.重命名完毕后,在右侧找到保存选项,单击改选项即可将word文档保存文件到桌面...
  • Java项目中利用Freemarker模板引擎导出--生成Word文档

    千次阅读 多人点赞 2020-06-24 18:45:41
    应邀写的一篇文章:Java项目中利用Freemarker模板引擎导出--生成Word文档 在项目中难免和各种数据报表打交道,如导出XX申请表,登记表,推荐表之类。就可以通过现有信息导出Word文档。基于Java语言来导出Word文档的...
  • 二、word表格的高是随着表格中内容而自动增加的,所以如果表格中的内容太多,表格也会自动分页,遇到这种情况,可以调整一下单元格内文字的行间距、字号,看看是不是可以让表格缩回来。四、如果上面的方法您都尝试了...
  • 概要:「我的ABC软件工具箱」提供了文档合并的功能,其中就包括了 Word 拆分成单个文件。我们可以根据需要将文件夹中的多个 Word 文档按照一定的顺序进行合并,这样可以把多个 Word 文档整合形成一个完整的文档。...
  • 电脑Word文档中两个表格如何合并

    千次阅读 2021-07-28 05:07:22
    电脑Word文档中两个表格如何合并腾讯视频/爱奇艺/优酷/外卖 充值4折起Word文档是我们经常在工作和学习中使用的软件,我们有的时候也会在Word文档中绘制表格。接下来小编就教大家怎么在Word文档中将两个表格拼接。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 520,351
精华内容 208,140
关键字:

word文档

友情链接: Group3.zip