`
uu011
  • 浏览: 30732 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java生成word,html文件并将内容保存至数据库

    博客分类:
  • java
 
阅读更多
在最近的一个项目中需要将一段字符类型的文本存为word,html并要将word的内容保存在数据库中,于是就有了如下的一个工具类,希望能对碰到这样需求的朋友提供点帮助。
       匆匆忙忙的就copy上来了,没有做一些删减,有一些多余的东西,有兴趣的朋友可以自行略去。我的注释相对比较清楚,可以按照自己的需求进行组合。
      在操作word的地方使用了jacob(jacob_1.9),这个工具网上很容易找到,将jacob.dll放置系统Path中,直接放在system32下也可以,jacob.jar放置在classPath中。


代码如下:WordBridge.java

/**
* WordBridge.java
*/
package com.kela.util;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import com.kela.db.PoolingDataSource;

/**
* 说明: 对word的操作 <p>
*
* @author   kela.kf@gmail.com
*/
public class WordBridge {

   Log log = LogFactory.getLog("WordBridgt");

   private ActiveXComponent MsWordApp = null;
   private Dispatch document = null;
   
    /**
     * 打开word
     * @param makeVisible, true显示word, false不显示word
     */
    public void openWord(boolean makeVisible) {
       if (MsWordApp == null) {
         MsWordApp = new ActiveXComponent("Word.Application");
       }
 
       Dispatch.put(MsWordApp, "Visible", new Variant(makeVisible));
    }

    /**
     * 创建新的文档
     *
     */
    public void createNewDocument() {
       Dispatch documents = Dispatch.get(MsWordApp, "Documents").toDispatch();
       document = Dispatch.call(documents, "Add").toDispatch();
    }

    /**
     * 关闭文档
     */
    public void closeDocument() {
      // 0 = wdDoNotSaveChanges
      // -1 = wdSaveChanges
      // -2 = wdPromptToSaveChanges
      Dispatch.call(document, "Close", new Variant(0));
      document = null;
    }

    /**
     * 关闭word
     *
     */
    public void closeWord() {
       Dispatch.call(MsWordApp, "Quit");
       MsWordApp = null;
       document = null;
    }

    /**
     * 插入文本
     * @param textToInsert 文本内容
     */
    public void insertText(String textToInsert) {
       Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch();
       Dispatch.put(selection, "Text", textToInsert);
    }

    /**
     * 保存文件
     * @param filename
     */
    public void saveFileAs(String filename) {
      Dispatch.call(document, "SaveAs", filename);
    }

    /**
     * 将word转换成html
     * @param htmlFilePath
     */
    public void wordToHtml(String htmlFilePath) {
         Dispatch.invoke(document,"SaveAs", Dispatch.Method, new Object[]{htmlFilePath,new Variant(8)}, new int[1]);
     }

    /**
     * 保存word的同时,保存一个html
     * @param text 需要保存的内容
     * @param wordFilePath word的路径
     * @param htmlFilePath html的路径
     * @throws LTOAException
     */
    public void wordAsDbOrToHtml(String text, String wordFilePath, String htmlFilePath) throws LTOAException {
 
      try {
         openWord(false);
         createNewDocument();
         insertText(text);
         saveFileAs(wordFilePath);
         wordToHtml(htmlFilePath);
     } catch (Exception ex) {
         log.error("错误 - 对word的操作发生错误");
         log.error("原因 - " + ex.getMessage());
         throw new LTOAException(LTOAException.ERR_UNKNOWN, "对word的操作发生错误("
                    + this.getClass().getName() + ".wordAsDbOrToHtml())", ex);
     } finally {
         closeDocument();
         closeWord();
     }
 
   }

   /**
    * 将word保存至数据库
    * @param wordFilePath
    * @param RecordID
    * @throws LTOAException
    */
    public void wordAsDatabase(String wordFilePath, String RecordID) throws LTOAException {

       Connection conn = null;
       PreparedStatement pstmt = null;
       PoolingDataSource pool = null;
       
       File file = null;
    
       String sql = "";
       try {
           sql = " UPDATE Document_File SET FileBody = ? WHERE RecordID = ? ";
           
           pool = new PoolingDataSource();
           conn = pool.getConnection();
        
           file = new File(wordFilePath);
           InputStream is = new FileInputStream(file);
           byte[] blobByte = new byte[is.available()];
           is.read(blobByte);
           is.close();

          pstmt = conn.prepareStatement(sql);
          pstmt.setBinaryStream(1,(new ByteArrayInputStream(blobByte)), blobByte.length);
          pstmt.setString(2, RecordID);
          pstmt.executeUpdate();
     
        } catch (Exception ex) {
            log.error("错误 - 表 Document_File 更新数据发生意外错误");
            log.error("原因 - " + ex.getMessage());
            throw new LTOAException(LTOAException.ERR_UNKNOWN,
                   "表Document_File插入数据发生意外错误("
                    + this.getClass().getName() + ".wordAsDatabase())", ex);
         } finally {
             pool.closePrepStmt(pstmt);
             pool.closeConnection(conn);
        }
    }

   /**
    * 得到一个唯一的编号
    * @return 编号
    */
   public String getRecordID() {
 
     String sRecordID = "";
 
     java.util.Date dt=new java.util.Date();
        long lg=dt.getTime();
        Long ld=new Long(lg);
        sRecordID =ld.toString();
       
        return sRecordID;
    }

    /**
     * 得到保存word和html需要的路径
     * @param systemType 模块类型 givInfo, sw, fw
     * @param fileType 文件类型 doc, html
     * @param recID 文件编号
     * @return 路径
     */
     public String getWordFilePath(String systemType, String fileType, String recID) {
 
       String filePath = "";
 
       File file = new File(this.getClass().getResource("/").getPath());

       filePath = file.getPath().substring(0, file.getPath().length() - 15);
       
       if(systemType.equalsIgnoreCase("govInfo")) {
  
           if(fileType.equalsIgnoreCase("doc"))
               filePath = filePath + "/uploadFiles/govInfo/document/" + recID + ".doc";
            else if(fileType.equalsIgnoreCase("htm"))
               filePath = filePath + "/HTML/govInfo/" + recID + ".htm";
        } else if(systemType.equalsIgnoreCase("sw")){
            if(fileType.equalsIgnoreCase("doc"))
              filePath = filePath + "/uploadFiles/sw/document/" + recID + ".doc";
            else if(fileType.equalsIgnoreCase("htm"))
              filePath = filePath + "/HTML/sw/" + recID + ".htm";
         } else if(systemType.equalsIgnoreCase("fw")) {
              if(fileType.equalsIgnoreCase("doc"))
                 filePath = filePath + "/uploadFiles/fw/document/" + recID + ".doc";
              else if(fileType.equalsIgnoreCase("htm"))
                 filePath = filePath + "/HTML/fw/" + recID + ".htm";
         }
 
        return filePath;
    }
}
分享到:
评论

相关推荐

    JAVA根据数据库表生成word表格文档

    在Java编程中,生成Word表格文档通常涉及到使用第三方库,如Apache POI,这是一个流行的API,专门用于处理Microsoft Office格式的文件,包括Word(.doc/.docx)。本篇文章将深入探讨如何使用Java和Apache POI从...

    java 动态获取数据库信息生成word(含表格,柱状图),并下载.docx

    Java 动态生成 Word 文档(含表格、柱状图)并下载是指利用 Java 语言动态获取数据库信息,并将其生成为 Word 文档(含表格、柱状图),并提供下载功能。该功能主要应用于数据报表生成和下载,例如测试报告、统计...

    PageOffice Java开发 实现Word文件的批量生成

    在IT行业中,尤其是在Java开发领域,批量生成Word文档是一项常见的需求,特别是在大数据处理、报告生成或自动化办公场景中。PageOffice是一款强大的Java组件,专为处理Office文档提供解决方案,包括创建、编辑、转换...

    java代码实现填充word模板生成word合同的实例

    本实例将探讨如何使用Java代码实现填充Word模板并生成Word合同。 首先,我们需要理解Apache POI库。Apache POI是Java平台上的一个开源项目,它允许Java应用程序读取、写入和修改Microsoft Office格式的文件,包括...

    java生成word的实例 java导出Word文档的实例

    以上就是使用Java生成Word文档的基本步骤和关键知识点。实际应用中,你可以根据需求扩展这些基本元素,构建更复杂的Word文档结构。在处理大量数据或复杂格式时,理解并熟练运用Apache POI库至关重要。

    java调用ireport生成word报告

    - 运行上述Java程序,将自动填充报表模版,并根据指定的输出路径生成Word文档。 #### 五、总结 通过上述步骤,我们可以轻松地使用Java调用iReport工具来生成Word报告。此外,对于需要生成Excel或PDF格式的报告,只...

    Java操作Word模板实现动态数据输出

    本系统的主要目标是让用户能够通过下拉列表选择部门数据,然后通过单击“创建名单”按钮,系统自动生成数据并将数据填充到Word模板中,生成Word文件供用户下载。当用户点击下载图标后,会弹出“文件下载/文件打开”...

    java XML解析方式实现自动生成word文档

    在Java编程环境中,生成Word文档是一项常见的任务,尤其在企业级应用中,如报告生成、数据分析等场景。XML解析方式是一种高效且灵活的方法,能够帮助我们实现这一目标。本篇文章将详细探讨如何利用Java和XML解析来...

    java生成word模板详解

    Java生成Word模板是一种常见的技术,尤其在企业级应用中,用于自动生成报告、合同或任何需要格式化的文本文档。这个技术通常涉及到Java的IO流处理、模板引擎以及可能的库如Apache POI或OpenOffice API。 Apache POI...

    Java自动生成Mysql数据库结构

    然后,它将这些信息整理成易于阅读的文本格式,并保存为TXT文件。 JDBC是Java连接数据库的标准接口,它允许开发者编写不依赖特定数据库系统的代码。通过加载数据库驱动,建立数据库连接,执行SQL语句,然后处理返回...

    java生成Word代码

    在Java编程环境中,生成...以上就是使用Java生成Word文档的关键知识点。在实际开发中,你可能还需要结合MVC框架、数据库操作等进行更复杂的集成。通过掌握这些技术,你可以构建强大的文档生成系统,满足各种业务需求。

    java调用PageOffice生成word

    总的来说,Java调用PageOffice生成Word是一种高效、灵活的方法,尤其适用于需要从数据库中动态获取数据并填充到文档的场景。通过熟练掌握PageOffice的使用,开发者可以提升企业级应用的文档处理能力,提高工作效率。

    java生成数据库字典表mysql doc-generator

    Java生成数据库字典表MySQL Doc-Generator是一款实用的工具,旨在帮助开发者将MySQL数据库中的表结构信息导出为Word文档,方便进行数据库设计文档的整理和分享。这个工具简化了手动编写数据库字典表的过程,提高了...

    通过数据库生成Word文档

    这里我们将深入探讨如何实现这一过程,并重点关注MySQL数据库的表结构和注释的提取,以及如何利用Java的iText库生成Word文档。 首先,MySQL是一个广泛使用的开源关系型数据库管理系统,其强大的功能和灵活性使其...

    基于Java的简单数据库设计生成工具(生成Excel文档)

    5. **保存和导出**: 最后,生成的Excel文件会被保存并提供给用户下载,便于他们在Excel环境中进一步处理或分享这些数据。 这个工具对于数据库管理员、开发人员和数据分析师来说非常有用,因为它允许他们快速地查看...

    java写的把数据库表转文档(word或excel)

    总的来说,这个项目展示了Java在数据处理和文档生成方面的强大能力,通过利用JDBC连接数据库,结合Apache POI库将数据库表数据转化为易于阅读和分享的Word或Excel文档。这样的工具对于数据分析师、数据库管理员和...

    java 前台数据和echarts图表导出为word文件的jar

    3. **Java端处理**:使用Apache POI创建Word文档,并将Echarts生成的图表图片插入到文档中。可以使用`XWPFDocument`、`XWPFParagraph`、`XWPFPicture`等类来创建和编辑文档内容。 4. **图片处理**:将前端生成的...

    使用java Apache poi 根据word模板生成word报表.rar

    5. **写入输出文件**:完成所有替换后,我们需要创建一个新的Word文档并使用XWPFDocument的write方法将更新后的内容写入。 6. **资源释放**:最后,确保关闭所有打开的流,以避免内存泄漏。 压缩包中的“word...

    java生成word文件并下载.pdf

    这段代码展示了如何在Java中使用FreeMarker模板引擎生成Word文档并进行下载。FreeMarker是一个开源模板引擎,可以用于生成文本输出,如HTML、XML、Word文档等。在这个例子中,`WordUtil` 类提供了两个主要方法: 1....

    springboot实现根据指定pdf、word模板文件填充值到文件里面,生成对应的文件

    6. **生成新文件**:完成替换后,使用POI或iText保存为新的Word或PDF文件,并返回生成文件的URL或将其作为HTTP响应的一部分发送给客户端。 7. **错误处理和资源管理**:确保正确关闭打开的文件流和释放占用的资源,...

Global site tag (gtag.js) - Google Analytics