`
wenm168
  • 浏览: 5515 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

基于WordML生成word文件的完美解决方案

阅读更多
生成Word文档的类库有很多,常用的有jacob,itext等等,Itext只能支持word的部分功能,itext-rtf-2.1.7.jar 没有持续更新,itext 不支持在word文档中显示位置图片指定X,Y值,不支持表格的单元格画图(如画单元格斜线)
WordML语法非常复杂,因为Word有非常多的功能,但可以根据使用场景去生成部分xml,可查询官方文档对wordML的元素定义,例如table,图片,浮动层文本、图片等。
一个类似浮动层文本基本的WordXML结构是如下:
</pre><pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument
xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:w10="urn:schemas-microsoft-com:office:word"
xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"
xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xml:space="preserve"><w:docPr><w:view w:val="print" />
</w:docPr><w:body><w:p><w:r><w:pict><v:shape
style="position:absolute;left:0;width:200;height:200;z-index:1"><v:textbox><w:txbxContent><w:p><w:r><w:rPr /><w:t>test</w:t>
</w:r>
</w:p>
</w:txbxContent>
</v:textbox>
</v:shape>
</w:pict>
</w:r>
</w:p><w:tbl><w:tblPr><w:tblW w:w="0" w:type="auto" />
</w:tblPr><w:tr><w:trPr><w:trHeight w:val="330.0" />
</w:trPr><w:tc><w:tcPr><w:tcW w:w="1650.0" w:type="dxa" /><w:tcBorders /><w:vAlign
w:val="center" />
</w:tcPr><w:p><w:pPr><w:jc w:val="left" />
</w:pPr><w:r><w:rPr><w:color w:val="000000" />
</w:rPr><w:t></w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</w:tbl><w:sectPr><w:pgSz w:w="11900.0" w:h="16840.0" /><w:pgMar
w:top="1440.0" w:right="1800.0" w:bottom="1440.0" w:left="1800.0"
w:header="851" w:footer="992" w:gutter="0" /><w:cols
w:space="452" /><w:docGrid w:type="lines"
w:line-pitch="312" />
</w:sectPr>
</w:body>
</w:wordDocument>

可以用记事本创建一个文件,将上面的XML内容粘贴,并保存为test.doc,则打开word会解析xml为doc文档。

Word命名空间如下:
public interface WordML {

Namespace NS_W = new Namespace("w", "http://schemas.microsoft.com/office/word/2003/wordml");
Namespace NS_V = new Namespace("v", "urn:schemas-microsoft-com:vml");
Namespace NS_W10 = new Namespace("w10", "urn:schemas-microsoft-com:office:word");
Namespace NS_SL = new Namespace("sl", "http://schemas.microsoft.com/schemaLibrary/2003/core");
Namespace NS_AML = new Namespace("aml", "http://schemas.microsoft.com/aml/2001/core");
Namespace NS_WX = new Namespace("wx", "http://schemas.microsoft.com/office/word/2003/auxHint");
Namespace NS_O = new Namespace("o", "urn:schemas-microsoft-com:office:office");
Namespace NS_DT = new Namespace("dt", "uuid:C2F41010-65B3-11d1-A29F-00AA00C14882");
}

WordML图片表示方法:
<w:pict>
  <w:binData w:name="wordml://3000001.png">
    Base64图片数据
  </w:binData>
   <v:shape style="position:absolute;left:0;width:400;height:300;z-index:1"><v:imagedata src="wordml://3000001.png" o:title="name"/>   </v:shape>
</w:pict>

Word 中table对应的xml元素:
Element tbl = new DefaultElement(new QName("tbl", WordML.NS_W));
Element tblPrE = tbl.addElement(new QName("tblPr", WordML.NS_W));
Element tblWE = tblPrE.addElement(new QName("tblW", WordML.NS_W));
tblWE.addAttribute(new QName("w", WordML.NS_W), "0").addAttribute(new QName("type", WordML.NS_W), "auto");

创建table中tr:
Element tr = new DefaultElement(new QName("tr", WordML.NS_W));
Element trPr = new DefaultElement(new QName("trPr", WordML.NS_W));
Element trHeight = trPr.addElement(new QName("trHeight", WordML.NS_W));
trHeight.addAttribute(new QName("val", WordML.NS_W), String.valueOf(height));

创建table中td,单元格合并:
Element tc = new DefaultElement(new QName("tc", WordML.NS_W));
        Element tcPr = tc.addElement(new QName("tcPr", WordML.NS_W));
        Element tcW = tcPr.addElement(new QName("tcW", WordML.NS_W));

        float width = cell.getWidth() * WordML.PTW_VALUE;
        tcW.addAttribute(new QName("w", WordML.NS_W), String.valueOf(width));
        tcW.addAttribute(new QName("type", WordML.NS_W), "dxa");

        Element tcBorders = tcPr.addElement(new QName("tcBorders", WordML.NS_W));
        appendTcBorders(tcBorders, cell);

        if (StringUtil.isNotEmpty(cell.getVerticalAlignment())) {
            Element vAlign = tcPr.addElement(new QName("vAlign", WordML.NS_W));
            vAlign.addAttribute(new QName("val", WordML.NS_W), cell.getVerticalAlignment());
        }

        if (cell.getBackgroundColor() != null) {
            tcPr.add(asShdXml(cell.getBackgroundColor()));
        }
        if (cell.getColSpan() > 1) {
            Element gridSpan = tcPr.addElement(new QName("gridSpan", WordML.NS_W));
            gridSpan.addAttribute(new QName("val", WordML.NS_W), String.valueOf(cell.getColSpan()));
        }
        if (cell.isRestart()) {
            tcPr.add(asVmergeXml(true));
        }
        if (cell.isVmerge()) {
            tcPr.add(asVmergeXml(false));
        }


原文出处:http://www.anyrt.com/blog/list/201609092011.html

分享到:
评论

相关推荐

    基于Java和WordML实现试题库试卷的自动生成.pdf

    试卷生成模块负责生成试卷的内容,试卷格式化模块负责将试卷内容格式化为WordML文档,试卷输出模块负责将生成的试卷输出到Word文档中。 WordML文档的结构 WordML文档是一种基于XML的文档格式,用于描述Word文档的...

    freemarker生成word文档

    如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可 以看到如下的一片base64编码后的代码: &lt;w:binData w:name="wordml://03000001.png" xml:space="preserve"&gt;……...

    用Freemarker生成word文档

    ### 使用Freemarker生成Word文档的关键技术点解析 #### 一、引言 在实际工作中,经常需要批量生成带有特定格式或数据填充的Word文档,如报表、合同、通知等。传统的手工创建方法效率低下且易出错。利用Java语言...

    Freemarker生成word文档

    在生成Word文档的过程中,XML文件可以作为数据模型,其中的标签和属性对应于Word文档的各个元素,如段落、标题、图片等。通过解析XML文件,我们可以提取出所有必要的信息,然后传递给Freemarker模板进行渲染。 3. ...

    .NET 免费 Word查看类库-Free Spire.DocViewer for .NET_4.1.zip

    Free Spire.DocViewer for .NET 是一款专业的 Word 文档查看控件,开发者可以使用它在 Windows Forms 应用程序中轻松查看和打印 Word 文档,并且无需安装 Microsoft Word 或其他任何第三方组件。 Free Spire....

    免费版.NET 组件_Free Spire.DocViewer for .NET 3.4

    Free Spire.DocViewer for .NET 是 Spire.DocViewer for .NET 的免费产品...支持将 Word 文档转换为图片、RTF、PDF、HTML、XML、SVG、Txt、EPub、XPS、WordML、WordXml 以及其他 Word 格式如 .doc,.docx, .dotx 等。

    J2ME WordML Tools-开源

    在移动设备上,由于资源限制,通常无法直接打开或处理WordML文档,而J2ME WordML Tools则解决了这一问题。 这个库的目的是将XML文档(基于WordML规范)转化为适合在手机上展示和交互的格式。这意味着开发者可以利用...

    javaword图片.pdf

    通过调用`ImageExtractor`类的构造函数,传入包含Word文档的XML文件的输入流,然后指定一个输出目录,程序会将图片数据解码并保存为对应的文件格式。 总的来说,JavaWord图片处理涉及的关键技术包括:XML解析(SAX...

    pdf转为word转换器SolidConverterPDF 3.0中文版.rar

    软件介绍: 简体中文绿色特别版的PDF TO WORD转换器,不用安装,...微软 Word 二进位DOC格式文件 (支持内嵌字体)微软 Word RTF格式(.rtf)微软 Word WordML 格式(.xml)未格式化的 UTF-8 纯文本格式(.txt)

    java操作office2007

    早期的解决方案包括将数据转换为 Excel 可读的 CSV 格式或 Word 支持的 RTF 格式,以及使用像 Apache POI 这样的开源框架来读写 Excel 文档。然而,这些方法往往需要深入理解文档的内部结构,且缺乏完整的文档支持。...

    python-docx:读取,查询和修改Microsoft Word 20072008 docx文件

    docx模块创建,读取和写入Microsoft Office Word 2007 docx文件。 这些被Microsoft称为“ WordML”,“ Office Open XML”和“ Open XML”。 这些文档可以在Microsoft Office 2007/2010,Microsoft Mac Office ...

    java图片[文].pdf

    这个标签有一个`w:name`属性,通常以`wordml://`开头,后面跟着一个表示对象顺序的数字和文件扩展名,如`wordml://01000002.gif`或`wordml://03000001.png`。 为了提取这些图片,开发者可以使用SAX(Simple API for...

    docx4j-ImportXHTML:使用docx4j将XHTML转换为OpenXML WordML(docx)

    使用docx4j将XHTML转换为OpenXML WordML(docx); 也有一些转换为pptx的支持。 对于docx4j-ImportXHTML v8.x,您需要Java 8或更高版本。 (如果您仍在使用Java 6,则可以使用docx4j-ImportXHTML v6.x) docx4j已...

    DocxFactory:具有C#,Java,Python,Progress 4GL包装器和命令行工具的跨平台CC ++库,用于生成Microsoft Word .DOCX(OpenXML)文件

    是一个免费的,跨平台的C / C ++库,带有C#,Java,Python,Progress 4GL包装器和用于生成( )文件(也称为Open XML)的命令行工具。 DocxFactory功能: ://docxfactory.com DocxFactory教程(PDF): ://...

    nuxeo-platform-rendering-templates:Nuxeo平台插件,允许通过DocX或ODT模板呈现Nuxeo文档

    对于OpenOffice文档,由于它使用JODReports(使用Freemarker呈现ODT文件),因此实际上可以生成完整的文档。 历史 此插件基于很久以前在这里完成的DocX原型: ://hg.nuxeo.org/sandbox/nuxeo-platform-docx-...

    offal-开源

    "offal-开源"是一个基于Java的开源库,专门设计用于处理WordML文件和OpenDocument文件格式。WordML是Microsoft Word XML文档的特定标准,而OpenDocument则是一种开放的、国际认可的文档格式,被广泛应用于...

    Visual.Studio.Tools.for.Office.Using.C.Sharp.with.Excel.Word.Outlook.and.InfoPath.Sep.2005

    Importing an XML Data File into the Mapped Document The XML Options Dialog VSTO Support for Word Schema Mapping VSTO Support for the WordML File Format Conclusion Chapter 23....

    Visual.Studio.Tools.for.Office.Using.C.Sharp.with.Excel.Word.Outlook.and.InfoPath.Sep.2005.part2

    Importing an XML Data File into the Mapped Document The XML Options Dialog VSTO Support for Word Schema Mapping VSTO Support for the WordML File Format Conclusion Chapter 23....

    xml指南,关于xml很好的资料

    - **文档存储**:例如WordML是微软Word使用的XML格式。 - **XML数据库**:如MongoDB的部分功能,支持XML文档的存储和查询。 本“XML指南”包含的CHM文件(Compiled HTML Help)可能涵盖了XML的基本概念、语法示例、...

Global site tag (gtag.js) - Google Analytics