word导出03

来源:互联网 发布:淘宝封口棒视频 编辑:程序博客网 时间:2024/06/05 18:25

word导出用的docx4j

 public static void exportWordImg(String wordpath,List<String> contentlist,String[] imglist) throws Exception{
        exportQuestionWord t=new exportQuestionWord();
        WordprocessingMLPackage wordMLPackage = t.createWordprocessingMLPackage();
        MainDocumentPart mp = wordMLPackage.getMainDocumentPart();
        ObjectFactory factory = Context.getWmlObjectFactory();
        //图片页眉
        //Relationship relationship =t.createHeaderPart(wordMLPackage, mp, factory);
        //文字页眉
        //Relationship relationship =t.createTextHeaderPart(wordMLPackage, mp, factory, "页眉", JcEnumeration.CENTER);
        //t.createHeaderReference(wordMLPackage, mp, factory, relationship);


        t.addParagraphTest(wordMLPackage, mp, factory,contentlist,imglist);
        //t.addPageBreak(wordMLPackage, factory);


        //t.createNormalTableTest(wordMLPackage, mp, factory);
        //页脚
        //relationship =t.createFooterPageNumPart(wordMLPackage, mp, factory);
        //t.createFooterReference(wordMLPackage, mp, factory, relationship);


        t.saveWordPackage(wordMLPackage, new File(wordpath));


    }
    public void addParagraphTest(WordprocessingMLPackage wordMLPackage,
                                 MainDocumentPart t, ObjectFactory factory,List<String> contentlist,String[] imglist) throws Exception {
        RPr titleRPr = getRPr(factory, "黑体", "000000", "30", STHint.EAST_ASIA,
                true, false, false, false);
        RPr boldRPr = getRPr(factory, "宋体", "000000", "24", STHint.EAST_ASIA,
                true, false, false, false);
        RPr fontRPr = getRPr(factory, "宋体", "000000", "22", STHint.EAST_ASIA,
                false, false, false, false);


        P paragraph=factory.createP();
        Text txt = null;
        R run=null;
        File file=null;
        InputStream is=null;
        if(contentlist!=null || contentlist.size()>0){
        for (int i = 0; i < contentlist.size(); i++) {
            if(contentlist.get(i).contains("22.发生肺水肿时的应急处理错误的是")){
                paragraph = factory.createP();
                file = new File(imglist[0]);
                is = new FileInputStream(file);
                txt = factory.createText();
                txt.setValue(contentlist.get(i));
                run = factory.createR();
                run.getContent().add(txt);
                run.setRPr(boldRPr);
                paragraph.getContent().add(run);
                setParagraphSpacing(factory, paragraph,JcEnumeration.LEFT, "0",  "3");
                createImageParagraph(wordMLPackage, factory, paragraph, "img_1",null, BufferUtil.getBytesFromInputStream(is), JcEnumeration.LEFT);
                t.addObject(paragraph);
            }else{
                paragraph = factory.createP();
                txt = factory.createText();
                txt.setValue(contentlist.get(i));
                run = factory.createR();
                run.getContent().add(txt);
                run.setRPr(boldRPr);
                paragraph.getContent().add(run);
                setParagraphSpacing(factory, paragraph,JcEnumeration.LEFT, "0",  "3");
                t.addObject(paragraph);
            }
        }
        }
        //段前8磅 段后0.5磅
        /*setParagraphSpacing(factory, paragraph,JcEnumeration.LEFT, "160",  "10");
        t.addObject(paragraph);*/




       /* file = new File("");
        is = new java.io.FileInputStream(file);
        createImageParagraph(wordMLPackage, factory, paragraph, "img_2", StringUtils.leftPad("B.", 20) , BufferUtil.getBytesFromInputStream(is), JcEnumeration.LEFT);
        setParagraphSpacing(factory, paragraph,JcEnumeration.LEFT, "1",  "3");
        t.addObject(paragraph);*/


    }
    public WordprocessingMLPackage createWordprocessingMLPackage()
            throws Exception {
        return WordprocessingMLPackage.createPackage();
    }


    public void saveWordPackage(WordprocessingMLPackage wordPackage, File file)
            throws Exception {
        wordPackage.save(file);
    }


    // 分页
    public void addPageBreak(WordprocessingMLPackage wordMLPackage,
                             ObjectFactory factory) {
        MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();
        Br breakObj = new Br();
        breakObj.setType(STBrType.PAGE);
        P paragraph = factory.createP();
        paragraph.getContent().add(breakObj);
        documentPart.addObject(paragraph);
    }


    //段落中插入文字和图片
    public P createImageParagraph(WordprocessingMLPackage wordMLPackage,
                                  ObjectFactory factory,P p,String fileName, String content,byte[] bytes,
                                  JcEnumeration jcEnumeration) throws Exception {
        BinaryPartAbstractImage imagePart = BinaryPartAbstractImage
                .createImagePart(wordMLPackage, bytes);
        Inline inline = imagePart.createImageInline(fileName, "这是图片", 1,
                2, false);
        Text text = factory.createText();
        text.setValue(content);
        text.setSpace("preserve");
        R run = factory.createR();
        p.getContent().add(run);
        run.getContent().add(text);
        Drawing drawing = factory.createDrawing();
        run.getContent().add(drawing);
        drawing.getAnchorOrInline().add(inline);
        PPr pPr = p.getPPr();
        if (pPr == null) {
            pPr = factory.createPPr();
        }
        Jc jc = pPr.getJc();
        if (jc == null) {
            jc = new Jc();
        }
        jc.setVal(jcEnumeration);
        pPr.setJc(jc);
        p.setPPr(pPr);
        setParagraphSpacing(factory, p, jcEnumeration, "0", "0");
        return p;
    }
    /**
     * 创建字体
     *
     * @param isBlod
     *            粗体
     * @param isUnderLine
     *            下划线
     * @param isItalic
     *            斜体
     * @param isStrike
     *            删除线
     */
    public RPr getRPr(ObjectFactory factory, String fontFamily,
                      String colorVal, String fontSize, STHint sTHint, boolean isBlod,
                      boolean isUnderLine, boolean isItalic, boolean isStrike) {
        RPr rPr = factory.createRPr();
        RFonts rf = new RFonts();
        rf.setHint(sTHint);
        rf.setAscii(fontFamily);
        rf.setHAnsi(fontFamily);
        rPr.setRFonts(rf);


        BooleanDefaultTrue bdt = factory.createBooleanDefaultTrue();
        rPr.setBCs(bdt);
        if (isBlod) {
            rPr.setB(bdt);
        }
        if (isItalic) {
            rPr.setI(bdt);
        }
        if (isStrike) {
            rPr.setStrike(bdt);
        }
        if (isUnderLine) {
            U underline = new U();
            underline.setVal(UnderlineEnumeration.SINGLE);
            rPr.setU(underline);
        }


        Color color = new Color();
        color.setVal(colorVal);
        rPr.setColor(color);


        HpsMeasure sz = new HpsMeasure();
        sz.setVal(new BigInteger(fontSize));
        rPr.setSz(sz);
        rPr.setSzCs(sz);
        return rPr;
    }


    // 水平对齐方式
    // TODO 垂直对齐没写
    public void setParagraphAlign(ObjectFactory factory, P p,
                                  JcEnumeration jcEnumeration) {
        PPr pPr = p.getPPr();
        if (pPr == null) {
            pPr = factory.createPPr();
        }
        Jc jc = pPr.getJc();
        if (jc == null) {
            jc = new Jc();
        }
        jc.setVal(jcEnumeration);
        pPr.setJc(jc);
        p.setPPr(pPr);
    }


    //设置段落间距
    public void setParagraphSpacing(ObjectFactory factory, P p,
                                    JcEnumeration jcEnumeration,String before,String after) {
        PPr pPr = p.getPPr();
        if (pPr == null) {
            pPr = factory.createPPr();
        }
        Jc jc = pPr.getJc();
        if (jc == null) {
            jc = new Jc();
        }
        jc.setVal(jcEnumeration);
        pPr.setJc(jc);


        PPrBase.Spacing spacing=new PPrBase.Spacing();
        spacing.setBefore(new BigInteger(before));
        spacing.setAfter(new BigInteger(after));
        spacing.setLineRule(STLineSpacingRule.AUTO);
        pPr.setSpacing(spacing);
        p.setPPr(pPr);
    }


    public P createHeaderBlankP(WordprocessingMLPackage wordMLPackage,
                                ObjectFactory factory,
                                JcEnumeration jcEnumeration) throws Exception{
        P p = factory.createP();
        R run = factory.createR();
        p.getContent().add(run);
        PPr pPr = p.getPPr();
        if (pPr == null) {
            pPr = factory.createPPr();
        }
        Jc jc = pPr.getJc();
        if (jc == null) {
            jc = new Jc();
        }
        jc.setVal(jcEnumeration);
        pPr.setJc(jc);


        PPrBase.PBdr pBdr=pPr.getPBdr();
        if(pBdr==null){
            pBdr=factory.createPPrBasePBdr();
        }
        CTBorder value=new CTBorder();
        value.setVal(STBorder.SINGLE);
        value.setColor("000000");
        value.setSpace(new BigInteger("0"));
        value.setSz(new BigInteger("3"));
        pBdr.setBetween(value);
        pPr.setPBdr(pBdr);
        p.setPPr(pPr);
        setParagraphSpacing(factory, p, jcEnumeration, "0", "0");
        return p;
    }


    /**
     * 标题样式
     */
    public static void formatTitleWord(XWPFDocument document,String title){
        //添加标题
        XWPFParagraph titleParagraph = document.createParagraph();
        //设置段落居中
        titleParagraph.setAlignment(ParagraphAlignment.CENTER);


        XWPFRun titleParagraphRun = titleParagraph.createRun();
        titleParagraphRun.setText(title);
        titleParagraphRun.setColor("000000");
        titleParagraphRun.setFontSize(16);
    }


    /**
     * 段落样式
     */
    public static void  formatParagraphWord(XWPFDocument document,List<String> contentList){
        //段落
        XWPFParagraph firstParagraph = document.createParagraph();
        XWPFRun run = firstParagraph.createRun();
        if(contentList!=null && contentList.size()>0){
            for (int i = 0; i < contentList.size(); i++) {
                run.setText(contentList.get(i));
            }
        }
        run.setColor("000000");
        run.setFontSize(12);


        //设置段落背景颜色
        /*CTShd cTShd = run.getCTR().addNewRPr().addNewShd();
        cTShd.setVal(STShd.CLEAR);
        cTShd.setFill("");*/
    }
    /**
     * 小标题段落样式
     */
    public static void  formatParagraphWord2(XWPFDocument document,List<String> titleList){
        //段落
        XWPFParagraph firstParagraph = document.createParagraph();
        XWPFRun run = firstParagraph.createRun();
        if(titleList!=null && titleList.size()>0){
            for (int i = 0; i < titleList.size(); i++) {
                run.setText(titleList.get(i));
            }
        }
        run.setColor("000000");
        run.setFontSize(16);


        //设置段落背景颜色
        /*CTShd cTShd = run.getCTR().addNewRPr().addNewShd();
        cTShd.setVal(STShd.CLEAR);
        cTShd.setFill("");*/
    }
    /**
     * 设置页眉,页脚
     */
    public static void  formatHeaderFooterWord(XWPFDocument document){
        CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
        XWPFHeaderFooterPolicy policy = new XWPFHeaderFooterPolicy(document, sectPr);


        //添加页眉
        CTP ctpHeader = CTP.Factory.newInstance();
        CTR ctrHeader = ctpHeader.addNewR();
        CTText ctHeader = ctrHeader.addNewT();
        String headerText = "";
        ctHeader.setStringValue(headerText);
        XWPFParagraph headerParagraph = new XWPFParagraph(ctpHeader, document);
        //设置为右对齐
        headerParagraph.setAlignment(ParagraphAlignment.RIGHT);
        XWPFParagraph[] parsHeader = new XWPFParagraph[1];
        parsHeader[0] = headerParagraph;
        try {
            policy.createHeader(XWPFHeaderFooterPolicy.DEFAULT, parsHeader);
        } catch (IOException e) {
            e.printStackTrace();
        }


        //添加页脚
        CTP ctpFooter = CTP.Factory.newInstance();
        CTR ctrFooter = ctpFooter.addNewR();
        CTText ctFooter = ctrFooter.addNewT();
        String footerText = "";
        ctFooter.setStringValue(footerText);
        XWPFParagraph footerParagraph = new XWPFParagraph(ctpFooter, document);
        headerParagraph.setAlignment(ParagraphAlignment.CENTER);
        XWPFParagraph[] parsFooter = new XWPFParagraph[1];
        parsFooter[0] = footerParagraph;
        try {
            policy.createFooter(XWPFHeaderFooterPolicy.DEFAULT, parsFooter);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

public static void main(String[] args) {
        try {
           //list1数据,imglist要插入的图片
            String[] imglist={"/Users/limeng/word/ccc0.jpg"};
            exportWordImg("/Users/limeng/word/bbb5.docx",list1,imglist);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }