`

pio应用excel,word转html

 
阅读更多

package com.acdm.util;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.PicturesTable;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.hwpf.usermodel.Paragraph;  
import org.apache.poi.hwpf.usermodel.Table;  
import org.apache.poi.hwpf.usermodel.TableCell;  
import org.apache.poi.hwpf.usermodel.TableIterator;  
import org.apache.poi.hwpf.usermodel.TableRow;  


public class WordExcelToHtml {

 /**
  * 回车符ASCII码
  */
 private static final short ENTER_ASCII = 13;

 /**
  * 空格符ASCII码
  */
 private static final short SPACE_ASCII = 32;

 /**
  * 水平制表符ASCII码
  */
 private static final short TABULATION_ASCII = 9;

 public static String htmlText = "";
 public static String htmlTextTbl = "";
 public static int counter=0;
 public static int beginPosi=0;
 public static int endPosi=0;
 public static int beginArray[];
 public static int endArray[];
 public static String htmlTextArray[];
 public static boolean tblExist=false;
 
 public static final String inputFile="f://22.doc";
 public static void main(String argv[])
 {  
  try {
   //getWordAndStyle(inputFile);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 /**
  * 读取每个文字样式
  *
  * @param fileName
  * @throws Exception
  */

 
 public static void getWordAndStyle(String fileName,String path,String path2) throws Exception {
  FileInputStream in = new FileInputStream(new File(fileName));
  HWPFDocument doc = new HWPFDocument(in);
  
      Range rangetbl = doc.getRange();//得到文档的读取范围  
   TableIterator it = new TableIterator(rangetbl);
   int num=100;  
  
  
   beginArray=new int[num];
   endArray=new int[num];
   htmlTextArray=new String[num];
  
  
  
  
  

  // 取得文档中字符的总数
  int length = doc.characterLength();
  // 创建图片容器
  PicturesTable pTable = doc.getPicturesTable();
       
  htmlText = "<html><head><title>" + doc.getSummaryInformation().getTitle() + "</title></head><body>";
  // 创建临时字符串,好加以判断一串字符是否存在相同格式
  
   if(it.hasNext())
   {
    readTable(it,rangetbl);
   }
  
   int cur=0;
    
  String tempString = "";
  for (int i = 0; i < length - 1; i++) {
   // 整篇文章的字符通过一个个字符的来判断,range为得到文档的范围
   Range range = new Range(i, i + 1, doc);
   
   
   
   CharacterRun cr = range.getCharacterRun(0);
   //beginArray=new int[num];
    //endArray=new int[num];
    //htmlTextArray=new String[num];
   if(tblExist)
   {
    if(i==beginArray[cur])
    {  
     htmlText+=tempString+htmlTextArray[cur];
     tempString="";
     i=endArray[cur]-1;
     cur++;
     continue;
    }
   }
   if (pTable.hasPicture(cr)) {
    htmlText +=  tempString ;    
    // 读写图片    
    readPicture(pTable, cr,path2);
    tempString = "";    
   }
   else {
       
    Range range2 = new Range(i + 1, i + 2, doc);
    // 第二个字符
    CharacterRun cr2 = range2.getCharacterRun(0);
    char c = cr.text().charAt(0);
    
    System.out.println(i+"::"+range.getEndOffset()+"::"+range.getStartOffset()+"::"+c);
    
    // 判断是否为回车符
    if (c == ENTER_ASCII)
     {
     tempString += "<br/>";
     
     }
    // 判断是否为空格符
    else if (c == SPACE_ASCII)
     tempString += "&nbsp;";
    // 判断是否为水平制表符
    else if (c == TABULATION_ASCII)
     tempString += " &nbsp;&nbsp;&nbsp;";
    // 比较前后2个字符是否具有相同的格式
    boolean flag = compareCharStyle(cr, cr2);
    if (flag)
     tempString += cr.text();
    else {
     String fontStyle = "<span style="+"font-family:"+" + cr.getFontName() + "+";font-size:" + cr.getFontSize() / 2 + "pt;";
         
     if (cr.isBold())
      fontStyle += "font-weight:bold;";
     if (cr.isItalic())
      fontStyle += "font-style:italic;";
     
       htmlText += fontStyle + "mce_style="+"font-family:"+" + cr.getFontName() + "+";font-size:" + cr.getFontSize() / 2 + "pt;";    
     if (cr.isBold())
      fontStyle += "font-weight:bold;";
     if (cr.isItalic())
      fontStyle += "font-style:italic;";
     
     htmlText += fontStyle + ">" + tempString + cr.text()+"</span> " ;
     
     tempString = "";
    }
   }
  }

  htmlText += tempString+"</body></html>";
  writeFile(htmlText,path);
 }
 
 /**
  * 读写文档中的表格
  *
  * @param pTable
  * @param cr
  * @throws Exception
  */
 public static void readTable(TableIterator it, Range rangetbl) throws Exception {

  htmlTextTbl="";
      //迭代文档中的表格 
  
        counter=-1;
        while (it.hasNext())
        {
         tblExist=true;
          htmlTextTbl="";
          Table tb = (Table) it.next();   
          beginPosi=tb.getStartOffset() ;
          endPosi=tb.getEndOffset();
         
          System.out.println("............"+beginPosi+"...."+endPosi);
          counter=counter+1;
          //迭代行,默认从0开始
          beginArray[counter]=beginPosi;
          endArray[counter]=endPosi;
         
          htmlTextTbl+="<table border>";
       for (int i = 0; i < tb.numRows(); i++) {     
    TableRow tr = tb.getRow(i);  
   
    htmlTextTbl+="<tr>";
    //迭代列,默认从0开始  
    for (int j = 0; j < tr.numCells(); j++) {     
     TableCell td = tr.getCell(j);//取得单元格
     int cellWidth=td.getWidth();
    
     //取得单元格的内容  
     for(int k=0;k<td.numParagraphs();k++){     
                Paragraph para =td.getParagraph(k);     
                String s = para.text().toString().trim();  
                if(s=="")
                {
                 s=" ";
                }
                System.out.println(s);  
                htmlTextTbl += "<td width="+cellWidth+ ">"+s+"</td>";
                System.out.println(i+":"+j+":"+cellWidth+":"+s);
           } //end for      
        }   //end for  
     }   //end for  
      htmlTextTbl+="</table>" ;   
      htmlTextArray[counter]=htmlTextTbl;
 
        } //end while
 } 
 
 /**
  * 读写文档中的图片
  *
  * @param pTable
  * @param cr
  * @throws Exception
  */
 public static void readPicture(PicturesTable pTable, CharacterRun cr,String path2) throws Exception {
  // 提取图片
  Picture pic = pTable.extractPicture(cr, false);
  // 返回POI建议的图片文件名
  String afileName = pic.suggestFullFileName();
  OutputStream out = new FileOutputStream(new File(path2 + File.separator + afileName));
  pic.writeImageContent(out);
  htmlText += "<img src='"+path2 +"\\"+afileName + "' mce_src='"+path2 +"\\"+ afileName + "'/>";
 }
 public static boolean compareCharStyle(CharacterRun cr1, CharacterRun cr2)
 {
  boolean flag = false;
  if (cr1.isBold() == cr2.isBold() && cr1.isItalic() == cr2.isItalic() && cr1.getFontName().equals(cr2.getFontName()) && cr1.getFontSize() == cr2.getFontSize())
  {
   flag = true;
  }
  return flag;
 }
 

 /**
  * 写文件
  *
  * @param s
  */
 public static void writeFile(String s,String path) {
  FileOutputStream fos = null;
  BufferedWriter bw = null;
  try {
   File file = new File(path);
   fos = new FileOutputStream(file);
   bw = new BufferedWriter(new OutputStreamWriter(fos));
   bw.write(s);
  } catch (FileNotFoundException fnfe) {
   fnfe.printStackTrace();
  } catch (IOException ioe) {
   ioe.printStackTrace();
  } finally {
   try {
    if (bw != null)
     bw.close();
    if (fos != null)
     fos.close();
   } catch (IOException ie) {
   }
  }
 }


}

分享到:
评论
1 楼 room2007126 2011-10-10  

相关推荐

    PIO的EXCEL的写入和导出

    标题中的“PIO的EXCEL的写入和导出”指的是使用编程接口(PIO,Programmable Input/Output)来操作Excel文件,实现数据的写入和读取功能。在IT行业中,这通常涉及到使用特定的库或框架,如Apache POI、JExcelAPI等,...

    excel转换html类(Excel2HtmlUtil的JAVA类)

    【标签】"Excel2HtmlUt"可能是`Excel2HtmlUtil`的缩写,"office xls转html"则明确表示了转换的目标是从Office的Excel文件(xls格式)转换为HTML。XLS是Excel早期版本的文件格式,而Apache POI可以支持这种格式。 ...

    PIO导入大量数据时的解决内存溢出问题.doc

    PIO 是一个 Java 库,用来读取和写入 Microsoft Office 文档,如 Excel、Word 等。然而,在导入大量数据时,PIO 经常会出现内存溢出的问题。这种情况下,我们需要找到一种方法来解决这个问题。 解决方法之一是使用...

    word转pdf在linux与Windows都可用,移植性好

    ### Word转PDF在Linux与Windows环境下的应用及移植性 #### 概述 在软件开发过程中,经常需要处理文档格式转换的问题,特别是在不同操作系统之间确保文档的兼容性和一致性时尤为重要。例如,在项目开发中可能会遇到...

    PIO操作Word依赖的Jar

    PIO操作Word依赖的Jar,包含poi-3.17.jar poi-examples-3.17.jar poi-excelant-3.17.jar poi-ooxml-3.17.jar poi-ooxml-schemas-3.17.jar poi-scratchpad-3.17.jar poi-tl.jar

    JAVA读取WORD_EXCEL_POWERPOINT_PDF文件的方法(poi)

    JAVA 读取 WORD_EXCEL_POWERPOINT_PDF 文件的方法(poi) JAVA 读取 WORD_EXCEL_POWERPOINT_PDF 文件的方法是使用 Apache POI 库来实现的。POI 库是一个开放源代码的 Java 库,提供了对 Microsoft Office 文件格式...

    JAVA_Poi.rar_Java 解析WORD_POI word_java pio_pressureulb_word解析

    标题中的"Java 解析WORD_POI word_java pio_pressureulb_word解析"指出了主要的技术点:使用Java的Apache POI库解析Word文档。Apache POI提供了一个名为HWPF(Horrible Word Processor Format)的API用于处理旧版的....

    word解析为HTML--POI解析

    Apache POI是一个强大的Java库,专门用于处理Microsoft Office格式的文件,包括Word(.doc和.docx)、Excel(.xls和.xlsx)以及PowerPoint(.ppt和.pptx)。本篇将详细讲解如何利用POI库来实现Word到HTML的解析,并...

    java操作Excel jar包 pio

    java操作Excel jar包 pio java开发第三方工具包

    PIO 开发工具包

    PIO(POI.IO)是一个针对Android平台的开发工具包,其核心是利用了Apache POI库的功能,使得开发者能够轻松地在Android应用程序中处理Microsoft Office格式的文档,特别是Word文档。Apache POI是Java领域内广泛使用...

    java pio 读取 Excel 文件并写入 mysql-附件资源

    java pio 读取 Excel 文件并写入 mysql-附件资源

    PIO设置xls样式

    PIO对excel文件单元格合并等操作~

    基于pio的报表操作

    PIO是一个强大的Java库,它允许开发者在服务器端处理Microsoft Office文档,如Word、Excel和PowerPoint,而无需安装Office软件。通过PIO,我们可以读取、创建和修改这些文档,这在报表生成和自动化办公流程中非常...

    POI的EXCEL导出,自动换行

    它包括对Word(DOCX),Excel(XLSX)等文件格式的支持。对于Excel文件的操作主要通过两个核心API来完成:`HSSFWorkbook`和`XSSFWorkbook`,分别对应于旧版Excel(.xls)和新版Excel(.xlsx)文件格式。 #### 二、...

    pio实现报表生成

    标题中的“pio实现报表生成”指的是使用Java编程语言和Pentaho Data Integration(通常缩写为Kettle或PDI,其中PIO是Pentaho Interactive Reporting的简称)工具来创建动态的、自定义的报表并将其导出为Excel格式。...

    pio的jar包使用例子,有详细注释一看就懂

    PIO,全称为“Processing IO”,是一个用于处理各种文件格式,尤其是Microsoft Office格式(如Excel、Word和PowerPoint)的Java库。这个标题指出我们将探讨一个使用PIO的jar包的实际案例,该案例包含详尽的注释,...

    AT91RM9200_PIO.rar_9200_AT91rm9200 PIO_at91rm9200_pio

    这个文档可能包含了关于如何在实际项目中设置和使用AT91RM9200 PIO的详细教程,包括示例代码和注意事项,是学习和应用PIO的重要参考资料。 6. www.pudn.com.txt: 此文件可能来源于一个技术分享网站,可能包含更...

    AT91RM9200 PIO中断在短波通信系统中的应用

    "AT91RM9200 PIO中断在短波通信系统中的应用" 本文主要讨论了AT91RM9200 PIO中断在短波通信系统中的应用,通过扩展AT91RM9200中断处理能力,将通用IO配置为中断输入,并针对负脉冲中断信号的二次响应问题提出2种...

    PIO基础鸽群优化算法

    PIO算法以其简单易实现、适应性强和优化效果优秀等特点,被广泛应用在复杂问题的求解中,特别是在工程和科学计算中。 1. **PID控制器与鸽群行为** PID控制器是工业自动化中的常见控制策略,而PIO算法则借鉴了其中...

    PIO_鸽群_鸽群算法_鸽群PIO_pio_PIO算法_

    【标题】"PIO_鸽群_鸽群算法_鸽群PIO_pio_PIO算法_" 提到的核心概念是“鸽群算法”(Pigeon Inspired Optimization, 简称PIO),这是一种受到自然界鸽子行为启发的优化算法。在信息技术领域,优化算法被广泛应用于...

Global site tag (gtag.js) - Google Analytics