`
ourteam
  • 浏览: 132377 次
  • 性别: 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码即可。

分享到:
评论
3 楼 贝塔ZQ 2016-09-19  
java实现编辑word文档,网上百度插件用啦,很方便的,PageOffice插件就是专门操作office文档的
2 楼 xiaomanjingxmj 2012-12-27  
楼主可不可以把xml文件给出,我自己按照你给的解析出来看不懂咯。
1 楼 kookob 2011-06-09  
兄弟,能把引入的包一起贴出来吗?或者能提供代码参考下吗?非常感谢啊!

相关推荐

    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使用POI导出Word文档

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

    java 实现 word 文档的在线预览

    在Java开发中,实现Word文档的在线预览是一项常见的需求,尤其在企业级应用中,例如文档管理系统或者协同办公平台。这项功能可以让用户无需下载原始文件就能查看文档内容,提高工作效率并减少服务器存储压力。本资源...

    LibreOffice:java 预览Excel、java预览word、java预览DOCX

    LibreOffice是一款开源的办公软件套件,它包含多种组件,如Writer(文字处理)、Calc(电子表格)、Impress(演示文稿)等,能够创建、编辑和转换各种文档格式,包括Microsoft Office的DOCX、XLSX和PPTX等。在Java...

    Java 和 XML 建立试题库管理 系统

    当前,很多试题库管理系统使用Word软件进行公式和图形的编辑。这种方式存在明显的局限性:平台依赖性强、成本高昂以及使用专有技术等问题。Java作为一种跨平台的编程语言,能够克服这些问题。XML作为开放标准,在...

    XML实用教程word版

    如XML编辑器(如Notepad++)、XML验证器(如XMLStarlet)和XML处理器(如Java的JAXB框架)等,都是XML开发中常用的工具。 本"XML实用教程Word版"将详细讲解以上内容,帮助读者从基础到实践,全面掌握XML的相关知识...

    java实现word预览打印

    3. **动态生成模板Word文件**: 这个过程通常涉及到使用Java库,如Apache POI或Spire.Doc,来创建和编辑Microsoft Word文档。开发者可以通过这些库读取、修改和生成Word模板,填充数据,自动化文档的生成过程。 4. *...

    Java html转word 使用FreeMarker

    这个标题“Java html转word 使用FreeMarker”暗示了一个Java项目,它利用FreeMarker模板引擎来实现HTML到Word的转换。 FreeMarker是一个开源的Java库,主要用于生成动态生成的Web页面或其他类型的文本输出,如电子...

    java2word程序代码及jar包

    通过这个库,开发者可以避免直接处理复杂的COM接口,而是使用Java API来创建和编辑Word文档。它支持添加文本、图片、表格、列表、页眉、页脚等元素,并且可以自定义样式,实现高度定制化的文档生成。 使用Java2Word...

    JAVA 导出WORD

    这个项目可能包括了构建文件(如pom.xml)、源代码文件(如JavaWord.java)以及其他必要的配置。 标签中的"java导出word文档"、"jacob word导出"和"word导出图"暗示了这个项目可能还涵盖了在Word文档中插入图片的...

    word文件批量替换(word转xml、xml转字符串、doc转docx)

    将Word文档转换为XML,我们可以更方便地查看和编辑其内部结构,如段落、样式、表格和图像等。这通常通过编程方式实现,例如使用Microsoft Office的Open XML SDK或者Python的python-docx库。转换后的XML文件可以使用...

    java中html转word方法以及用到的jar包

    在Java开发中,有时我们需要将HTML内容转换成Word文档,以便于阅读、编辑或打印。这个过程涉及到HTML解析、格式转换以及可能的图像处理。在本文中,我们将深入探讨如何在Java中实现这一功能,以及需要用到的关键库和...

    java操作word(包含书签插值)

    本文将详细讲解如何使用Java操作Word,特别是针对书签插值的方法,以及相关的技术和工具。 1. **Java操作Word的基本原理** Java操作Word主要依赖于第三方库,如Apache POI和JACOB。Apache POI是一个用于读写...

    JAVA不使用POI,用PageOffice动态导出Word文档[参考].pdf

    这时,PageOffice提供了一种更高效、更便捷的解决方案,尤其适用于动态创建和编辑Word文档。 PageOffice是一款由 Zhuozhengsoft 公司开发的Java控件,它可以直接在服务器端操作Word、Excel、PDF等Office文档,无需...

    用Java代码把数据导入Word的指定位置

    总的来说,Java结合Apache POI库为处理Word文档提供了强大的工具,使得在程序中动态生成和编辑Word文档成为可能,大大提高了工作效率。无论是简单的文本插入,还是复杂的表格和图像操作,都能通过编写Java代码轻松...

    在Word 2007中创建XML文档

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

    aspose-word+license.xml

    在IT行业中,生成和编辑Word文档是常见的任务,特别是在自动化报告、批量生成文档或模板化内容的场景下。`Freemarker`是一个流行的Java模板引擎,常用于动态生成HTML、XML或其他文本格式的文档,包括Microsoft Word...

    java操作Bfreemarker实现对word

    BFreeMarker与POI的结合使用,可以让开发者在不接触复杂低级API的情况下,利用模板来创建和编辑Word文档,提高开发效率和代码可读性。 以下是使用Java操作BFreeMarker和Apache POI实现Word处理的一些关键知识点: ...

Global site tag (gtag.js) - Google Analytics