利用IText导出Word

        生成Word文档的类库有很多,常用的有jacob,poi,itext等等,jacob操作office的能力是不错的,但是对于我个人来说,我不喜欢它的两方面:一、jacob只能应用于windows平台。二、除了要把相应的ar包加载到类路径下,还需要把jacob.dll复制到windows/system32目录中。poi操作excel方面的能力非常强大,对于word方面的操作能力还是不够的。

       现在来说说IText吧。IText是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。当然也可以生成word文档。而且操作方法简单。使用IText需要3个jar包:iText-2.1.7.jar(核心包),iTextAsian.jar(解决中文输出问题),itext-rtf-2.1.7.jar(操作rtf格式)。(最后会提供jar包与实例下载)。

       用iText生成Word文档需要5个步骤:

  ①建立com.lowagie.text.Document对象的实例。
           Document document = new Document();

       ②建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。

          RtfWriter2.getInstance(this.document, new FileOutputStream(filePath));

  ③打开文档。

          document.open();

  ④向文档中添加内容。

          document.add(new Paragraph("Hello World"));

  ⑤关闭文档。(在最后必须关闭文档,否则即使生成了word文档也会打不开)

          document.close();

      下面提供一个通用文件给大家:

public class WordUtils {private Document document;private BaseFont bfChinese;public BaseFont getBfChinese() {return bfChinese;  }  public void setBfChinese(BaseFont bfChinese) {  this.bfChinese = bfChinese;  }  public Document getDocument() {  return document;  }  public void setDocument(Document document) {  this.document = document;  }  public WordUtils(){  this.document = new Document(PageSize.A4);//设置纸张大小}  /** 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中* @param filePath  要操作的文档路径,若文档不存在会自动创建* @throws com.lowagie.text.DocumentException* @throws java.io.IOException*/  public void openDocument(String filePath) throws DocumentException,  IOException {  
//       建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中  RtfWriter2.getInstance(this.document, new FileOutputStream(filePath));  this.document.open();  
//       设置中文字体  this.bfChinese = BaseFont.createFont("STSongStd-Light",  "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);}/** * @param titleStr 标题* @param fontsize 字体大小 * @param fontStyle 字体样式 * @param elementAlign 对齐方式 * @throws com.lowagie.text.DocumentException*/  public void insertTitle(String titleStr,int fontsize,int fontStyle,int elementAlign) throws DocumentException{  Font titleFont = new Font(this.bfChinese, fontsize, fontStyle);  Paragraph title = new Paragraph(titleStr);  // 设置标题格式对齐方式  title.setAlignment(elementAlign);  title.setFont(titleFont);  this.document.add(title);  }  /*** 设置带有目录格式的标题(标题1格式)** @param rtfParagraphStyle 标题1样式* @param titleStr 标题* @throws DocumentException*/public void insertTitlePattern(String titleStr, RtfParagraphStyle rtfParagraphStyle) throws DocumentException{Paragraph title = new Paragraph(titleStr);title.setFont(rtfParagraphStyle);this.document.add(title);}  /*** 设置带有目录格式的标题(标题2格式)* @param titleStr 标题* @param rtfParagraphStyle 标题2样式* @throws DocumentException*/public void insertTitlePatternSecond(String titleStr,RtfParagraphStyle rtfParagraphStyle) throws DocumentException{Paragraph title = new Paragraph(titleStr);// 设置标题格式对齐方式  title.setFont(rtfParagraphStyle);this.document.add(title);}  /** * @param tableName 标题 * @param fontsize 字体大小 * @param fontStyle 字体样式 * @param elementAlign 对齐方式 * @throws com.lowagie.text.DocumentException*/  public void insertTableName(String tableName,int fontsize,int fontStyle,int elementAlign) throws DocumentException{  Font titleFont = new Font(this.bfChinese, fontsize, fontStyle);  titleFont.setColor(102, 102, 153);Paragraph title = new Paragraph(tableName);  // 设置标题格式对齐方式  title.setAlignment(elementAlign);  title.setFont(titleFont);  this.document.add(title);  }  /** * @param contextStr 内容 * @param fontsize 字体大小 * @param fontStyle 字体样式 * @param elementAlign 对齐方式 * @throws com.lowagie.text.DocumentException*/  public void insertContext(String contextStr,int fontsize,int fontStyle,int elementAlign) throws DocumentException{  // 正文字体风格  Font contextFont = new Font(bfChinese, fontsize, fontStyle);  Paragraph context = new Paragraph(contextStr);  //设置行距  context.setLeading(3f);// 正文格式左对齐  //  context.setAlignment(elementAlign);context.setFont(contextFont);  // 离上一段落(标题)空的行数  context.setSpacingBefore(1);// 设置第一行空的列数  context.setFirstLineIndent(20);  document.add(context);  }/*** @param imgUrl 图片路径* @param imageAlign 显示位置* @param height 显示高度* @param weight 显示宽度* @param percent 显示比例* @param heightPercent 显示高度比例* @param weightPercent 显示宽度比例* @param rotation 显示图片旋转角度* @throws java.net.MalformedURLException* @throws java.io.IOException* @throws com.lowagie.text.DocumentException*/public void insertImg(String imgUrl,int imageAlign,int height,int weight,int percent,int heightPercent,int weightPercent,int rotation) throws MalformedURLException, IOException, DocumentException{  
//       添加图片  Image img = Image.getInstance(imgUrl);  if(img==null)  return;  img.setAbsolutePosition(0, 0);  img.setAlignment(imageAlign);  img.scaleAbsolute(height, weight);img.scaleAbsolute(1000, 1000);img.scalePercent(percent);img.scalePercent(heightPercent, weightPercent);  img.setRotation(rotation);  document.add(img);}/*** 添加简单表格* @param column 表格列数(必须)* @param row 表格行数* @throws DocumentException*/public void insertSimpleTable(int column,int row) throws DocumentException {Table table=new Table(column);//列数必须设置,而行数则可以按照个人要求来决定是否需要设置table.setAlignment(Element.ALIGN_CENTER);// 居中显示table.setAlignment(Element.ALIGN_MIDDLE);// 纵向居中显示table.setAutoFillEmptyCells(true);// 自动填满table.setBorderColor(new Color(0, 125, 255));// 边框颜色table.setBorderWidth(1);// 边框宽度table.setSpacing(2);// 衬距,table.setPadding(2);// 即单元格之间的间距table.setBorder(20);// 边框for (int i = 0; i < column*3; i++) {table.addCell(new Cell(""+i));}document.add(table);}/*** 在操作完成后必须关闭document,否则即使生成了word文档,打开也会发生错误* @throws DocumentException*/public void closeDocument() throws DocumentException{  this.document.close();  }  }

当然,上面还有一些表格的方法没有写出来,因为每个人的需求都是不同的,本人写了一个小例子,显示效果为:

显示效果

表格显示效果


