Docx4J知识积累.docx

上传人:b****5 文档编号:28061445 上传时间:2023-07-08 格式:DOCX 页数:19 大小:345.59KB
下载 相关 举报
Docx4J知识积累.docx_第1页
第1页 / 共19页
Docx4J知识积累.docx_第2页
第2页 / 共19页
Docx4J知识积累.docx_第3页
第3页 / 共19页
Docx4J知识积累.docx_第4页
第4页 / 共19页
Docx4J知识积累.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

Docx4J知识积累.docx

《Docx4J知识积累.docx》由会员分享,可在线阅读,更多相关《Docx4J知识积累.docx(19页珍藏版)》请在冰豆网上搜索。

Docx4J知识积累.docx

Docx4J知识积累

Docx4J概述:

Docx4j是Java操作office2007+中的Word、Excel、PPT的开源项目,其主要针对WordXML同时也可以处理Excel和PPT,比POI要强大很多.

Docx4J基于开源协议ASLv2。

 ASL是一个广泛适用于社区开源软件并被开源业界所认可的协议,该协议更有益于商业化产品的开发和再发行。

遵循ASL发行的代码和其它许可协议可以整合成为一个闭源的商业产品,然后被其它开发人员再次发行。

这不像开源许可协议。

"类GPL许可协议"(有些像GPL),通常情况下用于确保其它类似开发成员再发行已经被发布并修改的代码及其衍生代码的开源和可发布性。

Docx4J能做什么:

1.打开已存在docx(从文件系统、SMB/CIFS、使用VFS的WebDAV),pptx,xlsx

2.创建新的docx、pptx、xlsx

3.编程式地操作上面打开的文档

Docx4J特殊的功能支持:

1.模版替换;CustomXML绑定

2.生产/消费Word2007的xmlPackage(pkg)格式

3.作为docx保存docx到文件系统(zipped)或者保存到JCR(unzipped)

4.应用转换,包括常见过滤器

5.作为HTML或者PDF导出

6.比较文档、段落或者sdt(内容控件)之间的差异

7.字体支持(字体替换及使用任何文档中嵌入的字体)

一些有用的链接:

Docx4J:

Samplecodes:

docx4j,pptx4j,xlsx4j,

生成docx文件(第一部分),

生成docx文件(第二部分),

使用docx4j编程式地创建复杂的Word(.docx)文档,

向Docx4j生成的word文档添加图片和布局--第一部分,

向Docx4j生成的word文档中添加布局--第二部分

docx4j--使用Java处理word2007(.docx)文档

Docx4J的使用

一打开文件/模板

Docx4J中,在内存中操作的word文档是“WordprocessingMLPackage”类型的对象(本文以下简称包)。

在编辑一个word文档前,开发者需要选择:

创建一个新的空白包,并逐一将需要的内容填充进去,或者打开一个已有的文档,并在里面添加/替换新的内容。

前者思路比较简单,比较适合简单文档的创建。

但由于添加每条新内容时,都需要手动进行设置其各项参数(比如表格的行宽、列宽、边框等),且添加修改复杂控件(公式、页眉页脚)的过程都比较繁琐,所以在创建格式复杂的文档时不是很建议。

后者需要事先制作一个模板文档,添加不同的占位符和各种模板信息,在准备上比前者复杂。

但也具有很多优点:

可以简化细节参数的调整(不需要手动调整表格、段落的具体细节参数)从而将精力集中到文档内容上;复杂的文档部分(如公式、复选框等)可以直接从模板中读取,只需要在其基础上修改文字等内容部分,而避开了繁琐的创建操作等。

在创建格式复杂的文档时,这个方法相比前者可以精简大量代码。

(本文之后将主要基于该方法进行说明)

二保存文件

当结束对包的编辑时,开发者可以选择多种方式进行保存。

三常用类型

Docx4J支持所有的docx内容格式,其中比较常见的有如下几种:

1.Text:

基本的文字内容

2.R:

文字格式信息

3.P:

段落,可以单独使用,也可以添加到单元格(Tc)等作为内容

以下代码创建了新文本,并将其填到指定的单元格中

1.    /** 

2.     * 功能描述:

填充单元格内容 

3.     * @param tc          单元格对象 

4.     * @param data        内容 

5.     * @param fontFamily  字体 

6.     * @param fontSize    字号 

7.     * @param isBlod      是否加粗 

8.     * @param jcEnumeration 对齐方式 

9.     * @author myclover 

10.     */  

11.    private static void fillCellData(Tc tc , String data , String fontFamily , String fontSize , boolean isBlod , JcEnumeration jcEnumeration){  

12.        ObjectFactory factory = ();  

13.         p = (P) ().get(0));  

