浏览 8603 次
锁定老帖子 主题:通过XDOC文档模型,轻松生成word文档
精华帖 (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 二维码: 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-10-21
据我所知,目前生成word文档的纯java库有:poi和docx4j,它们都是提供了一个ooxml的api,这个api很复杂
与它们不同的是xdoc设计了一个简单的结构,并提供了api,xdoc负责最终转换为ooxml |
|
返回顶楼 | |
发表时间:2012-10-25
非常好!使用实例太少了!XDOC设计器版本有最新的么?还有就是xdoc server如何配置能将设计好的.xdoc文件直接保存到服务器上
|
|
返回顶楼 | |
发表时间:2012-10-29
xdoc 写道 据我所知,目前生成word文档的纯java库有:poi和docx4j,它们都是提供了一个ooxml的api,这个api很复杂
与它们不同的是xdoc设计了一个简单的结构,并提供了api,xdoc负责最终转换为ooxml 还有一个aspose,处理doc是我目前见过最牛的,可惜是收费的,公司花了两万才买了两年的使用权,不过我支持免费的,平民大众的首选啊 |
|
返回顶楼 | |
发表时间:2012-10-29
最后修改:2012-10-29
|
|
返回顶楼 | |
发表时间:2012-10-29
最后修改:2012-10-29
很早前我就关注过这个东西了,我还在楼主博客留言咨询过。创意很好,但就是没法用,BUG太多影响正常使用。
比如我拖拽柱形图时,界面就死了。输入光标还在闪,但鼠标编程十字状,点击任何其他地方都无响应。 每次都这样。后来才发现,要等上两分钟才会弹出个数据界面。。。不知道这两分钟程序都干嘛了。。 还有LZ的远程加载jar机制也很不好,网路不好或者你主机挂了,就导致程序不可用。。好像你程序也可以加载本地jar,但做的不够好。 还有版权,协议?说的很模糊,不敢用。要么就明码标价商业推广,要么就全部开源推广 |
|
返回顶楼 | |
发表时间:2012-10-30
iminto 写道 很早前我就关注过这个东西了,我还在楼主博客留言咨询过。创意很好,但就是没法用,BUG太多影响正常使用。
比如我拖拽柱形图时,界面就死了。输入光标还在闪,但鼠标编程十字状,点击任何其他地方都无响应。 每次都这样。后来才发现,要等上两分钟才会弹出个数据界面。。。不知道这两分钟程序都干嘛了。。 还有LZ的远程加载jar机制也很不好,网路不好或者你主机挂了,就导致程序不可用。。好像你程序也可以加载本地jar,但做的不够好。 还有版权,协议?说的很模糊,不敢用。要么就明码标价商业推广,要么就全部开源推广 这个是由于动态加载JFreeChart,大概有1.3MB,加载完成后下次就没有问题了 |
|
返回顶楼 | |