   下面提供IText的jar包:   IText jar包(免积分)

   这是上面显示IText操作效果的demo源代码: Demo(免积分)

   



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/49494.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地Word图文直接复制到富文本编辑器中

当前功能基于PHP&#xff0c;其它语言流程大致相同 1.新增上传word json配置 在ueditor\php\config.json中新增如下配置&#xff1a; /* 上传word配置 */ "wordActionName": "wordupload", /* 执行上传视频的action名称 */ "wordFieldName": &q…

【成为架构师课程系列】怎样进行物理架构、运行架构、开发架构的设计?

我认识一些架构师,他们的生活都是失控的。因为架构天性范围宽广,涉及人、工作量都非常多。一些架构师把他们的时间整天整天的花在跟“项目干系人”开会上,然后夜以继日,再搭上周末去实际的架构工作。 -- Eric Brechner, 《代码之道》 多重软件架构视图之所以必不可少,是因…

如何在一个中文大模型上,加入招投标字段标注的数据,搭建一个招投标字段解析的Transformer模型?

ChatGPT方案1 在一个中文大模型上加入招投标字段标注的数据&#xff0c;并搭建招投标字段解析的Transformer模型可以通过以下步骤实现&#xff1a; 收集并标注招投标相关的数据。可以使用现有的数据集&#xff0c;也可以通过爬虫技术获取相关数据&#xff0c;然后进行人工标注。…

程序员兼职网站(自由职业)

1、程序员客栈 www.proginn.com 2、码市 codemart.com 3、开源众包 4、智城外包 5、实现网 6、猿急送 7、人人开发 8、开发邦 9、电鸭社区 10、快码 11、英选 12、外包大师 13、我爱方案网 14、自由职客 15、智筹 16、SXsorft 17、猪八戒

程序员如何向自由职业过渡

点击上方“程序人生”&#xff0c;选择“置顶公众号” 第一时间关注程序猿&#xff08;媛&#xff09;身边的故事 未来一定会是一个从事自由职业越来越多的时代。当我们还不能放手一搏到自由职业中去的时候&#xff0c;我们实际上可以为其做一些准备。当然不是所有人都适合自由…

4大国外自由职业者项目外包网站

4大国外自由职业者项目外包网站 http://www.asfreelancer.com/articles/50.html 2011-06-27 / 分类&#xff1a;推荐专题, 职业资源 / 没有评论 这里介绍四个在国外自由职业圈中很流行的项目外包网站&#xff0c;很多个人和团队都会在上面开始自己的商业服务&#xff0c;尤…

程序员适合做自由职业者吗?

企业基于自身的弹性用工需求&#xff0c;雇佣兼职或自由职业者来解决用人难题&#xff0c;这种灵活用工模式效率更高、成本更低&#xff0c;企业把灵活用工与固定全职结合起来使用&#xff0c;正在变成一种常态。有数据指出&#xff0c;全球灵活用工业务总收入高达3万亿&#x…

如何迅速成为一个能够养活自己的自由职业者?

自由职业者&#xff0c;意味着自己的时间可以自由的安排&#xff0c;不用被强迫996&#xff0c;但是也同时意味着收入的不稳定&#xff0c;特别是在成为自由者的初期。 飞援 平台上也有一些自由职业者活跃&#xff0c;综合他们的经历经验&#xff0c;分享几点建议给想成为自由…

一个自由职业者兼职程序员对未来的畅想以及对目前生活的改变

最近一直在思考一个问题&#xff0c;未来是什么样子的&#xff0c;或者说&#xff0c;当我七老八十的时候&#xff0c;我希望日子是什么样子的。 关于自由 这里所谓的自由&#xff0c;肯定不是如同丰县的铁链女子亦或是缅北的血奴一般完全失去人身自由&#xff0c;而是能够自由…

自由职业,如何做好?

自由职业现实很骨感。 网络高速发达的今天&#xff0c;一个人一台电脑一个技能就是一家公司&#xff1b;不用早起不用打卡&#xff0c;甚至不必参加无聊的会议&#xff0c;这应该是多数职场人羡慕的“自由”。 近两年&#xff0c;自由职业一度中层和应届生追求&#xff0c;数…

我又有一位程序员朋友成了自由职业者

很多对数据结构和算法感兴趣的小伙伴&#xff0c;对【程序员小灰】这个公众号并不陌生&#xff0c;小灰在三年前开始&#xff0c;创造了一只可爱的小仓鼠&#xff0c;并用它来讲解编程技术和算法&#xff0c;一讲就是三年。 我之前和小灰有过一些互推的合作&#xff0c;也小窗交…

自由职业一时爽,一直自由一直爽

自由对一个人的意义&#xff0c;恐怕只有真正失去过自由的人才能真正的理解。 01. 可以说&#xff0c;在我第一天上班的时刻起&#xff0c;我就为这一天在准备着。当时我并不知道我想做什么&#xff0c;只是觉得我终究要自己做点事情。 刚毕业的时候&#xff0c;其实没有太多的…

程序员如何成为一名自由职业者?

作为一名三十而立的开发者&#xff0c;你会组建家庭、买房还贷&#xff0c;上有老人赡养&#xff0c;下有孩子待哺&#xff0c;你需要越来越多的钱&#xff0c;才能凑凑合合地安排好你的生活。 然而在公司工作到一定阶段后&#xff0c;总会遇到一些问题&#xff1a; 即使你的技…

自由职业2年了!

大家好&#xff0c;我是彭涛&#xff01; 截至今天&#xff0c;我自由职业刚好2年整了。 想到2年前的自己&#xff0c;莫名感慨万分&#xff0c;从一开始的忐忑不安&#xff0c;到现在的坦然从容&#xff0c;从最一开始的些许迷茫&#xff0c;到现在的目标坚定&#xff0c;这里…

一位自由职业者的日常

文/一位喵先生 01 刷着知乎的时候&#xff0c;看到一个自由职业者&#xff08;SOHO族&#xff09;&#xff0c;如何保持高效率工作的问题。看到下面这么多大牛在说着自己的经历&#xff0c;忽然觉得&#xff0c;这条路上并非独自一个。 不知不觉&#xff0c;已经经历了三个…

做自由职业者是怎样的体验

7 月 5 日&#xff0c;我主动成了一位自由职业者&#xff0c;以写书、咨询、授课为生。一个月过去了&#xff0c;来聊聊我的体验。 1. 自由 首先要说自由职业者的自由。 女儿看牙&#xff0c;时间约到周一下午&#xff0c;没关系&#xff0c;直接去了&#xff0c;不用请假。…

这是你希望的自由职业么

每到周末文章的打开率和阅读量就变得惨淡的不行&#xff0c;索性就不分享干货&#xff0c;闲聊一下九月份私活结束后的自由职业经历。看看这是否是你向往的自由职业生活状态么&#xff1f; 九月份&#xff0c;忙完了手头的项目&#xff0c;也没心思找工作&#xff0c;一心想着借…

自由职业的这两年

两年前&#xff0c;也就是2016年2月份&#xff0c;铺天盖地的沮丧&#xff0c;以及朝九晚五的时间制压垮了我的积极性&#xff0c;于是我辞职了。但是&#xff0c;生活在海湾地区又不便宜&#xff0c;所以我开始自由职业。这是我人生历程的转折点——不但可以控制自己的日程安排…

不自由的自由职业

大家好&#xff0c;我是良许&#xff0c;前码农&#xff0c;现在自由职业者。 有关注我朋友圈的小伙伴都知道&#xff0c;就在上周&#xff0c;我刚刚结束了长达 35 天的「假期」。 此言一出&#xff0c;立刻掀起了评论区留言狂潮&#xff0c;大家纷纷问我&#xff0c;你特么不…

ChatGPT 可能对未来哪些行业领域造成影响?

ChatGPT 是一种基于人工智能技术的聊天机器人&#xff0c;它可以模拟人类的对话方式&#xff0c;具有自然语言处理、机器学习、深度学习等技术&#xff0c;可以对未来的许多行业领域产生影响&#xff0c;以下是一些可能的领域&#xff1a; 1. 客户服务&#xff1a;ChatGPT 可以…