Java 使用Freemarker导出word 文档,解决当一段内容中既有文字又有图片的问题
2017-03-08 15:29
1056 查看
如有对不了解的朋友请看我的上一篇博客
http://blog.csdn.net/you_are_my_life/article/details/60872786
详细的我不多说直接上代码,希望对大家有帮组,毕竟我被这个问题难了很久,百度得到的都是不是很清楚的实例
代码
其中的为单个文字的格式
这个为单个图片的格式
这个是导出图片需要在上面添加的地方,具体看截图
这个是导出图片需要在下面面添加的地方,具体看截图
http://blog.csdn.net/you_are_my_life/article/details/60872786
详细的我不多说直接上代码,希望对大家有帮组,毕竟我被这个问题难了很久,百度得到的都是不是很清楚的实例
代码
package com.ty.test; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.codec.binary.Base64; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import freemarker.template.TemplateExceptionHandler; public class ExprotWord { private Configuration configuration = null; private static int i = 9; public ExprotWord() { configuration = new Configuration(); configuration.setDefaultEncoding("UTF-8"); } public static void main(String[] args) throws Exception { ExprotWord test = new ExprotWord(); Map<String, Object> dataMap = new HashMap<String, Object>(); test.getData(dataMap); test.createWord(dataMap); // Thread.sleep(1000*30); } public void createWord(Map<String, Object> dataMap) throws Exception { // Map<String,Object> dataMap=new HashMap<String,Object>(); // getData(dataMap); configuration.setClassForTemplateLoading(this.getClass(), "/com/ty/test"); // FTL文件所存在的位置 configuration.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER); Template t = null; try { t = configuration.getTemplate("demo55.ftl"); // 文件名 } catch (IOException e) { e.printStackTrace(); } File outFile = new File("G:/outFiles" + Math.random() * 10000 + ".doc"); Writer out = null; try { out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8")); // 必须加 "utf-8" 不然在 UserInfoRestController 通过webservice的方式调用 生成的文件 打开 // 不了,会报错(而当做java程序去运行,则没有"utf-8"生成的文件也能正常打开的),原因不详 // 规范编写应该是要加上文件的编码的"utf-8" } catch (Exception e1) { e1.printStackTrace(); } try { t.process(dataMap, out); out.close(); } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void getData(Map<String, Object> dataMap) { // 实体类 dataMap.put("name", "小明"); dataMap.put("birthday", "1988.06.02"); dataMap.put("picture", getImageStr()); String aa = "Commerce Jhu常充分。</br> <img src = \"a1.jpg\" class = \"pic\"/>最终,目标人物帮助A与债主达成协议,</br>要求A变卖部分资产、收紧预"; Expro ex = Imageone(nomination); dataMap.put("imageon" + ex.getIi(), ex.getImageon()); dataMap.put("nameon" + ex.getIi(), ex.getNameon()); dataMap.put("imagecenter" + ex.getIi(), ex.getImagecenter()); dataMap.put("nametwo" + ex.getIi(), ex.getNametwo()); dataMap.put("imagetop" + ex.getIi(), ex.getImagetop()); } private String getImageStr() { String imgFile = "G:\\Users\\a1.jpg"; InputStream in = null; byte[] data = null; try { in = new FileInputStream(imgFile); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } String imageCodeBase64 = Base64.encodeBase64String(data); return imageCodeBase64; } private String getImageStrone() { String imgFile = "G:\\Users\\9.jpg"; InputStream in = null; byte[] data = null; try { in = new FileInputStream(imgFile); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } // BASE64Encoder encoder = new BASE64Encoder(); // return encoder.encode(data); // return data != null ? encoder.encode(data) : ""; // System.out.println(new String(data)); String imageCodeBase64 = Base64.encodeBase64String(data); return imageCodeBase64; } public Expro Imageone(String no) { String startname = no.replaceAll("</br>", ""); // 根据<img标签进行分割成两个字符串 String startone[] = startname.split("<img"); System.out.println(startone.length); String onename = startone[0]; String a2; String imagename = null; String imageone = null; if (startone.length != 1) { a2 = startone[1]; // 获取到图片的路径,根据标签/>切割字符串 String b[] = a2.split("/>"); String b1 = b[0]; // 图片后面的文字 imageone = b[1]; // 图片名字 imagename = b1.substring(9, b1.length() - 15); System.out.println(imageone); System.out.println(imagename); } // 图片前面的文字 String onenametwo = onename.substring(0, onename.length() - 0); System.out.println(onenametwo); if (imagename != null) { // 图片的格式 i++; String imagecenter = "" + "<w:r w:rsidR=\"00937E93\">" + "<w:rPr>" + "<w:noProof/><w:sz w:val=\"36\"/><w:szCs w:val=\"36\"/>" + "</w:rPr>" + "<w:drawing>" + "<wp:inline distT=\"0\" distB=\"0\" distL=\"0\" distR=\"0\">" + "<wp:extent cx=\"1257300\" cy=\"1114425\"/>" + "<wp:effectExtent l=\"19050\" t=\"0\" r=\"0\" b=\"0\"/>" + "<wp:docPr id=\"2\" name=\"图片 2\" descr=\"G:\\Users\\a1.jpg\"/>" + "<wp:cNvGraphicFramePr><a:graphicFrameLocks noChangeAspect=\"1\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"/>" + "</wp:cNvGraphicFramePr>" + "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">" + "<a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" + "<pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">" + "<pic:nvPicPr><pic:cNvPr id=\"0\" name=\"Picture 1\" descr=\"G:\\Users\\a1.jpg\"/>" + "<pic:cNvPicPr><a:picLocks noChangeAspect=\"1\" noChangeArrowheads=\"1\"/>" + "</pic:cNvPicPr>" + "</pic:nvPicPr>" + "<pic:blipFill>" + "<a:blip r:embed=\"rId" + i + "\" cstate=\"print\"/>" + "<a:srcRect/>" + "<a:stretch><a:fillRect/></a:stretch>" + "</pic:blipFill>" + "<pic:spPr bwMode=\"auto\">" + "<a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"1257300\" cy=\"1114425\"/></a:xfrm>" + "<a:prstGeom prst=\"rect\"><a:avLst/></a:prstGeom><a:noFill/>" + "<a:ln w=\"9525\"><a:noFill/><a:miter lim=\"800000\"/><a:headEnd/><a:tailEnd/></a:ln>" + "</pic:spPr></pic:pic></a:graphicData></a:graphic></wp:inline></w:drawing></w:r>"; String imageon = "<Relationship Id=\"" + "rId" + i + "\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"media/image." + i + "\"/>"; String imagetop = "<pkg:part pkg:name=\"/word/media/image." + i + "\" pkg:contentType=\"image/" + i + "\" pkg:compression=\"store\"><pkg:binaryData>" + getImageStrone() + "</pkg:binaryData></pkg:part>"; String nametwo = "<w:r><w:rPr><w:rFonts w:hint=\"eastAsia\"/><w:noProof/><w:sz w:val=\"28\"/><w:szCs w:val=\"28\"/></w:rPr><w:t>" + imageone + "</w:t></w:r></w:p>"; // 文字的格式 String nameon = "<w:p w:rsidR=\"009A78FF\" w:rsidRPr=\"00571EF2\" w:rsidRDefault=\"009A78FF\" w:rsidP=\"009A78FF\"><w:pPr>" + "<w:jc w:val=\"left\"/><w:rPr><w:sz w:val=\"28\"/><w:szCs w:val=\"28\"/></w:rPr></w:pPr><w:r w:rsidRPr=\"00571EF2\">" + "<w:rPr><w:rFonts w:hint=\"eastAsia\"/><w:sz w:val=\"28\"/><w:szCs w:val=\"28\"/></w:rPr><w:t>" + onename + "</w:t></w:r>"; Expro expro = new Expro(); expro.setIi(i); expro.setImageon(imageon); expro.setNameon(nameon); expro.setImagecenter(imagecenter); expro.setNametwo(nametwo); expro.setImagetop(imagetop); return expro; } else { // 文字的格式 String nam c7cd eon = "<w:p w:rsidR=\"009A78FF\" w:rsidRPr=\"00571EF2\" w:rsidRDefault=\"009A78FF\" w:rsidP=\"009A78FF\"><w:pPr>" + "<w:jc w:val=\"left\"/><w:rPr><w:sz w:val=\"28\"/><w:szCs w:val=\"28\"/></w:rPr></w:pPr><w:r w:rsidRPr=\"00571EF2\">" + "<w:rPr><w:rFonts w:hint=\"eastAsia\"/><w:sz w:val=\"28\"/><w:szCs w:val=\"28\"/></w:rPr><w:t>" + onename + "</w:t></w:r></w:p>"; String nametwo = ""; String imagetop = ""; String imageon = ""; String imagecenter = ""; Expro expro = new Expro(); expro.setImageon(imageon); expro.setNameon(nameon); expro.setImagecenter(imagecenter); expro.setNametwo(nametwo); expro.setImagetop(imagetop); return expro; } } }
其中的为单个文字的格式
<w:p w:rsidR=\"009A78FF\" w:rsidRPr=\"00571EF2\" w:rsidRDefault=\"009A78FF\" w:rsidP=\"009A78FF\"><w:pPr>" + "<w:jc w:val=\"left\"/><w:rPr><w:sz w:val=\"28\"/><w:szCs w:val=\"28\"/></w:rPr></w:pPr><w:r w:rsidRPr=\"00571EF2\">" + "<w:rPr><w:rFonts w:hint=\"eastAsia\"/><w:sz w:val=\"28\"/><w:szCs w:val=\"28\"/></w:rPr><w:t>" + onename + "</w:t></w:r>
这个为单个图片的格式
<pkg:part pkg:name=\"/word/media/image." + i + "\" pkg:contentType=\"image/" + i + "\" pkg:compression=\"store\"><pkg:binaryData>" + getImageStrone() + "</pkg:binaryData></pkg:part>
这个是导出图片需要在上面添加的地方,具体看截图
<Relationship Id=\"" + "rId" + i + "\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"media/image." + i + "\"/>
这个是导出图片需要在下面面添加的地方,具体看截图
<pkg:part pkg:name=\"/word/media/image." + i + "\" pkg:contentType=\"image/" + i + "\" pkg:compression=\"store\"><pkg:binaryData>" + getImageStrone() + "</pkg:binaryData></pkg:part>
相关文章推荐
- Java用freemarker导出word 内容为空的问题解决
- Java使用freemarker导出word文档
- 使用freemarker导出word文档包含多张图片
- java使用freemarker模板导出word(带有合并单元格)文档
- 解决java中html转word文档,转成功后的word文档在断网情况下无法显示图片问题
- java中使用freemarker导出word文档
- java 使用freemarker 导出word 和图片
- Java 用Freemarker完美导出word文档(带图片)
- Java实现用Freemarker完美导出word文档(带图片)
- JAVA Freemarker 导出word文档实例带有图片
- Android 将Activity打成jar包 供第三方使用 彻底解决XML 图片 文字资源不可打入到jar包的问题!
- FreeMarker导出word文件,\n换行无效的问题解决记录
- java使用freemarker生成word文档
- 解决MindManager 导出Word文档失败的问题
- 沫沫金:使用Java模版引擎FreeMarker生成复杂的Word文档
- java通过url在线预览Word、excel、ppt、pdf、txt文档中的内容【只获得其中的文字】
- 使用CSS解决文字环绕图片问题的代码
- java用freemarker导出word的问题
- 使用JasperReports合并多个报表的word文档问题解决方法
- 使用Office自动的软件将图片中的文字信息转换成word文档