14.        dd(t);  

15.        ().add(run);  

16.    }  

17.      

18.    /** 

19.     * 功能描述:

填充单元格内容,小五号,宋体,内容居中 

20.     * @param tc     单元格对象 

21.     * @param data   数据 

22.     * @param isBlod 是否加粗 

23.     * @author myclover 

24.     */  

25.    public static void fillCellData(Tc tc , String data , boolean isBlod ){  

26.        fillCellData(tc, data, "宋体", "18", isBlod, ;  

27.    }  

4.Tbl:

表格,每个表格含有一行或多行(Tr),每行有一个或者多个单元格(Tc)

Tc是表格用于存储信息的基本单位

以下代码创建了一个“rows行、cols列、行宽为widths“的空表格

1.public static Tbl createTable(int rows, int cols, int[] widths) {  

2.        ObjectFactory factory = ();  

3.        Tbl tbl = ();  

4.        ppend.append(">");  

5.        ("

tblStyle w:

val=\"TableGrid\"/>");  

6.        ("

tblW w:

w=\"0\" w:

type=\"auto\"/>");  

7.        dd(gridCol);  

8.        }  

9.        dd(tr);  

10.            dd(tc);  

11.                TcPr tcPr = ();  

12.                (tcPr);  

13.                dd());  

14.            }  

15.  

16.        }  

17.        return tbl;  

18.    }  

四指定格式创建文档

1.修改文档格式

页边距

19.    /** 

20.     * 功能描述:

设置页边距 

21.     * @param wordPackage 文档处理包对象 

22.     * @param top    上边距 

23.     * @param bottom 下边距 

24.     * @param left   左边距 

25.     * @param right  右边距 

26.     * @author myclover 

27.     */  

28.    public static void setMarginSpace(WordprocessingMLPackage wordPackage , String top , String bottom , String left , String right ){  

29.        ObjectFactory factory = ();  

30.        PgMar pg = ();  

31.        (new BigInteger(top));  

32.        (new BigInteger(bottom));  

33.        (new BigInteger(left));  

34.        (new BigInteger(right));  

35.        ().getSections().get(0).getSectPr().setPgMar(pg);  

36.    }  

37.      

38.    /** 

39.     * 功能描述:

设置页边距,上下边距都为1440,厘米 

40.     * @param wordPackage 文档处理包对象 

41.     * @param left   左边距 

42.     * @param right  右边距 

43.     * @author myclover 

44.     */  

45.    public static void setMarginSpace(WordprocessingMLPackage wordPackage , String left , String right ){  

46.        setMarginSpace(wordPackage, "1440", "1440", left, right);  

47.    }  

48.      

49.    /** 

50.     * 功能描述:

设置页边距,上下边距都为1440,厘米,左右边距都为1797,厘米 

51.     * @param wordPackage 文档处理包对象 

52.     * @author myclover 

53.     */  

54.    public static void setMarginSpace(WordprocessingMLPackage wordPackage){  

55.        setMarginSpace(wordPackage, "1440", "1440", "1797", "1797");  

56.    }  

文档只读

1.    /** 

2.     * 功能描述:

设置文档是否只读,包括内容和样式 

3.     * @param wordPackage  文档处理包对象 

4.     * @param isReadOnly   是否只读 

5.     * @throws Exception 

6.     * @author myclover 

7.     */  

8.    public static void setReadOnly(WordprocessingMLPackage wordPackage , boolean isReadOnly)throws Exception{  

9.        byte[] bt = "".getBytes();  

10.        if(isReadOnly){  

11.            bt = "123456".getBytes();  

12.        }  

13.        ObjectFactory factory = ();  

14.        etDocumentSettingsPart();  

15.        if(ds == null){  

16.            ds = new DocumentSettingsPart();  

17.        }  

18.        CTSettings cs = ();  

19.        if(cs == null){  

20.            cs = ();  

21.        }  

22.        ddTargetPart(ds);  

23.    }  

24.      

25.    /** 

26.     * 功能描述:

设置文档是否只读,包括内容和样式 

27.     * @param fileName    文件 

28.     * @param isReadOnly  是否只读 

29.     * @return            返回值:

设置成功,则返回true,否则返回false 

30.     * @throws Exception 

31.     * @author myclover 

32.     */  

