word导出03

2023-06-29 14:28:35 浏览数 (2)

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();         }     }

0 人点赞