word、pdf等转换称txt

最近在做一个电子书的项目,这里面用到了一些文件转换的工具,在这里介绍一下:

1,Word文件转TXT文件

这里是用了一个apache的poi工具,可以在http://poi.apache.org/下载它的jar包,将poi-3.1-FINAL-20080629.jar,poi-contrib-3.1-FINAL-20080629.jar,poi-scratchpad-3.1-FINAL-20080629.jar三个文件复制到工程的WEB-INF/lib目录下。

解析的代码如下:

/**
* 将Word文件转换成txt文本文件
* @author annlee
*
* @param fis,源文件的文件输入流
* @param outputPath,输出文件的路径,这里指文件夹的路径
* @param outputFileName,输出文件的文件名,包括文件后缀名
* @return 转换成功返回字符串"OK";转换失败返回失败原因.
*/
public static String convertWordToTxt(FileInputStream fis,
    String outputPath, String outputFileName) {
   try {
   WordExtractor extractor = new WordExtractor(fis);
    String str = extractor.getText().trim(); // 获取Word文件中的字符

    String outputFile = outputPath + outputFileName + ".txt"; // 组装输出TXT文件的绝对路径

    FileOutputStream fos = new FileOutputStream(outputFile);
    fos.write(str.getBytes());
    fos.close();
   } catch (FileNotFoundException e) {
    return "文件不存在!";
   } catch (IOException e) {
    return "文件读写错误!";
   }
   return "OK";
}

2,PDF文件转TXT文件

这里是用了一个PDFBox工具,可以在http://www.netlikon.de/docs/PDFBox-0.7.2/lib/下载它的jar包,将PDFBox-0.7.2-log4j.jar,PDFBox-0.7.2.jar这两个文件复制到工程的WEB-INF/lib目录下。

这里多说一下,如果要通过程序生成PDF文件,有个工具很好用:iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。

解析的代码如下:

/**
* 将PDF文件转换成txt文本文件
* @author annlee
*
* @param fis,源文件的文件输入流
* @param outputPath,输出文件的路径,这里指文件夹的路径
* @param outputFileName,输出文件的文件名,包括文件后缀名
* @return 转换成功返回字符串"OK";转换失败返回失败原因.
*/
public static String convertPdfToTxt(FileInputStream fis,
    String outputPath, String outputFileName) {

   // 是否排序
   boolean sort = false;

   // 开始提取页数
   int startPage = 1;
   // 结束提取页数
   int endPage = Integer.MAX_VALUE;

   try {
    // 内存中存储的PDF Document
  PDDocument document = PDDocument.load(fis);

    String outputFile = outputPath + outputFileName + ".txt"; // 组装输出TXT文件的绝对路径

    FileOutputStream fos = new FileOutputStream(outputFile);

    OutputStreamWriter writer = new OutputStreamWriter(fos);

    // PDFTextStripper来提取文本
    PDFTextStripper stripper = new PDFTextStripper();
    // 设置是否排序
    stripper.setSortByPosition(sort);
    // 设置起始页
    stripper.setStartPage(startPage);
    // 设置结束页
    stripper.setEndPage(endPage);
    // 调用PDFTextStripper的writeText提取并输出文本
    stripper.writeText(document, writer);

    fos.close();
    writer.close();
   } catch (FileNotFoundException e) {
    return "文件不存在!";
   } catch (IOException e) {
    return "文件读写错误!";
   }
   return "OK";
}

 

 

 

 

3,PPT文件转TXT文件

这里也用的是apache的poi工具,解析的代码如下:

/**
* 将PPT文件转换成txt文本文件
*
* @author annlee
*
* @param fis,源文件的文件输入流
* @param outputPath,输出文件的路径,这里指文件夹的路径
* @param outputFileName,输出文件的文件名,包括文件后缀名
* @return 转换成功返回字符串"OK";转换失败返回失败原因.
*/
public static String convertPptToTxt(FileInputStream fis,
    String outputPath, String outputFileName) {
  
   StringBuffer content = new StringBuffer();
   try {
   SlideShow ss = new SlideShow(new HSLFSlideShow(fis));// 建立SlideShow
    Slide[] slides = ss.getSlides();// 获得每一张幻灯片
    for (int i = 0; i < slides.length; i++) {
     TextRun[] t = slides[i].getTextRuns();// 为了取得幻灯片的文字内容,建立TextRun
     for (int j = 0; j < t.length; j++) {
      content.append(t[j].getText());// 这里会将文字内容加到content中去
     }
     content.append(slides[i].getTitle()); //这里会将标题加到content中去
    }
    String outputFile = outputPath + outputFileName + ".txt"; // 组装输出TXT文件的绝对路径

    FileOutputStream fos = new FileOutputStream(outputFile);
    fos.write(content.toString().getBytes());
    fos.close();
   } catch (FileNotFoundException e) {
    return "文件不存在!";
   } catch (IOException e) {
    return "文件读写错误!";
   }
   return "OK";
}

3,EXCEL文件转TXT文件

这里也用的是apache的poi工具,解析的代码如下:

/**
* 将EXCEL文件转换成txt文本文件
*
* @author annlee
*
* @param fis,源文件的文件输入流
* @param outputPath,输出文件的路径,这里指文件夹的路径
* @param outputFileName,输出文件的文件名,包括文件后缀名
* @return 转换成功返回字符串"OK";转换失败返回失败原因.
*/
public static String convertXlsToTxt(FileInputStream fis,
    String outputPath, String outputFileName) {

   StringBuffer content = new StringBuffer();
   try {
  HSSFWorkbook workbook = new HSSFWorkbook(fis);// 创建对Excel工作簿文件的引用
    for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {
     if (null != workbook.getSheetAt(numSheets)) {
      HSSFSheet aSheet = workbook.getSheetAt(numSheets);// 获得一个sheet
      for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet
        .getLastRowNum(); rowNumOfSheet++) {
       if (null != aSheet.getRow(rowNumOfSheet)) {
        HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 获得一个行
        for (short cellNumOfRow = 0; cellNumOfRow <= aRow
          .getLastCellNum(); cellNumOfRow++) {
         if (null != aRow.getCell(cellNumOfRow)) {
          HSSFCell aCell = aRow.getCell(cellNumOfRow);// 获得列值
          if (aCell.getCellType() == 1) {
           content.append(aCell
             .getStringCellValue());
          } else if (aCell.getCellType() == 0) {
           content.append(Double.toString(aCell
             .getNumericCellValue())
             + ",");
          }
         }
        }
       }
      }
     }
    }
    String outputFile = outputPath + outputFileName + ".txt"; // 组装输出TXT文件的绝对路径

    FileOutputStream fos = new FileOutputStream(outputFile);
    fos.write(content.toString().getBytes());
    fos.close();
   } catch (FileNotFoundException e) {
    return "文件不存在!";
   } catch (IOException e) {
    return "文件读写错误!";
   }
   return "OK";
}

这里生成的TXT文件中可能包含着一些另类的字符,我们可以在写文件之前将这些字符去掉:

/**
* 去掉字符串中多余的字符
*/
public static String washString(String str){
   byte[] buffer = str.getBytes();
   byte[] buffernew = new byte[buffer.length];
   int j = 0;
   for(int i =0 ; i< buffer.length; i++){
    if((buffer[i] >=20 )||(buffer[i] < 0 )) {
     buffernew[j++] = buffer[i];
    }
   }
   String newStr = new String(buffernew);
   newStr = newStr.replaceAll("FORMTEXT", "");
   return newStr.trim();
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值