使用xml模板生成word文档
生活随笔
收集整理的這篇文章主要介紹了
使用xml模板生成word文档
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、新建一個docx格式的word文檔
2、編寫模板內容,調整模板格式,將需要替換的內容用freemark語言標記,例如${content}
3、復制一份docx模板文件,修改擴展名為zip,解壓文件,把word目錄下document.xml文件復制出來
4、修改document.xml文件名和docx模板文件名一致,放入模板目錄(2個文件都需要)
?
5、用編輯器把xml代碼格式化,檢查需要替換的數據參數是否顯示正常
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:wpsCustomData="http://www.wps.cn/officeDocument/2013/wpsCustomData" mc:Ignorable="w14 w15 wp14"><w:body><w:p><w:pPr><w:rPr><w:rFonts w:hint="eastAsia" /><w:lang w:val="en-US" w:eastAsia="zh-Hans" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="eastAsia" /><w:lang w:val="en-US" w:eastAsia="zh-Hans" /></w:rPr><w:t>word模板</w:t></w:r></w:p><w:p><w:pPr><w:rPr><w:rFonts w:hint="eastAsia" /><w:lang w:val="en-US" w:eastAsia="zh-Hans" /></w:rPr></w:pPr></w:p><w:p><w:pPr><w:rPr><w:rFonts w:hint="eastAsia" /><w:lang w:val="en-US" w:eastAsia="zh-Hans" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="eastAsia" /><w:lang w:val="en-US" w:eastAsia="zh-Hans" /></w:rPr><w:t>內容</w:t></w:r><w:r><w:rPr><w:rFonts w:hint="default" /><w:lang w:eastAsia="zh-Hans" /></w:rPr><w:t>:</w:t></w:r></w:p><w:p><w:pPr><w:rPr><w:rFonts w:hint="default" /><w:lang w:eastAsia="zh-Hans" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="default" /><w:lang w:eastAsia="zh-Hans" /></w:rPr><w:t>${content}</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack" /><w:bookmarkEnd w:id="0" /></w:p><w:p><w:pPr><w:rPr><w:rFonts w:hint="eastAsia" /><w:lang w:val="en-US" w:eastAsia="zh-Hans" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="eastAsia" /><w:lang w:val="en-US" w:eastAsia="zh-Hans" /></w:rPr><w:t>結束</w:t></w:r><w:r><w:rPr><w:rFonts w:hint="default" /><w:lang w:eastAsia="zh-Hans" /></w:rPr><w:t>。</w:t></w:r></w:p><w:sectPr><w:pgSz w:w="11906" w:h="16838" /><w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="851" w:footer="992" w:gutter="0" /><w:cols w:space="425" w:num="1" /><w:docGrid w:type="lines" w:linePitch="312" w:charSpace="0" /></w:sectPr></w:body> </w:document>6、轉化方法
import java.io.*; import java.util.Enumeration; import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; import freemarker.template.Configuration; import freemarker.template.Template;public class XmlToWord {/*** xml轉word* @param templatePath 模板目錄* @param templateName 模板名稱,不帶擴展名* @param targetPath 目標文件目錄* @param targetName 目標文件名稱,不帶擴展名* @param dataMap 替換數據*/public static void xmlToWord(String templatePath, String templateName, String targetPath, String targetName, Map<String,Object> dataMap){try {Configuration configuration = new Configuration();configuration.setDefaultEncoding("UTF-8");//.xml 模板文件所在目錄configuration.setDirectoryForTemplateLoading(new File(templatePath));// 輸出文檔路徑及名稱 臨時文件String tempXmlFilePath = targetPath + "/" + targetName + "_temp.xml";File outTempFile = new File(tempXmlFilePath);if(!outTempFile.exists()){File dirFile =new File(outTempFile.getParent());if(!dirFile.exists()||!dirFile.isDirectory()){dirFile.mkdirs();}}// 以utf-8的編碼讀取模板文件String xmlName = templateName + ".xml";Template t = configuration.getTemplate(xmlName,"UTF-8");Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outTempFile), "UTF-8"),10240);t.process(dataMap, out);out.close();File file = new File(tempXmlFilePath);String templateWordPath = templatePath + "/" + templateName + ".docx";File docxFile = new File(templateWordPath);ZipFile zipFile = new ZipFile(docxFile);Enumeration<? extends ZipEntry> zipEntrys = zipFile.entries();ZipOutputStream zipout = new ZipOutputStream(new FileOutputStream(targetPath + "/" + targetName + ".docx"));int len = -1;byte[] buffer = new byte[1024];while (zipEntrys.hasMoreElements()) {ZipEntry next = zipEntrys.nextElement();InputStream is = zipFile.getInputStream(next);// 把輸入流的文件傳到輸出流中 如果是word/document.xml由我們輸入zipout.putNextEntry(new ZipEntry(next.toString()));if ("word/document.xml".equals(next.toString())) {InputStream in = new FileInputStream(file);while ((len = in.read(buffer)) != -1) {zipout.write(buffer, 0, len);}in.close();} else {while ((len = is.read(buffer)) != -1) {zipout.write(buffer, 0, len);}is.close();}}zipout.close();//刪除臨時文件file.delete();System.out.println("生成成功");}catch (Exception e){e.printStackTrace();System.out.println("生成失敗"+e.getMessage());}}}END
總結
以上是生活随笔為你收集整理的使用xml模板生成word文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RFID仓储管理系统解决方案实施可视化流
- 下一篇: java通达信交易接口源码分享