Java使用iText生成word文件的完美解决方案(亲测可行)

时间:2022-04-04 00:45:21

JAVA生成WORD文件的方法目前有以下种:

一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操作系统 在此不讨论该方案

一种是pio但是他的excel处理很程序 word模块还局限于读取word的文本内容,写word文件就更弱项了

当我使用这个JAVA生成RTF文件时费了好大的劲,原本是想生成WORD文档的,但是WORD文档POI只支持往生成的WORD中填入文本,对于图片根本就不支持。后来想想,RTF格式的也可用WORD打开,不如生成RTF。结果上网搜了很多技术,Itext,jacob,java2word,rtftemplate,reportrunner看了近一天也没什么头绪,写这些示例的几乎没有,还好Itext的例子有那么几个,可是我上官网下了最新核心包后发现,导入例子中居然全部红叉,原本以为上错网站了,再经过核实还是对的,于是断定网上的例子肯定有误,itext或许不能用。绕了大半天其他的技术我真的没法弄了,还是回到了iText,静下心来思考觉得包肯定有问题,仔细一看原来最新版的是支持PDF版的iText-5.0.1.jar是不对的,本来以为最新的功能最全了,没想到错了,想到这里赶紧下了稍微iText-2.1.7.jar结果终于成功了,感慨不已!现贡献代码如下记住官网上只能下到核心包:iText-1.2.7.jar和支持rtf的iText-rtf-2.1.7.jar这两个貌似对了,其实还有一个包是比较重要的iTextAsian.jar这个包对于设置字体什么的起了关键作用上网可以搜到的.

本文介绍的是itext生成rtf文件并保存格式为word 此方案本人已实践过 并已在项目中使用

用到的jar包: 
iText-2.1.7.jar
iText-rtf-2.1.7.jar
iTextAsian.jar

  1. package com.rye.test;
  2. import java.awt.Color;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import com.lowagie.text.Cell;
  7. import com.lowagie.text.Document;
  8. import com.lowagie.text.DocumentException;
  9. import com.lowagie.text.Font;
  10. import com.lowagie.text.PageSize;
  11. import com.lowagie.text.Paragraph;
  12. import com.lowagie.text.Table;
  13. import com.lowagie.text.rtf.RtfWriter2;
  14. /**
  15. * 创建word文档 步骤:
  16. * 1,建立文档
  17. * 2,创建一个书写器
  18. * 3,打开文档
  19. * 4,向文档中写入数据
  20. * 5,关闭文档
  21. */
  22. public class WordDemo {
  23. public WordDemo() {
  24. }
  25. /**
  26. * @param args
  27. */
  28. public static void main(String[] args) {
  29. // 创建word文档,并设置纸张的大小
  30. Document document = new Document(PageSize.A4);
  31. try {
  32. RtfWriter2.getInstance(document,
  33. new FileOutputStream("E:/word.doc"));
  34. document.open();
  35. //设置合同头
  36. Paragraph ph = new Paragraph();
  37. Font f  = new Font();
  38. Paragraph p = new Paragraph("出口合同",
  39. new Font(Font.NORMAL, 18, Font.BOLDITALIC, new Color(0, 0, 0)) );
  40. p.setAlignment(1);
  41. document.add(p);
  42. ph.setFont(f);
  43. // 设置中文字体
  44. // BaseFont bfFont =
  45. // BaseFont.createFont("STSongStd-Light",
  46. "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
  47. // Font chinaFont = new Font();
  48. /*
  49. * 创建有三列的表格
  50. */
  51. Table table = new Table(4);
  52. document.add(new Paragraph("生成表格"));
  53. table.setBorderWidth(1);
  54. table.setBorderColor(Color.BLACK);
  55. table.setPadding(0);
  56. table.setSpacing(0);
  57. /*
  58. * 添加表头的元素
  59. */
  60. Cell cell = new Cell("表头");//单元格
  61. cell.setHeader(true);
  62. cell.setColspan(3);//设置表格为三列
  63. cell.setRowspan(3);//设置表格为三行
  64. table.addCell(cell);
  65. table.endHeaders();// 表头结束
  66. // 表格的主体
  67. cell = new Cell("Example cell 2");
  68. cell.setRowspan(2);//当前单元格占两行,纵向跨度
  69. table.addCell(cell);
  70. table.addCell("1,1");
  71. table.addCell("1,2");
  72. table.addCell("1,3");
  73. table.addCell("1,4");
  74. table.addCell("1,5");
  75. table.addCell(new Paragraph("用java生成的表格1"));
  76. table.addCell(new Paragraph("用java生成的表格2"));
  77. table.addCell(new Paragraph("用java生成的表格3"));
  78. table.addCell(new Paragraph("用java生成的表格4"));
  79. document.add(new Paragraph("用java生成word文件"));
  80. document.add(table);
  81. document.close();
  82. } catch (FileNotFoundException e) {
  83. e.printStackTrace();
  84. } catch (DocumentException e) {
  85. e.printStackTrace();
  86. } catch (IOException e) {
  87. e.printStackTrace();
  88. }
  89. }
  90. }

