论坛首页 Java企业应用论坛

通过XDOC文档模型,轻松生成word文档

浏览 8603 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-10-20   最后修改:2012-10-20

XDOC新版本中增加了文档模型API,使用该模型API可以轻松生成word文档

选择XDOC模型API的理由:

1、纯Java,跨平台

2、高效、稳定

3、简洁的API,编写出优美的代码

4、丰富的格式控制:段落、文字、图形、图片、图表、表格、条形码、徽标、页码、水印...

看看示例代码:

import java.io.File;

import com.hg.xdoc.XDoc;
import com.hg.xdoc.model.Barcode;
import com.hg.xdoc.model.Body;
import com.hg.xdoc.model.Chart;
import com.hg.xdoc.model.Color;
import com.hg.xdoc.model.Ellipse;
import com.hg.xdoc.model.Img;
import com.hg.xdoc.model.Para;
import com.hg.xdoc.model.Path;
import com.hg.xdoc.model.Rect;
import com.hg.xdoc.model.SText;
import com.hg.xdoc.model.Table;
import com.hg.xdoc.model.Text;

/**
 * XDoc文档模型测试
 * @author xdoc
 */
public class XDocModelDemo {
    /**
     * 主程序
     * @param args
     */
    public static void main(String[] args) {
        //创建XDOC
        XDoc xdoc = new XDoc();
        //元数据
        xdoc.getMeta().setAuthor("xdoc");
        xdoc.getMeta().setTitle("XDOC文档模型演示");
        //获取背景
        Rect back = xdoc.getBack();
        //添加LOGO徽标
        back.add(new Img("http://www.baidu.com/img/baidu_sylogo1.gif"));
        //添加水印
        SText stext = new SText("XDOC演示");
        stext.setColor(null);
        stext.setFillColor(Color.lightgray);
        stext.setBold(true);
        stext.setSize(400, 200);
        stext.setRotate(-45);
        stext.setLocation((back.getWidth() - stext.getWidth()) / 2, (back.getHeight() - stext.getHeight()) / 2);
        back.add(stext);
        //添加页码
        Rect pageRect = new Rect();
        Para para = new Para("第#pageno#页/共#pagecount#页");
        para.setAlign(Para.ALIGN_CENTER);
        pageRect.add(para);
        pageRect.setColor(null);
        pageRect.setWidth(200);
        pageRect.setLocation((back.getWidth() - pageRect.getWidth()) / 2, back.getHeight() - pageRect.getHeight() - 20);
        back.add(pageRect);
        
        Body body = xdoc.getBody();
        body.add(new Para("XDOC文档模型演示", 1));
        body.add(new Para("段落文字", 2));
        para = new Para();
        para.setIndent(40);
        para.add(new Text("缩进40"));
        Text text = new Text("隶书18");
        text.setFont("隶书", 18);
        para.add(text);
        
        text = new Text("粗体");
        text.setBold(true);
        para.add(text);
        
        text = new Text("红色下划线");
        text.setUnderline(2, Color.red);
        para.add(text);
        
        text = new Text("斜体红字黄背景");
        text.setItalic(true);
        text.setFontSize(20);
        text.setFontColor(Color.red);
        text.setBackColor(Color.yellow);
        para.add(text);
        
        text = new Text("超链接");
        text.setHref("http://www.hgsql.com");
        text.setUnderline(true);
        text.setFontColor(Color.blue);
        para.add(text);
        para.add(new Img("?t107")); //嵌入内置图片
        body.add(para);

        para = new Para("居中带前缀,行间距10,背景亮灰色");
        para.setAlign(Para.ALIGN_CENTER);
        para.setPrefix(Para.PREFIX_RECT);
        para.setLineSpacing(10);
        para.setBackColor(new Color("#f0f0f0"));
        
        body.add(para);
        
        body.add(new Para("图片", 2));
        body.add(new Para(new Img("http://www.baidu.com/img/baidu_sylogo1.gif")));

        body.add(new Para("图形", 2));

        para = new Para();
        Rect rect = new Rect();
        rect.add(new Text("文本"));
        rect.setArc(10);
        rect.setColor(null);
        rect.setFillColor(Color.orange);
        rect.setGradual(5, Color.yellow); //渐变
        para.add(rect);
        Ellipse ellipse = new Ellipse();
        ellipse.setSize(200, 100);
        ellipse.setFillColor(Color.pink);
        ellipse.setColor(Color.gray);
        ellipse.setLineWeight(10);
        para.add(ellipse);
        Path path = new Path(Path.p10);
        path.setSize(200, 200);
        para.add(path);
        
        body.add(para);
        
        body.add(new Para("图表", 2));
        
        String[][] chartData = new String[][] {{"类别", "值"}, {"A", "10"}, {"B", "20"}, {"C", "30"}};
        body.add(new Para(new Chart(Chart.TYPE_PIE, chartData)));
        body.add(new Para(new Chart(Chart.TYPE_BAR, chartData)));
        body.add(new Para(new Chart(Chart.TYPE_LINE, chartData)));
        
        body.add(new Para("条码", 2));
        body.add(new Para(new Barcode(Barcode.TYPE_Code128, "12345678")));

        body.add(new Para("表格", 2));
        int row = 4;
        int col = 6;
        Table table = new Table(row, col);
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                table.add(new Text(i + "," + j), i, j);
            }
        }
        table.setColWidth(0, 60);
        table.setRowHeight(3, 40);
        //合并单元格
        table.add(new Text("1,1,2,2"), 1, 1, 2, 2);
        table.add(new Text("0,4,3,1"), 0, 4, 3, 1);
        body.add(new Para(table));

        try {
            xdoc.save(new File("d:/XDocModel.docx"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 看看效果:



 

 JavaDoc地址

http://www.hgsql.com/XDocApi/index.html

主程序库:

http://www.hgsql.com/xdoc/lib/hg.jar

图表:

http://www.hgsql.com/xdoc/lib/jfreechart.jar

二维码:

http://www.hgsql.com/xdoc/lib/zxing.jar

  • 大小: 96.1 KB
   发表时间:2012-10-21  
据我所知,目前生成word文档的纯java库有:poi和docx4j,它们都是提供了一个ooxml的api,这个api很复杂
与它们不同的是xdoc设计了一个简单的结构,并提供了api,xdoc负责最终转换为ooxml
0 请登录后投票
   发表时间:2012-10-25  
非常好!使用实例太少了!XDOC设计器版本有最新的么?还有就是xdoc server如何配置能将设计好的.xdoc文件直接保存到服务器上
0 请登录后投票
   发表时间:2012-10-29  
xdoc 写道
据我所知,目前生成word文档的纯java库有:poi和docx4j,它们都是提供了一个ooxml的api,这个api很复杂
与它们不同的是xdoc设计了一个简单的结构,并提供了api,xdoc负责最终转换为ooxml

还有一个aspose,处理doc是我目前见过最牛的,可惜是收费的,公司花了两万才买了两年的使用权,不过我支持免费的,平民大众的首选啊
0 请登录后投票
   发表时间:2012-10-29   最后修改:2012-10-29
http://www.hgsql.com/down/XDocOffice.rar

系统找不到指定的文件。

下载不了
0 请登录后投票
   发表时间:2012-10-29   最后修改:2012-10-29
很早前我就关注过这个东西了,我还在楼主博客留言咨询过。创意很好,但就是没法用,BUG太多影响正常使用。
比如我拖拽柱形图时,界面就死了。输入光标还在闪,但鼠标编程十字状,点击任何其他地方都无响应。
每次都这样。后来才发现,要等上两分钟才会弹出个数据界面。。。不知道这两分钟程序都干嘛了。。

还有LZ的远程加载jar机制也很不好,网路不好或者你主机挂了,就导致程序不可用。。好像你程序也可以加载本地jar,但做的不够好。
还有版权,协议?说的很模糊,不敢用。要么就明码标价商业推广,要么就全部开源推广

  • 大小: 14.3 KB
0 请登录后投票
   发表时间:2012-10-30  
iminto 写道
很早前我就关注过这个东西了,我还在楼主博客留言咨询过。创意很好,但就是没法用,BUG太多影响正常使用。
比如我拖拽柱形图时,界面就死了。输入光标还在闪,但鼠标编程十字状,点击任何其他地方都无响应。
每次都这样。后来才发现,要等上两分钟才会弹出个数据界面。。。不知道这两分钟程序都干嘛了。。

还有LZ的远程加载jar机制也很不好,网路不好或者你主机挂了,就导致程序不可用。。好像你程序也可以加载本地jar,但做的不够好。
还有版权,协议?说的很模糊,不敢用。要么就明码标价商业推广,要么就全部开源推广


这个是由于动态加载JFreeChart,大概有1.3MB,加载完成后下次就没有问题了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics