文档章节

java转word含图片

自由_自在
 自由_自在
发布于 2017/03/29 10:11
字数 988
阅读 12
收藏 0

这里代码的粘贴,如果有漏洞希望各位帮忙指点。谢谢大家。 选项中的图片没有展示,希望大神指点。帮忙完善下,万分感谢!!!

@SuppressWarnings("unchecked")     public String exportWord(){                  //清除错误和提示消息         this.clearErrorsAndMessages();                  //map得到用户编号         @SuppressWarnings("unused")         Map session = ActionContext.getContext().getSession();                  //获得数据集 QuestionLibrary questionLibrary=this.appraiseModelFactoryFacade.getCriterionModelFactory().findQuestionLibraryById(actionForm.getQuestionLibraryId());                  //得到response对象         HttpServletResponse response = ServletActionContext.getResponse();                  //定义A4页面大小         Rectangle rectPageSize = new Rectangle(PageSize.A4);                  //定义Document对象         Document document = new Document(rectPageSize);                  try{                          //设置返回头             response.setContentType("application/vnd.ms-word");             response.setHeader("Content-Disposition","attachment;filename=""+URLEncoder.encode(questionLibrary.getName()+".doc", "UTF-8")+""");             response.setHeader("Cache-Control","must-revalidate,post-check=0,pre-check=0");             response.setHeader("Pragma","public");             response.setDateHeader("Expires", 0);                          RtfWriter2.getInstance(document, response.getOutputStream());                          document.open();                          //中文字体               // BaseFont bfChinese=BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);                BaseFont bfChinese = BaseFont.createFont("C:\Windows\Fonts\simkai.ttf", BaseFont.IDENTITY_H , BaseFont.EMBEDDED);             //设置加粗、字号             Font fontChinese=new Font(bfChinese,14,Font.HELVETICA);                             //设置正常字体、字号             Font fontChinese2 = new Font(bfChinese,12,Font.NORMAL);                             //设置加粗、字号             Font fontChinese3 = new Font(bfChinese,12,Font.HELVETICA);                            //设置标题名称写入并集中             Paragraph title =new Paragraph(questionLibrary.getName()+"题库中所有题目",fontChinese);             //设置段前间距             title.setAlignment(1);             document.add(title);              //            //将题库名称写入并集中 //            Paragraph paragraphTestPaper =new Paragraph(questionLibrary.getName(),fontChinese); //             //            paragraphTestPaper.setSpacingBefore(15f); //             //            //设置段后间距 //            paragraphTestPaper.setSpacingAfter(5f); // //           //居中 setAlignment的参数1为居中对齐、2为右对齐、3为左对齐,默认为左对齐。 //            paragraphTestPaper.setAlignment(1); //             //            document.add(paragraphTestPaper);                          int i = 0;                          int j = 0;                          //定义选项             String option = "";                          //定义答案             String anwer = "";                          //定义题目             String questionName = "";                                  //得到题目集合                 ArrayList<QuestionExtend> questionList= this.appraiseModelFactoryFacade.getCriterionModelFactory().findQuestionList(actionForm.getQuestionLibraryId() );                     //获取识图题 测试展示效果                 //ArrayList<QuestionExtend> questionList= this.appraiseModelFactoryFacade.getCriterionModelFactory().findQuestionListByshitu(actionForm.getQuestionLibraryId() );                 //依次得到每道题目                 for (QuestionExtend question : questionList){                                          j++;                                          questionName = j + ". " + question.getName() ;                                          //如果是判断题在后边加上括号                     if (question.getTx().equals("判断题")) {                                                  questionName = questionName + "  (  )";                     }                                                                   //保存原来题目 为后面显示图片截取图片地址                         String  questionNameByReplace = questionName;                         int a = 1;                         while (Pattern.compile("<img(.?)>").matcher(questionNameByReplace).find()) {                             questionNameByReplace = questionNameByReplace.replaceFirst("<img(.?)>", "<"+ a +">");                              a++;                         }                         //将题目和题号                         Paragraph paragraphTestPaperQuestion = new Paragraph(questionNameByReplace,fontChinese2);                                                  //设置段前间距                         paragraphTestPaperQuestion.setSpacingBefore(15f);                                                  //设置段后间距                         paragraphTestPaperQuestion.setSpacingAfter(5f);                                                  document.add(paragraphTestPaperQuestion);                                                  String  imgpath ="";                         //图片保存的绝对路径 盘符 指定为 C盘                         String  imgpath1 ="C:";                         List<String> imageString = getImgPathListByName(questionName);                         //截取图片地址后将 正则匹配后的内容返回给 questionName                         questionName = questionNameByReplace;                         Iterator<String> iterator = imageString.iterator();                         int b = 1;                         while (iterator.hasNext()) {                             imgpath = (String) iterator.next();                             /* 测试添加一张图片 */                             Image img = Image.getInstance(imgpath1+imgpath);                              //img.scaleAbsolute(60, 60);// 直接设定显示尺寸                              //img.setAlignment(Image.LEFT);// 设置图片显示位置                              //img.scaleAbsolute(60, 60);// 直接设定显示尺寸                              img.scalePercent(100);//表示显示的大小为原尺寸的50%                              //img.scalePercent(25, 12);//图像高宽的显示比例                              document.add(img);                              Paragraph paragraphTestPaperQuestion1 = new Paragraph("<"+ b +">",fontChinese2);                              document.add(paragraphTestPaperQuestion1);                              b++;                         }                                          //判断是否是单选题、多选题                     if (question.getTx().equals("识图题") || question.getTx().equals("多选题") || question.getTx().equals("单选题")|| question.getTx().equals("计算题")) {                                                  String[] optionArray = question.getOptions().split("\$;\$");                                                  //依次得到每个选项                         for (int k = 0; k < optionArray.length; k++){                             //选项中的图片未显示
//待完善                             option = option + StringUtil.numberToString(k) + ".  " +  optionArray[k] + ";  ";                         }                                                  //将选项加入                         Paragraph paragraphTestPaperQuestionOption = new Paragraph(option,fontChinese2);                                                  //设置段前间距                         paragraphTestPaperQuestionOption.setSpacingBefore(10f);                                                  //设置段后间距                         paragraphTestPaperQuestionOption.setSpacingAfter(5f);                                                  document.add(paragraphTestPaperQuestionOption);                                                  //将选项清空,以备下一题使用                         option = "";                         

                    }                                                  anwer = "标准答案: ";                                                  //判断是否为判断题                         if (question.getTx().equals("判断题")){                                                          //如果答案为B则为错,否则为对                             if (question.getAnswer().equals("B")){                                                                  anwer = anwer + "错";                             }                                                          if (question.getAnswer().equals("A")){                                                                  anwer = anwer + "对";                             }                                                          //如果是案例分析题  将标准答案隐藏                         }else if(question.getTx().equals("案例分析题")){                             anwer = "";                             //其它题型直接显示答案                         }else{                                                          anwer = anwer + question.getAnswer();                         }                                                  Paragraph paragraphAnwer = new Paragraph(anwer,fontChinese3);                                                  //设置段前间距                         paragraphAnwer.setSpacingBefore(10f);                                                  //设置段后间距                         paragraphAnwer.setSpacingAfter(5f);                                                  document.add(paragraphAnwer);                                                  //将答案清空,以备下一题使用                         anwer = "";                 }                                  //每个题型之间空一行                 document.add(new Paragraph(""));                                  //将题号清零,以备下一题型重新排号                 j = 0;                 i++;                        }catch (Exception e) {                          e.printStackTrace();         }                  //关闭对象流         document.close();

        return null;     }      /**      通过正则表达式截取图片的路径       * imgpath 提取前的内容      * @return 图片地址的集合      /     public static List<String> getImgPathListByName(String imgpath){         List<String> list = new ArrayList<String>();         String[] imageString = null;                  //正则表达式  截取 <img >中间的内容         String  regstr = "<img[^<]>";         Pattern pt = Pattern.compile(regstr);         Matcher matcher = pt.matcher(imgpath);                  while(matcher.find())         {              //得到双引号之间的内容           String  regstr1 = "/[^"]"";           String  img = matcher.group();           Pattern pt1 = Pattern.compile(regstr1);           Matcher ma = pt1.matcher(img);           while(ma.find())             {               img = ma.group();               imageString = img.split(""");               for (int i = 0; i < imageString.length; i++) {                   list.add(imageString[i]);               }             }         }              return list;     }

© 著作权归作者所有

自由_自在
粉丝 0
博文 7
码字总数 3955
作品 0
昌平
程序员
私信 提问
FreemarkerJavaDemo【Android将表单数据生成Word文档的方案之一(基于freemarker2.3.28,只能java生成)】

版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个方案只能在java中运行,无法在Android项目中运行。所以此方案是:APP将表单数据发送给后台,后台通过freemarker将表单数据根...

HaiyuKing
04/26
0
0
java 实现html 转word,需要css,图片等正常显示

哪位大神做过java转html转word,能够正常显示css,图片,自己查了很多资料了,也试过很多demo,基本上都是图片显示不了,css有问题。望有大神指教,谢谢啦

我和夏天有个约会
2017/11/27
518
4
PageOffice,word常用接口对象--Shape类

Shape类用来读取Word中的图形、图片,一个Shape对象代表Word中的一个图片。 Shape类所属命名空间 Java开发时命名空间为:com.zhuozhengsoft.pageoffice.wordreader ASP.NET开发时命名空间为:...

山里的红杏
2018/09/10
0
0
小帅一点资讯版本更新,增加图片转字符图片功能

Java语言实现图片转字符图片 功能需要用到的工具类代码 https://gitee.com/xshuai/ai/blob/master/AIDemo/src/main/java/com/xs/util/image/AnimatedGifEncoder.java https://gitee.com/xsh......

小帅帅丶
2018/08/15
912
6
聊聊并发(二)Java SE1.6中的Synchronized

在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1....

陶邦仁
2015/03/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节,文字检测的主要目标是将图片中的文字区域位置检测出来,以便于进行后面的文字识别,只有找到了文本所在区域,才能对其内容进行识别。 文字检...

雪饼
今天
5
0
思维导图XMind 8 Pro 绿化方法(附序列号)

按部就班: Step 1 -全新下载最新版本的 Xmind 8(注必须是英文官方的版本,中文代{过}{滤}理网站的版本修改过,无法使用pj); Step 2 -安装完毕后,点击文末的下载按钮下载pj补丁文件包,将...

一只小青蛙
今天
10
0
数据结构(ER数据库)设计规范

表命名规范 表命名的规则分为3个层级,层级之间通过_分割,例如b_r_identity、d_l_identity。规约为: [leavel]_[type]_[name] [leavel] 表示数据库表的层级和功能,分为: s:业务无关的系统...

随风溜达的向日葵
今天
5
0
阿里Sentinel控制台源码修改-对接Apollo规则持久化

https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel 动态规则扩展 https://github.com/alibaba/Sentinel/wiki......

jxlgzwh
昨天
7
0
在Linux系统中创建SSH服务器别名

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地...

老孟的Linux私房菜
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部