代码2:

  1. <span style="">import java.awt.Color;
  2. import java.io.FileNotFoundException;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import com.lowagie.text.Cell;
  6. import com.lowagie.text.Document;
  7. import com.lowagie.text.DocumentException;
  8. import com.lowagie.text.Element;
  9. import com.lowagie.text.Font;
  10. import com.lowagie.text.PageSize;
  11. import com.lowagie.text.Paragraph;
  12. import com.lowagie.text.Table;
  13. import com.lowagie.text.pdf.BaseFont;
  14. import com.lowagie.text.rtf.RtfWriter2;
  15. public class CreateWordDemo {
  16. public void createDocContext(String file,String contextString)throws DocumentException, IOException{
  17. //设置纸张大小
  18. Document document = new Document(PageSize.A4);
  19. //建立一个书写器,与document对象关联
  20. RtfWriter2.getInstance(document, new FileOutputStream(file));
  21. document.open();
  22. //设置中文字体
  23. BaseFont bfChinese = BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
  24. //标题字体风格
  25. Font titleFont = new Font(bfChinese,12,Font.BOLD);
  26. //正文字体风格
  27. Font contextFont = new Font(bfChinese,10,Font.NORMAL);
  28. Paragraph title = new Paragraph("标题");
  29. //设置标题格式对齐方式
  30. title.setAlignment(Element.ALIGN_CENTER);
  31. title.setFont(titleFont);
  32. document.add(title);
  33. Paragraph context = new Paragraph(contextString);
  34. context.setAlignment(Element.ALIGN_LEFT);
  35. context.setFont(contextFont);
  36. //段间距
  37. context.setSpacingBefore(3);
  38. //设置第一行空的列数
  39. context.setFirstLineIndent(20);
  40. document.add(context);
  41. //设置Table表格,创建一个三列的表格
  42. Table table = new Table(3);
  43. int width[] = {25,25,50};//设置每列宽度比例
  44. table.setWidths(width);
  45. table.setWidth(90);//占页面宽度比例
  46. table.setAlignment(Element.ALIGN_CENTER);//居中
  47. table.setAlignment(Element.ALIGN_MIDDLE);//垂直居中
  48. table.setAutoFillEmptyCells(true);//自动填满
  49. table.setBorderWidth(1);//边框宽度
  50. //设置表头
  51. Cell haderCell = new Cell("表格表头");
  52. haderCell.setHeader(true);
  53. haderCell.setColspan(3);
  54. table.addCell(haderCell);
  55. table.endHeaders();
  56. Font fontChinese = new Font(bfChinese,12,Font.NORMAL,Color.GREEN);
  57. Cell cell = new Cell(new Paragraph("这是一个3*3测试表格数据",fontChinese));
  58. cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
  59. table.addCell(cell);
  60. table.addCell(new Cell("#1"));
  61. table.addCell(new Cell("#2"));
  62. table.addCell(new Cell("#3"));
  63. document.add(table);
  64. document.close();
  65. }
  66. public static void main(String[] args) {
  67. CreateWordDemo word = new CreateWordDemo();
  68. String file = "test.doc";
  69. try {
  70. word.createDocContext(file, "测试iText导出Word文档");
  71. } catch (DocumentException e) {
  72. e.printStackTrace();
  73. } catch (IOException e) {
  74. e.printStackTrace();
  75. }
  76. }
  77. }</span>

图片版:

    1. <span style="font-size: medium;">/**
    2. * @param args
    3. */
    4. public static void main(String[] args) {
    5. // TODO Auto-generated method stub
    6. try {
    7. RTFCreate rtfMain = new RTFCreate();
    8. rtfMain.createRTFContext(FILE_NAME);
    9. } catch (FileNotFoundException e) {
    10. // TODO Auto-generated catch block
    11. e.printStackTrace();
    12. } catch (DocumentException e) {
    13. // TODO Auto-generated catch block
    14. e.printStackTrace();
    15. } catch (IOException e) {
    16. // TODO Auto-generated catch block
    17. e.printStackTrace();
    18. }
    19. }
    20. public void createRTFContext(String path) throws DocumentException,
    21. IOException {
    22. Document document = new Document(PageSize.A4);
    23. RtfWriter2.getInstance(document, new FileOutputStream(path));
    24. document.open();
    25. // 设置中文字体
    26. BaseFont bfChinese = BaseFont.createFont("STSongStd-Light",
    27. "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
    28. // 标题字体风格
    29. Font titleFont = new Font(bfChinese, 12, Font.BOLD);
    30. // 正文字体风格
    31. Font contextFont = new Font(bfChinese, 10, Font.NORMAL);
    32. Paragraph title = new Paragraph("标题");
    33. // 设置标题格式对齐方式
    34. title.setAlignment(Element.ALIGN_CENTER);
    35. title.setFont(titleFont);
    36. document.add(title);
    37. String contextString = "iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。";
    38. Paragraph context = new Paragraph(contextString);
    39. // 正文格式左对齐
    40. context.setAlignment(Element.ALIGN_LEFT);
    41. context.setFont(contextFont);
    42. // 离上一段落(标题)空的行数
    43. context.setSpacingBefore(20);
    44. // 设置第一行空的列数
    45. context.setFirstLineIndent(20);
    46. document.add(context);
    47. // //在表格末尾添加图片
    48. Image png = Image.getInstance("c:/fruit.png");
    49. document.add(png);
    50. document.close();
    51. }
    52. }
    53. </span>

