`
czyeclipse
  • 浏览: 1942 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java使用xml方法创建word

阅读更多
最近因为客户的要求,需要做一个关于项目具体信息导出到word的功能。java处理word已经存在很多种方法了,但是用起来都不是那么方便,而且不太灵活,而使用xml的方法可以做到非常灵活,你可以先建好模板,然后往里面填数,模板怎么建,填出来的效果就是怎么样的。首先说说word和xml的关系,每个word它都对应着一个xml文件,也就是说你修改了xml,对应的word文件也就跟着修改了。通过word的保存功能可以将一个word文件保存为xml文件,该文件虽然是.xml格式的,但是直接双击打开的话还是使用word打开,所以你只能用txt将它打开,用txt打开之后将里面的一句话:<?mso-application progid="Word.Document"?>去掉,然后保存,接着就可以双击直接打开了,这样使用的就是IE打开的,你这样就可以查看里面的节点具体的构造。

最上面的主节点是<w:wordDocument>(如果不是的话,相信你将word文件保存成xml的时候使用的是07word,选择的是:word xml文档(*.xml),你可以选择word 2003 xml文档(*.xml)试试);该主节点下面有大致8个节点,其中我们要操作的就是<w:body>节点,该节点是word的正文节点,其他的节点没有去研究;<w:body>下面包含的节点可能会有:<w:p>段落节点、<w:tbl>表格节点。

接着要做的就是在java程序中,使用dom来解析编辑xml文件,这里贴出一些代码来供大家参考:

public Document loadXML(String filename){//////////加载xml文件

Document document = null;

   try{

   DocumentBuilderFactory   factory = DocumentBuilderFactory.newInstance();   

       DocumentBuilder builder=factory.newDocumentBuilder();   

       document=builder.parse(new File(filename));   

       document.normalize();

   }catch (Exception ex){

       ex.printStackTrace();

   }  

   return document;

}

public boolean doc2XmlFile(Document document,File targetFile){ ///////回写xml文件

boolean flag = true;

   try{

   TransformerFactory tFactory = TransformerFactory.newInstance();   

       Transformer transformer = tFactory.newTransformer(); 

       DOMSource source = new DOMSource(document); 

       StreamResult result = new StreamResult(targetFile.toURI().getPath());

       transformer.transform(source, result); 

   }catch(Exception ex){

       flag = false;

       ex.printStackTrace();

   }

   return flag;      

}

String void function(){///////////程序入口

String rootPath=ServletActionContext.getServletContext().getRealPath("/excelTemplate")+"\\";

try{

Document document=loadXML(rootPath+"projectModel.xml");

Element root = document.getDocumentElement();

NodeList rootList=root.getChildNodes();

Node bodyNode=null;///////w:body

for(int i=0;i<rootList.getLength();i++){////////找到<w:body>节点

bodyNode=rootList.item(i);

if("w:body".equals(bodyNode.getNodeName())){

break;

}

}

NodeList nodeList=bodyNode.getChildNodes();

for(int i=0;i<nodeList.getLength();i++){

Node node=nodeList.item(i);

if("w:tbl".equals(node.getNodeName())){

dealWithTableNode(document,node);

}else if("w:p".equals(node.getNodeName())){

dealWithWPNode(document,node);

}


}

File destFile = File.createTempFile("project", ".xml");

doc2XmlFile(document,destFile);///////回写

inputStream = new FileInputStream(destFile);/////////生成流,用于下载

fileName=URLEncoder.encode(project.getProjectName(),"utf-8")+".doc";

}catch(Exception e){

e.printStackTrace();

}

}

注意:

1、在解析编辑xml文件的时候一定好看好节点的位置,比如一般的文本内容的话可能是在<w:p>节点下的<w:r>节点下的<w:t>里设置,使用的是getTextContent()方法来获取它的内容,setTextContent()来设置它的参数

2、对于图片如何插入呢?首先最好在模板中插入一张图片,主要用于定下图片的那些格式,然后图片必须用java转成base64的字符串,这里也提供一个方法:

private String toBASE64codeFile(File file){

String codeString="";

try{

FileInputStream fis=new FileInputStream(file);

BASE64Encoder encoder=new BASE64Encoder();

byte[] b=new byte[228];

int count=-1,n=0;

while((count=fis.read(b))!=-1){

codeString+=encoder.encode(b);

}

return codeString;

}catch(Exception e){

e.printStackTrace();

return "";

}

}

然后找到<w:pict>节点:一般如果图片是在table里的话,该节点就是在<w:tbl>-<w:tr>-<w:tc>-<w:p>-<w:r>节点下面,不在table里的话就是:<w:p>-<w:r>,建议仿照用IE打开的xml对照一下。然后将该节点下的<w:binData>的内容置成你所要插入的图片的base64码即可。
分享到:
评论

相关推荐

    Java实现XML文档到word文档转换

    ### Java实现XML文档到Word文档转换的关键技术及实践 #### XML简介与应用 XML(Extensible Markup Language,可扩展标记语言)是一种标记语言,旨在定义一套规则,通过这些规则将文档划分为多个部分并对其进行标记...

    java XML解析方式实现自动生成word文档

    本篇文章将详细探讨如何利用Java和XML解析来自动化创建Word文档。 首先,我们需要了解XML的结构。XML(Extensible Markup Language)是一种标记语言,它允许我们以结构化的方式存储数据。在生成Word文档时,我们...

    java通过xml导出word和excell例子

    总的来说,Java通过XML导出Word和Excel是一种灵活且可扩展的方法,它允许开发人员以结构化的方式处理数据,便于数据交换和跨平台兼容。通过Apache POI和其他相关库,开发者能够高效地生成和导出符合特定需求的文档。

    java 使用POI合并两个word文档.docx

    在 appendBody 方法中,我们可以看到,使用 XmlOptions 对象设置了保存选项,然后使用 xmlText 方法将第二个文档的内容转换为字符串,最后将其追加到第一个文档中。 Java 使用 POI 合并两个 Word 文档的优点是: *...

    Java使用POI导出Word文档

    总之,使用Apache POI库,Java开发者可以轻松地创建和编辑Word文档,实现数据的自动化导出,提高工作效率。只要理解了基本的API用法和文档结构,就可以构建出功能丰富的Word文档生成工具。在开发过程中,记得时常...

    Java通过word编辑为xml和ftl格式的模板创建导出word文档 .zip

    这个压缩包“Java通过word编辑为xml和ftl格式的模板创建导出word文档 .zip”提供了一个示例项目,用于演示如何使用Java编程语言来操作Word文档,并将其内容转化为XML和FTL(FreeMarker)模板格式。以下将详细介绍这...

    word to pdf word xml to pdf

    4. **编程实现**:开发者也可以通过编程方式实现XML到PDF的转换,例如使用Java的Apache XMLgraphics库,或者.NET框架下的ITextSharp库。 在实际操作中,转换过程可能会涉及到数据格式的匹配、样式表的编写和调试,...

    java使用word模板导出个人简历

    然后,创建一个Freemarker配置对象,加载模板文件,设置数据模型,最后使用`Template.process()`方法将数据模型应用到模板上,生成最终的Word文档。 5. **Java代码示例**: - 加载模板:`Template template = ...

    java 解析xml 自动生成word (小程序与java交互).zip

    通过这个库,我们可以创建Word文档,设置样式,插入文本、图片等,以满足自动生成Word文档的需求。 综上所述,本项目综合运用了多种Java技术,实现了从XML数据的解析到Word文档的生成,以及通过JSON数据在小程序与...

    java操作word xml dll文件

    在Java编程环境中,操作Word、XML以及DLL文件涉及多个技术和库。...以上知识覆盖了Java开发中处理Word、XML和DLL文件的基本概念和技术,但具体实现还需要根据实际情况选择合适的库和方法,并进行相应的编程实践。

    Java根据word 模板,生成自定义内容的word 文件

    1. **创建Word模板**:使用Microsoft Word创建一个模板文件,其中包含固定的格式和需要替换的动态内容。这些动态内容可以是文本、表格或者段落,用特定的标记(如${})作为占位符。 2. **配置Freemarker**:在Java...

    在Word 2007中创建XML文档

    在Word 2007中创建XML文档是一个过程,它涉及到理解XML的基本概念以及Word 2007中处理XML的新方法。XML,全称eXtensible Markup Language,是一种用于标记数据的语言,允许用户自定义标签来组织和结构化信息。在Word...

    java使用poi根据word模板生成word(图片及文字).zip

    2. **Word模板**:在Java程序中,你可以创建一个Word模板,其中包含一些预定义的占位符或标签,如"{xxxx}"。这些标签将被你的代码中的实际数据替换。模板文件可以包含文本、格式化元素、图片等,提供了一种灵活的...

    java POI生成word.zip

    - 创建Word文档的基本过程包括设置样式、创建段落、插入文本、图像和表格等。 - 首先,你需要导入必要的POI库,例如`org.apache.poi.xwpf.usermodel.*`。 - 然后,创建一个`XWPFDocument`对象作为Word文档的容器...

    java根据模版生成带图片的word文档

    在我们的案例中,我们可以创建一个Word文档的.xml模板,然后使用Freemarker的语法插入动态数据和图片。 在Freemarker模板中,我们可以使用类似于`${expression}`的语法来插入变量,其中`expression`是你想要插入的...

    JAVA根据数据库表生成word表格文档

    现在,你可以使用Apache POI创建Word文档并填充表格。首先,创建一个`XWPFDocument`对象,然后创建一个`XWPFTable`,设置列数,接着逐行添加数据: ```java import org.apache.poi.xwpf.usermodel.*; XWPFDocument...

    java和xml学生通讯录

    5. **Java GUI(图形用户界面)**:为了与用户进行交互,这个学生通讯录可能使用了Java的Swing或JavaFX库来创建窗口、按钮、文本框等元素,让用户能够输入、查看和管理联系人信息。 6. **事件处理**:在GUI中,当...

    java将html文件生成word文件

    3. **创建Word文档对象**:使用docx4j创建一个新的WordProcessingMLPackage对象,这是docx文件的基础。 4. **导入HTML**:docx4j提供了PlutoConverter类来处理HTML转换。调用其convert方法,传入HTML字符串和Word...

    xml转换导出Word

    3. **iText**:这是一个Java库,专门用于创建和修改PDF文档,但也可以用于生成Word文档。iText提供了一系列API,使得开发者能够构建复杂的文档结构,如段落、表格、列表等。在这个工具中,iText可能被用来构造Word...

    Java语言后台生成word图表

    本篇文章将深入探讨如何使用Java和Apache POI库来创建包含图表的Word文档。 首先,了解Apache POI的基本用法。Apache POI提供了XWPF(XML Word Processing)API,用于处理.docx格式的Word文档。你需要添加Apache ...

Global site tag (gtag.js) - Google Analytics