`
234390216
  • 浏览: 10233455 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462658
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775555
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398395
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395028
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679999
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530905
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1184013
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:467977
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151405
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68163
社区版块
存档分类
最新评论

POI生成Web版Word文件

    博客分类:
  • poi
阅读更多

 

POI生成WebWord文件

 

1       通过URL的输入流实现

2       直接把Html文本写入到Word文件 

       所谓的使用POI生成WebWord文件是指利用POIHtml代码插入到Word文件中使之呈现出Html代码对应的Web样式。下面将介绍两种方法来实现这一功能。

 

1       通过URL的输入流实现

       通过URL实现的方式主要分为以下几步:

  1. 根据对应资源的Http路径构建一个URL
  2. 获取URL对应的输入流。
  3. 构建一个默认的POIFSFileSystem
  4. 通过构建的POIFSFileSystemURL对应的输入流创建一个WordDocument
  5. 把构建的POIFSFileSystem写入到对应的输出流。

       经过上述五步,我们就可以把一个Http路径对应的内容写入到一个Word输出流中了。下面是一个把百度主页写入到一个本地Word文件中的示例:

 
   /**
    * Html到Word
    * @throws Exception
    */
   @org.junit.Test
   public void htmlToWord() throws Exception {
      URL url = new URL("http://www.baidu.com");
      InputStream is = url.openStream();
      OutputStream os = new FileOutputStream("d:\\baidu.doc");
      this.inputStreamToWord(is, os);
   }
 
   /**
    * 把is写入到对应的word输出流os中
    * 不考虑异常的捕获,直接抛出
    * @param is
    * @param os
    * @throws IOException
    */
   private void inputStreamToWord(InputStream is, OutputStream os) throws IOException {
      POIFSFileSystem fs = new POIFSFileSystem();
      //对应于org.apache.poi.hdf.extractor.WordDocument
      fs.createDocument(is, "WordDocument");
      fs.writeFilesystem(os);
      os.close();
      is.close();
   }

 

       使用这种方式有一个不好的地方是你不一定有访问对应URL的权限,这个时候我们写入到Word文件的内容可能就是错误的。打个简单的比方,某一个URL需要进行登录了之后才能访问,这个时候你直接使用URL去对它进行访问可能会被系统引导到登录页面,如果这个时候把其对应的输入流写入到目标Word文件中,那么我们得到的Word文件的内容将是系统的登录页面,而不是目标URL原本应该对应的资源。有朋友可能会说了,这好办,我们可以使用对应用户信息来进行一次登录,之后再获取对应URL对应的资源。这样也可以实现。这里我要介绍第二种方式。

 

2       直接把Html文本写入到Word文件

       曾经遇到这么一个需求,在某一个文件的查看页面,有一个导出为Word文件的功能。相信这是一个比较常见的需求。我当时的一个想法是既然文件的内容都已经在页面上了,那么我直接拿着文件的内容写入到Word文件不就完了。我当时是这么做的:

  1. 获取查看页面的body内容和引用的css文件路径传入到后台。
  2. 把对应css文件的内容读取出来。
  3. 利用body内容和css文件的内容组成一个标准格式的Html文本。
  4. 根据组合后的Html文本生成对应的ByteArrayInputStream
  5. 构建一个默认的POIFSFileSystem,并利用它和生成的ByteArrayInputStream创建一个WordDocument
  6. 把构建的POIFSFileSystem写入到对应的输出流。

       经过上面这几步之后我们就可以把Html格式的文本写入到Word文件中,同时使生成的Word文件呈现出对应的Web样式。需要注意的是原本Html文件中引用到的css文件的内容需要放到生成的Word文件中,生成后的Word文件才会呈现出对应的Web样式。下面是一个针对于该方式的一个简单例子:

 
   @org.junit.Test
   public void htmlToWord2() throws Exception {
      InputStream bodyIs = new FileInputStream("d:\\1.html");
      InputStream cssIs = new FileInputStream("d:\\1.css");
      String body = this.getContent(bodyIs);
      String css = this.getContent(cssIs);
      //拼一个标准的HTML格式文档
      String content = "<html><head><style>" + css + "</style></head><body>" + body + "</body></html>";
      InputStream is = new ByteArrayInputStream(content.getBytes("GBK"));
      OutputStream os = new FileOutputStream("d:\\1.doc");
      this.inputStreamToWord(is, os);
   }
  
   /**
    * 把is写入到对应的word输出流os中
    * 不考虑异常的捕获,直接抛出
    * @param is
    * @param os
    * @throws IOException
    */
   private void inputStreamToWord(InputStream is, OutputStream os) throws IOException {
      POIFSFileSystem fs = new POIFSFileSystem();
      //对应于org.apache.poi.hdf.extractor.WordDocument
      fs.createDocument(is, "WordDocument");
      fs.writeFilesystem(os);
      os.close();
      is.close();
   }
  
   /**
    * 把输入流里面的内容以UTF-8编码当文本取出。
    * 不考虑异常,直接抛出
    * @param ises
    * @return
    * @throws IOException
    */
   private String getContent(InputStream... ises) throws IOException {
      if (ises != null) {
         StringBuilder result = new StringBuilder();
         BufferedReader br;
         String line;
         for (InputStream is : ises) {
            br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
            while ((line=br.readLine()) != null) {
                result.append(line);
            }
         }
         return result.toString();
      }
      returnnull;
   }

  

       其中,文件1.html对应的内容如下:

<table cellpadding="5" style="border-collapse: collapse;">
       <tr>
              <td>中文</td>
              <td>中文</td>
              <td>中文</td>
              <td>中文</td>
       </tr>
       <tr>
              <td>中文</td>
              <td>中文</td>
              <td>中文</td>
              <td>中文</td>
       </tr>
</table>

  

       文件1.css对应的内容如下:

table {
       border: 1px solid blue;
       width: 800px;
       height: 500px;
       text-align: center;
}
td {
       width: 200px;
       border: 1px solid blue;
}

  

       最后生成的Word文件效果如下:



 

附注

       上述例子是在Maven项目中做的,主要引用的依赖项有:

   <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-scratchpad</artifactId>
      <version>3.9</version>
   </dependency>
   <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
   </dependency>

 

 

  

 

 

  • 大小: 1.3 KB
分享到:
评论
5 楼 18335864773 2019-03-04  
推荐用pageoffice 生成 word。POI处理Office2003的doc、xls文件和Office2007的docx、xlsx文件用的是接口完全不兼容的两组对象,POI用来解析.doc、.xls那部分的组件是残缺不全的并且也已经不再更新了。PageOffice提供Word、Excel的简化对象接口,功能齐全,读写文档的调用代码完全统一,并且调用代码比POI、JXL简单很多。
4 楼 behurry 2016-02-03  
如何生成word07版本的docx文件呢?
3 楼 234390216 2015-01-16  
sqh_me1232008 写道
写入word文件的中文都是乱码。看有问题解决不

应该是你编码处理不对。乱码往往是由于编码与解码不一致导致的。
2 楼 sqh_me1232008 2015-01-05  
写入word文件的中文都是乱码。看有问题解决不
1 楼 clw123 2014-06-13  
非常感谢,学习了

相关推荐

    android中poi生成word文档和excel文档

    在标题“android中poi生成word文档和excel文档”中提到的使用POI库生成Word和Excel文档,主要涉及到以下几个关键知识点: 1. **Apache POI 概述**:Apache POI 是一个开源项目,提供了一套API,用于读写Microsoft ...

    使用poi根据模版生成word文档并转换成PDF文件

    本文将深入探讨如何利用Apache POI框架根据模板生成Word文档,并进一步将其转换为PDF文件。 首先,Apache POI提供了一个名为HWPF(Horrible Word Processor Format)的组件,用于处理Word文档。通过这个组件,我们...

    利用Java Apache POI 生成Word文档示例代码

    本篇文章提供了一个简单的示例代码,演示了如何使用Apache POI生成Word文档。开发者可以根据自己的需要,调整和修改示例代码,以满足自己的需求。 知识点: 1.Archive POI是一个开源的Java库,用于对Microsoft ...

    POI生成word文档

    在这个场景中,我们关注的是使用POI来生成Word文档。POI库提供了丰富的API,使得开发者能够轻松地创建、修改和读取Word文档,从而实现自动化报告、文档生成等需求。 首先,我们需要理解如何在Java中设置开发环境。...

    java POI生成word.zip

    在本案例中,"java POI生成word.zip"是一个压缩包,包含使用Java POI库生成Word文档的示例代码。以下是基于这个主题的相关知识点: 1. **Java POI库介绍** - Java POI 是一套API,用于处理Microsoft Office格式的...

    java poi 通过模板生成word文档

    在这个场景中,我们关注的是使用POI来通过模板生成Word文档。这个过程通常涉及到读取一个预先设计好的Word模板,然后在运行时替换模板中的特定占位符或变量,生成个性化的文档。 首先,让我们了解如何准备模板。一...

    Java使用poi-tl生成word文档

    Java使用Apache POI-TL库生成Word文档是一个高效且灵活的方法,尤其在处理大量结构化数据时。Apache POI是一个广泛使用的开源库,它允许Java开发者读写Microsoft Office格式的文件,而POI-TL(Template-based ...

    java--Poi 生成word文档

    在"WordText"这个文件中,可能包含了使用POI生成的Word文档示例代码或生成的文档本身。通过查看和分析这些代码,你可以更好地理解如何实际操作这些API来实现你的需求。 总的来说,Apache POI是Java开发人员处理Word...

    使用java Apache poi 根据word模板生成word报表例子

    使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持。 使用说明:https://blog.csdn.net/u012775558/article/details/79678701

    java poi操作word模版文件生成表单和修改

    在实际项目中,你可能会使用模板引擎(如FreeMarker或Velocity)结合Java POI,来动态生成Word内容。这样可以根据用户输入的数据动态替换模板中的占位符,实现更灵活的表单生成。 为了处理上传和下载文件,你可能还...

    poi合并多个word文档并设置页码

    Apache POI是一个流行的Java库,专门用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在"poi合并多个word文档并设置页码"这个主题中,我们将深入探讨如何利用POI API来实现这两个功能。 首先,让...

    POI-TL合并多个Word文档

    总结起来,"POI-TL合并多个Word文档"涉及到的关键技术有Apache POI的XWPF组件用于读写.docx文件,以及POI-TL库提供的模板处理功能,使得在Java程序中高效地合并和生成Word文档成为可能。这在处理批量报告、合同生成...

    JAVA用POI生成Word文档

    要使用POI生成Word文档,首先需要在项目中引入Apache POI的相关依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi &lt;version&gt;4.1.2 &lt;groupId&gt;...

    POI按word模版生成合同并生成PDF(修复生成pdf功能)

    在IT行业中,Apache POI是一个广泛使用的库,主要用于读取、写入以及操作Microsoft Office格式的文件,如Word、Excel和PowerPoint。本项目聚焦于使用Apache POI库按照预设的Word模板生成合同,并进一步将生成的合同...

    Java POI 生成Word文档所需的jar包

    本篇文章将详细讲解如何利用Java POI生成Word文档,并介绍与之相关的jar包。 首先,我们来看一下Java POI的核心组件: 1. poi-3.11-20141221.jar:这是POI项目的主库,包含了处理Excel(HSSF)和Word(HWPF)的基本...

    Java通过POI读取Excel遍历数据,批量生成word文档

    本教程将重点讲解如何使用Apache POI库来读取Excel数据,并基于这些数据批量生成Word文档。Apache POI是一个开源项目,它允许Java开发者处理Microsoft Office格式的文件,如Excel(.xlsx或.xls)和Word(.docx)。 ...

    Apache poi 根据word模板生成word报表 替换 循环列表 图片

    在处理Word文档时,POI提供了HWPF(Horrible Word Processor Format)用于处理旧版的DOC格式,以及XWPF(eXtended Word Processing Format)用于处理较新的DOCX格式。在这个场景中,我们更可能使用XWPF,因为它支持...

    Java Poi流根据Word模板插入相应的文本、表格和图片,并生成新的Word报告。

    总结一下,生成Word报告的过程主要包括以下步骤: 1. 加载Word模板:创建XWPFDocument对象,传入模板文件的输入流。 2. 替换文本:查找模板中的占位符,使用XWPFParagraph和XWPFRun替换文本。 3. 处理表格:查找或...

    java poi设置生成的word的图片为上下型环绕以及其位置的实现

    在使用 Java POI 库生成 Word 文档时,有时我们需要对插入的图片进行格式调整,比如设置为上下型环绕,使其在文本中占据独立空间,同时可以调整图片的位置。在默认情况下,POI 会将图片设置为嵌入型,这可能导致图片...

Global site tag (gtag.js) - Google Analytics