Java使用iText生成word文件的完美解决方案(亲测可行)的更多相关文章

  1. Java 使用模板生成 Word 文件---基于 Freemarker 模板框架

    Java项目引入 Freemarker 插件自行完成. 步骤如下: .编写 Word 模板,并将模板中要用代码动态生成数据用 Freemarker 变量取代,即${变量名},如${username}: ...

  2. 关于java poi itext生成pdf文件的例子以及方法

    最近正在做导出pdf文件的功能,所以查了了一些相关资料,发现不是很完善,这里做一些小小的感想,欢迎各位“猿”童鞋批评指正. poi+itext,所需要的jar包有itext-2.1.7.jar,poi ...

  3. Windows10没有修改hosts文件权限的解决方案&lpar;亲测有效&rpar;

    当遇到有hosts文件不会编辑或者,修改了没办法保存”,以及需要权限等问题如图: 或者这样: 我学了一招,现在教给你: 1.win+R 2.进入hosts的文件所在目录: 3.我们开始如何操作才能不出 ...

  4. Java Itext 生成PDF文件

    利用Java Itext生成PDF文件并导出,实现效果如下: PDFUtil.java package com.jeeplus.modules.order.util; import java.io.O ...

  5. java使用iText生成pdf表格

    转载地址:http://www.open-open.com/code/view/1424011530749 首先需要你自己下载itext相关的jar包并添加引用,或者在maven中添加如下引用配置: ...

  6. Java利用poi生成word&lpar;包含插入图片,动态表格,行合并&rpar;

    转(小改): Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插 ...

  7. 利用html模板生成Word文件&lpar;服务器端不需要安装Word&rpar;

    利用html模板生成Word文件(服务器端不需要安装Word) 由于管理的原因,不能在服务器上安装Office相关组件,所以只能采用客户端读取Html模板,后台对模板中标记的字段数据替换并返回给客户端 ...

  8. JSP生成word文件

    1.jsp生成word文件,直接改动jsp格式: <%@ page contentType="application/vnd.ms-word;charset=GB2312"% ...

  9. ORA-03113:通信通道的文件结尾-完美解决方案

    ORA-03113:通信通道的文件结尾-完美解决方案   oracle 文档中对这个错误这样解释: ORA-03113 错误就是说连接到数据库的网络中断了.有些错误由于频繁出现.原因复杂而被 Orac ...

随机推荐

  1. hbase的regionserver宕机

    错误日志: regionserver.HRegionServer: Failed deleting my ephemeral node zookeeper.RecoverableZooKeeper: ...

  2. POJ 1456 &lpar;贪心&plus;并查集&rpar; Supermarket

    有n件商品,每件商品有它的利润和售出的最后期限,问能够得到的最大利润是多少 这道题和 HDU 1789 Doing Homework again 几乎一模一样,只不过这个是求最的扣分,本题是求最大利润 ...

  3. 遭遇ORA-01078,LRM-00109,ORA-27046 SPFILE文件损坏

    今天在启动数据库时遭遇到 $ sqlplus / as sysdba SQL*Plus: Release 10.2.0.4.0 - Production on Tue Jul 16 21:28:03 ...

  4. 想做iPhoneX抢购活动?压测大师先教你优化网站后台

    北京时间9月13日凌晨1点,iPhone 10周年,在Apple Park乔布斯剧院,苹果发布了三款新iPhone.全面屏iPhone X来袭,这款被定义为未来的智能手机黑科技满满:全面屏,无线充电. ...

  5. Genymotion模拟器的安装及常见问题解决方法

    Genymotion是很好用很快的一款Android模拟器. 我们使用的时候下载一个免费版的就足够用了. 官网下载地址:http://www.genymotion.net/ 不过这个软件下载之前必须注 ...

  6. &lbrack;Oracle运维工程师手记&rsqb; 如何从trace 文件,判断是否执行了并行

    [Oracle运维工程师手记系列]如何从trace 文件,判断是否执行了并行 客户说,明明指定了并行的hint,OEM 却报说没有并行,并且提供了画面. 客户的SQL文长这样: INSERT/*+ p ...

  7. Pecan中api-paste&period;ini的解析

    在pecan中存在一个请求配置文件,定义服务启动程序app和过滤器filter,例如: [pipeline:main] pipeline = request_id sizelimit api-serv ...

  8. Unity中调用DLL库

    DLL -- Dynamic Link Library(动态链接库文件),这里以Window平台为例. Unity支持的两种语言生成的DLL库(C++.C#),这里以C#为例,C++网上可以搜索很详细 ...

  9. January 06th&comma; 2018 Week 01st Saturday

    In life the most interesting things tend to happen when you are on your way to do something else. 生活 ...

  10. Python基础-简介一

    一.Python介绍 1. Python的应用领域及流行程度 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间, ...