33.    public static boolean setReadOnly(String fileName , boolean isReadOnly)throws Exception{  

34.        try {  

35.            File file = new File(fileName);  

36.            if (!

()) {  

37.                return false;  

38.            }  

            修改字体

生成的RPr不能单独使用,应与Text共同使用

1.    /** 

2.     * 功能描述:

设置字体的样式 

3.     * @param fontFamily      字体类型 

4.     * @param colorVal        字体颜色 

5.     * @param hpsMeasureSize  字号大小 

6.     * @param sTHint          字体格式 

7.     * @param isBlod          是否加粗 

8.     * @return                返回值:

返回字体样式对象 

9.     * @throws Exception 

10.     * @author myclover 

11.     */  

12.    private static RPr getRPr(String fontFamily , String colorVal , String hpsMeasureSize , STHint sTHint , boolean isBold){  

13.        ObjectFactory factory = ();  

14.        RPr rPr = ();  

15.          

16.         rf = new   

17.        (sTHint);  

18.        (fontFamily);  

19.        (fontFamily);  

20.        (rf);  

21.          

22.        BooleanDefaultTrue bdt = ().createBooleanDefaultTrue();  

23.        (bdt);  

24.        if(isBold){  

25.            (bdt);  

26.        }  

27.         color = new   

28.        (colorVal);  

29.        (color);  

30.  

31.         sz = new   

32.        (new BigInteger(hpsMeasureSize));  

33.        (sz);  

34.        (sz);  

35.          

36.        return rPr;  

37.    } 

38.Text t = ();  

39.        (data);  

40.        R run = ();  

41.        (getRPr("宋体","000000", "18", , isBold)

42.        ().add(t);  

43.        ().add(run);  

3.修改单元格/表格样式

单元格内容垂直居中(已有Tctc)

1.TcPr tcpr = ();  

2.ObjectFactory factory = ();  

3.        if(tcpr == null){  

4.            tcpr = ();  

5.        }  

        合并单元格

1.    /** 

2.     * 功能描述:

合并单元格
 

3.     *          表示合并第startRow(开始行)行中的第startCol(开始列)列到(startCol + colSpan - 1)列 
 

4.     *          表示合并第startCol(开始列)行中的第startRow(开始行)列到(startRow + rowSpan - 1)行 

5.     * @param tc          单元格对象 

6.     * @param currentRow  当前行号,传入的是遍历表格时的行索引参数 

7.     * @param startRow    开始行 

8.     * @param rowSpan     合并的行数,大于1才表示合并 

9.     * @param currentCol  当前列号,传入的是遍历表格时的列索引参数 

10.     * @param startCol    开始列 

11.     * @param colSpan     合并的列数,大于1才表示合并 

12.     * @author myclover 

13.     */  

14.    public static void setCellMerge(Tc tc , int currentRow , int startRow , int rowSpan , int currentCol , int startCol , int colSpan){  

15.        ObjectFactory factory = ();  

16.        TcPr tcpr = ();  

17.        if(tcpr == null){  

18.            tcpr = ();  

19.        }  

        插入分页符

添加换页符相当地简单。

Docx4j拥有一个叫作Br的break对象,这个对象有一个type属性,这种情况下我们需要将其设置为page,type其它可选的值为column和textWrapping。

这个break可以很简单地添加到段落中。

1.    private static void addPageBreak() {  

2.        MainDocumentPart documentPart = ();  

3.   

4.        Br breakObj = new Br();  

5.        ;  

6.   

7.        P paragraph = ();  

8.        ().add(breakObj);  

9.        ().getBody().getContent().add(paragraph);  

10.    }  

6.插入目录

1.public class AddingTableOfContent {  

2.    private static ObjectFactory factory;  

3.   

4.    /** 

5.     *  首先我们创建对象工厂和包并从包中抽出文档部件. 然后我们添加目录表, 后面跟着一些带有分类 

6.     *  标题样式的段落. 最后我们保存包. 

7.     */  

8.    public static void main(String[] args) throws Docx4JException {  

9.        factory = ();  

10.        WordprocessingMLPackage wordMLPackage = ();  

11.        MainDocumentPart documentPart = ();  

12.   

13.        addTableOfContent(documentPart);  

14.   

15.        ("Heading1", "Hello 1");  

16.        ("Heading2", "Hello 2");  

17.        ("Heading3", "Hello 3");  

18.        ("Heading1", "Hello 1");  

19.   

20.        (new File("src/main/files/"));  

21.    }  

22.   

23.    /** 

24.     *  将目录表添加到文档. 

25.     *   

26.     *  首先我们创建段落. 然后添加标记域开始的指示符, 然后添加域内容(真正的目录表), 接着添加域 

27.     *  结束的指示符. 最后将段落添加到给定文档的JAXB元素中. 

28.     * 

29.     *  @param documentPart 

30.     */  

31.    private static void addTableOfContent(MainDocumentPart documentPart) {  

32.        P paragraph = ();  

33.   

34.        addFieldBegin(paragraph);  

35.        addTableOfContentField(paragraph);  

36.        addFieldEnd(paragraph);  

37.   

38.        

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1