All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.anyline.office.docx.entity.WParagraph Maven / Gradle / Ivy

There is a newer version: 8.7.2-20250110
Show newest version
/*
 * Copyright 2006-2023 www.anyline.org
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */




package org.anyline.office.docx.entity;

import org.anyline.handler.Uploader;
import org.anyline.office.docx.util.DocxUtil;
import org.anyline.util.BasicUtil;
import org.dom4j.Element;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;

public class WParagraph extends WElement {
    private List wrs = new ArrayList<>();
    public WParagraph(WDocument doc, Element src){
        this.root = doc;
        this.src = src;
        load();
    }
    public void reload(){
        load();
    }
    private void load(){
        wrs.clear();
        List elements = src.elements("r");
        for(Element element:elements){
            WRun wr = new WRun(root, element);
            wrs.add(wr);
        }
    }
    public WParagraph setColor(String color){
        for(WRun wr:wrs){
            wr.setColor(color);
        }
        Element pr = DocxUtil.addElement(src, "pPr");
        DocxUtil.addElement(pr, "color","val", color.replace("#",""));
        return this;
    }
    public WParagraph setFont(String size, String eastAsia, String ascii, String hint){

        for(WRun wr:wrs){
            wr.setFont(size, eastAsia, ascii, hint);
        }
        int pt = DocxUtil.fontSize(size);
        Element pr = DocxUtil.addElement(src, "pPr");
        DocxUtil.addElement(pr, "sz","val", pt+"");
        DocxUtil.addElement(pr, "rFonts","eastAsia", eastAsia);
        DocxUtil.addElement(pr, "rFonts","ascii", ascii);
        DocxUtil.addElement(pr, "rFonts","hint", hint);

        return this;
    }
    public WParagraph setFontSize(String size){
        for(WRun wr:wrs){
            wr.setFontSize(size);
        }
        int pt = DocxUtil.fontSize(size);
        Element pr = DocxUtil.addElement(src, "pPr");
        DocxUtil.addElement(pr, "sz","val", pt+"");
        return this;
    }
    public WParagraph setFontFamily(String font){
        for(WRun wr:wrs){
            wr.setFontFamily(font);
        }
        Element pr = DocxUtil.addElement(src, "pPr");
        DocxUtil.addElement(pr, "rFonts","eastAsia", font);
        DocxUtil.addElement(pr, "rFonts","ascii", font);
        DocxUtil.addElement(pr, "rFonts","hAnsi", font);
        DocxUtil.addElement(pr, "rFonts","cs", font);
        DocxUtil.addElement(pr, "rFonts","hint", font);
        return this;
    }

    public WParagraph setAlign(String align){
        Element pr = DocxUtil.addElement(src, "pPr");
        DocxUtil.addElement(pr, "jc","val", align);
        return this;
    }

    public WParagraph setBackgroundColor(String color){
        Element pr = DocxUtil.addElement(src, "pPr");
        color = color.replace("#","");
        DocxUtil.addElement(pr, "highlight", "val", color);
        for(WRun wr:wrs){
            wr.setBackgroundColor(color);
        }
        return this;
    }

    public WParagraph setBold(boolean bold){
        Element pr = DocxUtil.addElement(src, "pPr");
        Element b = pr.element("b");
        if(bold){
            if(null == b){
                pr.addElement("w:b");
            }
        }else{
            if(null != b){
                pr.remove(b);
            }
        }
        for(WRun wr:wrs){
            wr.setBold(bold);
        }
        return this;
    }
    public WParagraph setUnderline(boolean underline){
        Element pr = DocxUtil.addElement(src, "pPr");
        Element u = pr.element("u");
        if(underline){
            if(null == u){
                DocxUtil.addElement(pr, "u", "val", "single");
            }
        }else{
            if(null != u){
                pr.remove(u);
            }
        }
        for(WRun wr:wrs){
            wr.setUnderline(underline);
        }
        return this;
    }
    public WParagraph setStrike(boolean strike){
        Element pr = DocxUtil.addElement(src, "pPr");
        Element s = pr.element("strike");
        if(strike){
            if(null == s){
                pr.addElement("w:strike");
            }
        }else{
            if(null != s){
                pr.remove(s);
            }
        }
        for(WRun wr:wrs){
            wr.setStrike(strike);
        }
        return this;
    }
    public WParagraph setItalic(boolean italic){
        Element pr = DocxUtil.addElement(src, "pPr");
        DocxUtil.addElement(pr, "i","val",italic+"");
        for(WRun wr:wrs){
            wr.setItalic(italic);
        }
        return this;
    }

    /**
     * 清除样式
     * @return wp
     */
    public WParagraph removeStyle(){
        Element pr = src.element("pPr");
        if(null != pr){
            src.remove(pr);
        }
        for(WRun wr:wrs){
            wr.removeStyle();
        }
        return this;
    }
    /**
     * 清除背景色
     * @return wp
     */
    public WParagraph removeBackgroundColor(){
        DocxUtil.removeElement(src,"shd");
        return this;
    }
    /**
     * 清除颜色
     * @return wp
     */
    public WParagraph removeColor(){
        DocxUtil.removeElement(src,"color");
        return this;
    }
    public WParagraph addWr(WRun wr){
        wrs.add(wr);
        return this;
    }
    public WParagraph replace(String target, String replacement){
        for(WRun wr:wrs){
            wr.replace(target, replacement);
        }
        return this;
    }

    public LinkedHashMap styles(){
        LinkedHashMap styles = new LinkedHashMap<>();
        Element pr = src.element("pPr");
        if(null != pr){
           Element rpr = pr.element("rPr");
           if(null != rpr){
               //
               Element color = rpr.element("color");
               if(null != color){
                   String val = color(color.attributeValue("val"));
                   if(null != val){
                       styles.put("color", val);
                   }
               }
               //
               Element highlight = pr.element("highlight");
               if(null != highlight){
                   String val = color(highlight.attributeValue("val"));
                   if(null != val){
                       styles.put("background-color", val);
                   }
               }
               //
               Element font = pr.element("rFonts");
               if(null != font){
                   String hint = font.attributeValue("hint");
                   if(null != hint){
                       styles.put("font-family", hint);
                   }
               }
               //
               Element size = pr.element("sz");
               if(null == size){
                   size = pr.element("szCs");
               }
               if(null != size){
                   int val = BasicUtil.parseInt(size.attributeValue("val"), 0);
                   if(val > 0){
                       styles.put("font-size", val+"pt");
                   }
               }
               //
               Element jc = pr.element("jc");
               if(null != jc){
                   String val = jc.attributeValue("val");
                   if(null != val){
                       styles.put("text-align", val);
                   }
               }
           }
        }
        return styles;
    }

    public String html(Uploader uploader, int lvl){
        StringBuilder builder = new StringBuilder();
        StringBuilder body = new StringBuilder();
        Iterator items = src.elementIterator();
        while (items.hasNext()){
            Element item = items.next();
            String tag = item.getName();
           if(tag.equalsIgnoreCase("r")){
                body.append("\n");
                body.append(new WRun(getDoc(), item).html(uploader, lvl+1));
            } else if(tag.equalsIgnoreCase("tbl")){
                body.append("\n");
                body.append(new WTable(getDoc(), item).html(uploader, lvl+1));
            }
        }
        t(builder, lvl);
        builder.append("");
        builder.append(body);
        builder.append("\n");
        t(builder, lvl);
        builder.append("
"); return builder.toString(); } }



© 2015 - 2025 Weber Informatics LLC | Privacy Policy