精华内容
下载资源
问答
  • 参考自:http://elim.iteye.com/blog/2049110,做了改进,原版里面有些地方没说清,并且有不足。 ... 在Word中要设置好要替换的特殊字符串以 ${标识} 为格式写入,特别注意:在Word中设置${标识}的时候,必须是先...

    参考自:http://elim.iteye.com/blog/2049110,做了改进,原版里面有些地方没说清,并且有不足。

    测试用的POI版本是3.1.7,下载地址:https://download.csdn.net/download/xingzhiyun/10805874

    在Word中要设置好要替换的特殊字符串以 ${标识} 为格式写入,特别注意:在Word中设置${标识}的时候,必须是先在记事本中写好,一次粘贴进来的,${标识}不能做任何修改,如果修改了,替换函数会把${标识}识别成多个run,从而无法正确显示

     

    InputStream inp = new FileInputStream("E:\\00_temp\\123.docx");  
    XWPFDocument docx = new XWPFDocument(inp);  
    inp.close();

    HashMap<String, String> bookmark = new HashMap<String, String>();

    bookmark.put("abc1", "★凌霄宝殿★");

    bookmark.put("书签1", "★你好邢志云★");

    bookmark.put("书签2", "★这是★");  

    bookmark.put("书签3", "★美丽新世界★");  

    bookmark.put("替换文字1", "★猫猫★");

    bookmark.put("不存在的书签", "★呵呵★");//不存在的会被忽略

    bookmark.put("替换文字3", "★111你好这是美丽新世界,替换其中的内容,再写入目标文档中★");

    Word.replaceSS(docx, bookmark,false);

    OutputStream outStream = new FileOutputStream("E:\\abc.docx");  
    docx.write(outStream);  
    outStream.flush();
    outStream.close();
    docx.close();

    效果:

     

    • 列出word中所有的标签(不替换标签)

    顺序是先段落中的标签,然后是表格中的标签。

    ArrayList<String> al=Word.replaceSS(docx, null,false);

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

    System.out.println(al.get(i));

    • 检查标签是否设置正确

    方法是把标签直接替换掉标签的位置,用眼睛直观能看出哪些地方设置了标签

    Word.replaceSS(docx, null,true);

    word中有标签的位置,会显示为

    这样可以方便检查标签是否设置正确。

    上面调用的类代码Word.java:

    import java.util.*;
    import java.util.regex.*;
    import org.apache.poi.xwpf.usermodel.*;

    public class Word
    {
        //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
        /**
    替换Word中指定的字符串“${标签1}”,在Word中需要替换的地方写入这样的字符串,用下面代码实现标签替换(<a style='color:red;'>注:Word中的标签可以重复,都会被替换</a>)<br/>
    例子❶:替换标签内容<br/>
        HashMap&lt;String, String> bookmark = new HashHashMap&lt;String, String>();<br/>
        bookmark.put("标签1", "你好邢志云");<br/>
        bookmark.put("标签2", "这是");<br/> 
        Word.replaceSS(docx, bookmark,false);<br/>
    例子❷:列出word中所有的标签(不替换标签),顺序是先段落中的标签,然后是表格中的标签。<br/>
        ArrayList&lt;String> al=Word.replaceSS(docx, null,false);<br/>
        for(int i=0;i&lt;al.size();i++)<br/>
            System.out.println(al.get(i));<br/>
    例子❸:检查Word中标签是否设置正确(方法是把标签直接替换掉标签的位置,用眼睛直观能看出哪些地方设置了标签)<br/>
        Word.replaceSS(docx, null,true);
        
         * @param docx
         * @param bookmark null时表示不替换标签。
         * @param ShowKey 默认为false,true的时候标签的地方会显示为    ▶ 标签名◀    ,能方便的看出标签是否设置正确。
         * @return 返回值是个ArrayList,存储了所有在文档中出现的标签名称,${标签1}→标签1,顺序是先段落中的标签,然后是表格中的标签。
         */
        public static ArrayList<String> replaceSS(XWPFDocument docx, HashMap<String, String> bookmark,boolean ShowKey)
        {
            ArrayList<String> returnlist= new ArrayList<String>();
            ArrayList<String> rl;
            //替换段落里面的变量
            rl=replaceInParas(docx, bookmark,ShowKey);
            for(int i=0;i<rl.size();i++)
                returnlist.add(rl.get(i));
            //替换表格里面的变量 
            rl=replaceInTable(docx, bookmark,ShowKey);
            for(int i=0;i<rl.size();i++)
                returnlist.add(rl.get(i));
            return returnlist;
        }
        /** 
        * 替换段落里面的变量 
        * @param doc 要替换的文档 
        * @param bookmark 参数 
        */  
        public static ArrayList<String> replaceInParas(XWPFDocument doc, HashMap<String, String> bookmark,boolean ShowKey) 
        {  
            ArrayList<String> returnlist= new ArrayList<String>();
            Iterator<XWPFParagraph> iterator = doc.getParagraphsIterator();  
            XWPFParagraph para;  
            while (iterator.hasNext()) {  
                para = iterator.next();  
                ArrayList<String> rl=replaceInPara(para, bookmark,ShowKey);
                for(int i=0;i<rl.size();i++)
                    returnlist.add(rl.get(i));
            }
            return returnlist;
        }  
        /** 
        * 替换表格里面的变量 
        * @param doc 要替换的文档 
        * @param bookmark 参数 
        */  
        public static ArrayList<String> replaceInTable(XWPFDocument doc, HashMap<String, String> bookmark,boolean ShowKey) {  
            ArrayList<String> returnlist= new ArrayList<String>();
            Iterator<XWPFTable> iterator = doc.getTablesIterator();
            XWPFTable table;
            List<XWPFTableRow> rows;
            List<XWPFTableCell> cells;
            List<XWPFParagraph> paras;
            while (iterator.hasNext()) {
                table = iterator.next();
                rows = table.getRows();
                for (XWPFTableRow row : rows) {
                    cells = row.getTableCells();
                    for (XWPFTableCell cell : cells) {
                        paras = cell.getParagraphs();
                        for (XWPFParagraph para : paras) {
                            ArrayList<String> rl=replaceInPara(para, bookmark,ShowKey);
                            for(int i=0;i<rl.size();i++)
                                returnlist.add(rl.get(i));
                        }  
                    }  
                }  
            }
            return returnlist;
        }
        /** 
        * 替换段落里面的变量 
        * @param para 要替换的段落 
        * @param bookmark 参数 
        */  
        public static ArrayList<String> replaceInPara(XWPFParagraph para, HashMap<String, String> bookmark,boolean ShowKey) 
        {  
            ArrayList<String> returnlist= new ArrayList<String>();
            
            List<XWPFRun> runs;
            Matcher matcher;
            String pkey,pval;
            if (matcherL(para.getParagraphText()).find())
            {
                runs = para.getRuns();  
                for (int i=0; i<runs.size(); i++)
                {
                    pval = runs.get(i).toString();
                    matcher = matcherL(pval);
                    if (matcher.find())
                    {
                        pkey="Error";
                        while ((matcher = matcherL(pval)).find())//多个标签在1个run中的时候,就会用到这里。
                        {
                            pkey=matcher.group(1);
                            returnlist.add(pkey);
                            if(bookmark==null)
                                pval=matcher.replaceFirst("");
                            else
                                pval =matcher.replaceFirst(String.valueOf(bookmark.get(pkey)));
                        }
                        //直接调用runs.get(i).setText(runText);方法设置文本时,在底层会重新创建一个XWPFRun,把文本附加在当前文本后面,  
                        //所以我们不能直接设值,需要先删除当前run,然后再自己手动插入一个新的run。  
                        //para.removeRun(i);
                        //para.insertNewRun(i).setText(runText);//邢志云2018-12-03 01:53:44但用这种方式无法保持原来的文字格式
                        if(ShowKey)
                            runs.get(i).setText("▶"+pkey+"◀", 0); 
                        else if(pval!=null && !"null".equals(pval) && bookmark!=null)
                        {
                            runs.get(i).setText(pval, 0);//这个完美
                        }
                    }
                }
            }
            return returnlist;
        }
        /** 
        * 正则匹配字符串 
        * @param str 
        * @return 
        */  
        public static Matcher matcherL(String str) {  
            Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);  
            Matcher matcher = pattern.matcher(str);  
            return matcher;  
        }
        //■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
        public static void main(String[] args) throws Exception
        {
                
        }
    }


    展开全文
  • 自定义标签---word

    2012-10-20 12:43:08
    第三章 自定义标签 终极目标:Jsp页面无Java代码块。 解决方案:使用标签(用户自定义 + 系统定义(标准标签库JSTL))。 1. 为什么需要使用标签? 使用标签之后,能够实现jsp页面无java脚本。 Jsp页面更...

    第三章 自定义标签

    终极目标:Jsp页面无Java代码块。

    解决方案:使用标签(用户自定义 系统定义(标准标签库JSTL))。

    1. 为什么需要使用标签?

    使用标签之后,能够实现jsp页面无java脚本。

    Jsp页面更简洁、便于代码的封装、维护更方便。

    2. 标签在JavaWeb中的版本分类?

    标准1.2版 、标签文件2.0

    3. 标准1.2版使用步骤:

    a) 创建一个类,继承自BodyTagSupport类。

    b) 重写系统中的方法:doStartTag()、doEndTag();(这些方法中可以写标签中的内容)

    c) 在WEB-INF目录中对标签进行配置。(创建配置文件:“*.tld”)

    d) 在jsp页面使用标签。(导入标签库: <%@ taglib uri=”配置文件的路径” prefix=”标签文件前缀名”  %>

    注意事项:

    1. 独立标签(可以带有属性)。

    重写doStartTag()或doEndTag()方法即可。

    获取输出流:JspWriter out = super.pageContext.getOut();

    2. 带有内容的标签(可以带有属性)。

    重写doAfterBody()方法即可。

    获取内容:String content = super.bodyContent.getString()

    获取输出流:JspWriter out = super.bodyCoent.getEnclosingWriter();

    可以在标签处理类中定义属性。

    tld文件中对属性进行配置,jsp页面就可以使用该属性(注意:属性名必须跟配置的名字相同)。

    4. 2.0版,简单标签

    步骤:

    1. 在WEB-INF目录下,创建tags目录。

    2. 创建标签文件。命名规则:*.tag

    3. 在tag文件中编写标签处理代码(跟jsp语法完全一致)。

    <%@ tag pageEncoding=”编码” import=”导入包” %>

    ………………………………

    4. 在jsp中使用。<%@ taglib tagdir=/WEB-INF/tags” prefix=”前缀名”  %>

    <%@ tag pageEncoding="UTF-8" %> //表示当前为标签页面,而不是jsp

    <%@ attribute name="count" required="true" rtexprvalue="true" type="java.lang.Integer" %> //定义一个属性

    <!-- 将标签中的内容,自动存放在request范围中 -->

    <jsp:doBody var="mycontent" scope="request" /> //获取标签中间的内容

    <%@ taglib tagdir="/WEB-INF/tags" prefix="xw" %>



    展开全文
  • 1.创建自定义标签首先要在views下面创建一个tags文件夹 2.现在我们创建一个hello标签也就是在tags文件夹下面创建一个hello文件,我们创建一个hello.html标签文件 3.在页面中使用hello标签,如下代码:...

    1.创建自定义标签首先要在views下面创建一个tags文件夹


    2.现在我们创建一个hello标签也就是在tags文件夹下面创建一个hello文件,我们创建一个hello.html标签文件


    3.在页面中使用hello标签,如下代码:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>HELLO WORD</title>
    </head>
    <body>
    #{hello/} 开学了

    </body>
    </html>

    标签页的代码:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>hello tag</title>
    </head>
    <body>
    李明
    </body>
    </html>

    4.执行的结果是:

    5.标签可以传入参数,多个参数之间可以使用能够分号隔开,如下:

    #{hello name:'Bob' /}
    标签页接收参数:

     ${_name} 





































    展开全文
  • jsp下拉列表—自定义标签

    千次阅读 2016-12-11 05:14:39
    有时一个网页中下拉列表很多,而且是动态变化的时候,这时有自定义标签就会很方便 首先是jdbc数据连接 [c-sharp] view plain copy ackage pro.shopping.util;    import ...

    有时一个网页中下拉列表很多,而且是动态变化的时候,这时有自定义标签就会很方便

    首先是jdbc数据连接

    [c-sharp] view plain copy
    1. ackage pro.shopping.util;  
    2.   
    3. import <a href="http://lib.csdn.net/base/javase" class='replace_word' title="Java SE知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>.io.IOException;  
    4. import java.sql.Connection;  
    5. import java.sql.DriverManager;  
    6. import java.sql.PreparedStatement;  
    7. import java.sql.ResultSet;  
    8. import java.sql.SQLException;  
    9. import java.util.Properties;  
    10.   
    11. import com.sun.java_cup.internal.internal_error;  
    12.   
    13. /* 
    14.  * 该类用于连接<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>数据库</a>和对数据库进行操作 
    15.  */  
    16. public class JdbcUtil {  
    17.     public Connection con = null;   
    18.       
    19.     //连接数据库  
    20.     public Connection getCon(){  
    21.         //获取配置文件的数据  
    22.         Properties pro = new Properties();  
    23.         try {  
    24.             pro.load(JdbcUtil.class.getResourceAsStream("/db.properties"));  
    25.             String userName = pro.getProperty("userName");  
    26.             String userPassword = pro.getProperty("userPassword");  
    27.             String url = pro.getProperty("url");  
    28.             String driver = pro.getProperty("driver");  
    29.               
    30.             Class.forName(driver);  
    31.             con = DriverManager.getConnection(url,userName,userPassword);  
    32.         } catch (Exception e) {  
    33.             // TODO Auto-generated catch block  
    34.             e.printStackTrace();  
    35.         }  
    36.         return con;  
    37.           
    38.     }  
    39.       
    40.     //查询操作  
    41.     public ResultSet gerSet(String sql,Object ...p){  
    42.         //连接数据库  
    43.         con = this.getCon();  
    44.         ResultSet re = null;  
    45.         try {  
    46.             PreparedStatement pre = con.prepareStatement(sql);  
    47.             if(p!=null){  
    48.                 for (int i = 0; i < p.length; i++) {  
    49.                     pre.setObject(i+1, p[i]);  
    50.                 }  
    51.                 re = pre.executeQuery();  
    52.             }  
    53.         } catch (SQLException e) {  
    54.             // TODO Auto-generated catch block  
    55.             e.printStackTrace();  
    56.         }  
    57.         return re;  
    58.     }  
    59.       
    60.     //增加、删除、修改操作  
    61.     public int zsg(String sql,Object ...p){  
    62.         con = this.getCon();  
    63.         int j = 0;  
    64.         try {  
    65.             PreparedStatement pre = con.prepareStatement(sql);  
    66.             if(p!=null){  
    67.                 for (int i = 0; i < p.length; i++) {  
    68.                     pre.setObject(i+1, p[i]);  
    69.                 }  
    70.                 j = pre.executeUpdate();  
    71.                 con.close();    //关闭数据库  
    72.             }  
    73.         } catch (SQLException e) {  
    74.             // TODO Auto-generated catch block  
    75.             e.printStackTrace();  
    76.         }  
    77.         return j;  
    78.     }  
    79.       
    80. }  

       然后编写Dao类:

     

    [c-sharp] view plain copy
    1. package pro.shoping.Tag;  
    2.   
    3. import java.io.IOException;  
    4. import java.sql.ResultSet;  
    5. import java.sql.SQLException;  
    6.   
    7. import javax.servlet.jsp.JspException;  
    8. import javax.servlet.jsp.JspWriter;  
    9. import javax.servlet.jsp.tagext.SimpleTagSupport;  
    10.   
    11. import pro.shopping.util.JdbcUtil;  
    12.   
    13. public class HtmlTag extends SimpleTagSupport{  
    14.     private JdbcUtil jUtil = new JdbcUtil();  
    15.       
    16.     private String table;    
    17.     private String value;    
    18.     private String label;   
    19.     public void setTable(String table) {  
    20.         this.table = table;  
    21.     }  
    22.     public void setValue(String value) {  
    23.         this.value = value;  
    24.     }  
    25.     public void setLabel(String label) {  
    26.         this.label = label;  
    27.     }  
    28.       
    29.     @Override  
    30.     public void doTag() throws JspException, IOException {  
    31.         // TODO Auto-generated method stub  
    32.         String sql = "select * from "+table;  
    33.         ResultSet rs = jUtil.gerSet(sql);  
    34.         JspWriter out = getJspContext().getOut();  
    35.         out.print("<select name="+table+">");  
    36.         out.print("<option value=-1>--请选择--</option>");  
    37.            try {  
    38.             while (rs != null && rs.next()) {  
    39.                 String v = rs.getString(value);  
    40.                 String l = rs.getString(label);  
    41.                 out.print("<option value=" + v + ">" + l + "</option>");  
    42.             }  
    43.         } catch (SQLException e) {  
    44.             // TODO Auto-generated catch block  
    45.             e.printStackTrace();  
    46.         }  
    47.         out.print("</select>");  
    48.         super.doTag();  
    49.     }  
    50.       
    51.       
    52.   
    53. }  

    最后是tld的配置

    [c-sharp] view plain copy
    1. <?xml version="1.0" encoding="UTF-8" ?>  
    2.   
    3. <taglib xmlns="http://java.sun.com/xml/ns/javaee"  
    4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"  
    6.     version="2.1">  
    7.   
    8.     <description>JSTL 1.1 core library</description>  
    9.     <display-name>JSTL core</display-name>  
    10.     <tlib-version>1.1</tlib-version>  
    11.     <short-name>ccc</short-name>  
    12.     <uri>http://java.sun.com/jsp/jstl/core3</uri>  
    13.   
    14.     <tag>  
    15.         <name>select</name>  
    16.         <tag-class>pro.shoping.Tag.HtmlTag</tag-class>  
    17.         <body-content>empty</body-content>  
    18.   
    19.         <!-- 属性 -->  
    20.         <attribute>  
    21.             <name>table</name>  
    22.             <required>true</required>  
    23.         </attribute>  
    24.   
    25.         <attribute>  
    26.             <name>value</name>  
    27.             <required>true</required>  
    28.         </attribute>  
    29.   
    30.         <attribute>  
    31.             <name>label</name>  
    32.             <required>true</required>  
    33.         </attribute>  
    34.   
    35.     </tag>  
    36.   
    37. </taglib>  
      

     

    html的调用:

    [java] view plain copy
    1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
    2. <%@ taglib prefix="html" uri="/WEB-INF/html.tld" %>  
    3.   
    4. 部门:<html:select label="depname" table="dep" value="depid"></html:select>  <br>  
    5. 员工:<html:select label="empname" table="emp" value="empid"></html:select>  

    展开全文
  • word自定义标尺跨度->打开页面设置,点文档网格,再点绘图网格,将水平间距和垂直间距都调为数值0,立即就行. 表格图片充满表格->1、表格菜单、表格属性、表格标签、选项、把上下左右边距都设成0,不建议选“自动重调...
  • 选中文字,右键,选择 段落 大纲级别,选择一级 设置多级列表 ...重新定义一行,使用前面的自定义样式hb_level1,然后到标签后面使用 tab,表示切换下一级 自定义样式hb_level2,表示大纲第二级 效果 ...
  • 自定义多级标题 定义新的多级标题 后面的第2级别第3级别菜单(点击标号为2的地方选中级别)依次设置即可。 为图片、表格添加序号方便引用的方法 选中word中的图片,点击菜单栏的引用——>插入题注–>新建...
  • word定义标题样式级别When inserting images, tables, or equations in Word documents, you can easily addautomatically numbered captions to these elements. They can contain consistent labels, such as ...
  • 自己定义分词标签 分词标签可能会互相包含 需要统计标签词语的出现频率 一次查找统计出来 代码实现 使用正则表达式 find group 对标签词语处理,得到一些正则表达式 使用正则表达式匹配文章内容,得到结果 ...
  • 处理思路: ... 在xml 文件中,使用freemark标签,替换一些自定义值 使用freemark 解析xml ,输出到.doc 文件  在处理的时候要把文件后缀改成.ftl格式 获得自定义内容的word文件 案列资源:  ...
  • 1.丰富的标签显示位置,可以显示在工作区的上、下、左或者右方 2、可以自定义标签栏的颜色 3.OfficeTab_9.10_Free版本 word多标签
  • 实现思路:一 、 将别人提供的word 模板,另存为xml 格式的文件 ,得到xml模板二、在xml 文件中,使用freemark标签,替换一些自定义值三、 使用freemark 解析xml ,输出到.doc 文件 小结: 这里word文档就生成了 ...
  • •此软件支持从DOC / DOCX进行PDF转换•从DOC和DOCX文件转换PDF•无限次数的免费转换chrome的自定义标签。1.无痕模式在任何网站上选择文本或链接,然后右键单击菜单“以隐身模式搜索/打开”。在隐身模式下,浏览器...
  • 使用模版出word

    2019-11-26 19:20:57
    java使用模版导出docx....2.word自定义标签方法 3.调用工具类WordExport。 package com.jeesite.common.utils.word; import com.jeesite.common.codec.EncodeUtils; import com.jeesite.commo...
  • 问题: vue alert提示框长词无法自动换行(一个连起来的词) 解决: 自定义一个class 名 ...this.$alert(row.content, row.title, { confirmButtonText: '确定', customClass:'message_box_alert' ... word-.
  • 一年前我安装了Word 2007,一直想知道能... 要实现这个效果我得在“页面布局”标签中单击“水印”打开下拉菜单;菜单中有些预设好的水印,但是“副本”字样并不包括在内,所以我还得选择“自定义水印”|“文字水印”,
  • using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;...namespace Word...
  • CSS 页面自定义滚动条

    2020-12-04 12:59:09
    设置文本自动换行,行内元素数字字母需要设置,块级标签一般会超出自动换行。 div { word-wrap: break-word; //设置文本自动换行 word-break: normal; } 超出盒子设置滚动条,并且自定义滚动条样式,以下滚动条...
  • 自定义主题 by ElyhG

    2021-01-07 01:48:45
    /*自定义样式,实时生效*/ /* 全局属性 * 页边距 padding: 30px; * 全文字体 font-family: ptima-Regular; * 英文换行 word-break: break-all; */ .layout { } /* 段落,下方未标注标签参数均同...
  • Nothing is impossible, the word itself says 'I'm possible'!" — Audrey Hepburn winform 自定义控件属性在属性面板中显示的问题 我们做了自定义控件,在工具箱里拖出来的时候,想要直接在属性面板...
  • 项目开发过程中,客户提出一堆导出报表的需求,需要导出word格式,页眉还需要加上客户公司的logo,试了几种方案,最后选择了用 Apache poi 加上自定义标签的方式实现。 目前功能还比较简单,一些复杂的表格做不了...
  • 使用div标签进行自动换行 使用div标签可以完美实现,关键在于style两句css样式 this.$notify({ title: '当前用户信息', message: this.$createElement('div', { style: ' word-wrap: break-word;word-break:...
  • 润乾报表文件通过 TAG 标签方式发布,导出 EXCEL、word、PDF 的文件名称默认与报表文件名称相同,例如,报表文件名叫 gcxmsyqk.rpx, 那么这张报表导出 excel 时文件名称就是 gcxmsyqk.xlsx。 如果需要用其他规则...

空空如也

空空如也

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

word自定义标签