汉字转拼音,java读取各品种的文本

by admin on 2019年1月31日

在有些要求当中大家须要抓取字段并且填充到excel表格里面,最终将excel表格转换成pdf格式实行输出,我第四遍接触那么些要求时,境遇多少个相比较费力的难点,现在各类列出并且提供解决方案。

java读取各项目标文书

用到的多少个包

bcmail-jdk14-132.jar/bcprov-jdk14-132.jar/checkstyle-all-4.2.jar/FontBox-0.1.0-dev.jar/lucene-core-2.0.0.jar/PDFBox-0.7.3.jar/poi-3.0-alpha3-20061212.jar/poi-contrib-3.0-alpha3-20061212.jar/poi-scratchpad-3.0-alpha3-20061212.jar

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.model.TextRun;
import org.apache.poi.hslf.usermodel.SlideShow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.pdfbox.pdfparser.PDFParser;
import org.pdfbox.util.PDFTextStripper;

public class Test {

/**
* @param args
*/
public static void p(Object obj) {
   System.out.println(obj);
}

public static void main(String[] args) {
   try {
    p(readPpt(“src/1.dps”));
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

}
//读取ppt
public static String readPpt(String path) throws Exception {

   StringBuffer content = new StringBuffer(“”);
   try {
    SlideShow ss = new SlideShow(new HSLFSlideShow(path));//
path为文件的全路径名称,建立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());
    }
   } catch (Exception ex) {
    System.out.println(ex.toString());
   }
   return content.toString().trim();

}
// 读取xls
public static String readXls(String path) throws Exception {
   StringBuffer content = new StringBuffer(“”);// 文档内容
汉字转拼音,java读取各品种的文本。   HSSFWorkbook workbook = new HSSFWorkbook(new
FileInputStream(path));
汉字转拼音,java读取各品种的文本。   int sheetCount = workbook.getNumberOfSheets();// excel几张表
   for (int i = 0; i < sheetCount; i++) {// 遍历excel表
    HSSFSheet sheet = workbook.getSheetAt(i);// 对excel的率先个表引用
    int rowCount = sheet.getLastRowNum();// 取得最终一行的下标
    for (int j = 0; j < rowCount; j++) {// 循环每一行
     HSSFRow row = sheet.getRow(j);// 引用行
     if (row == null) {
      continue;
     } else {
      short cellNum = row.getLastCellNum();
      for (short m = 0; m < cellNum; m++) {
       HSSFCell cell = row.getCell(m);// 引用行中的一个单元格
       if (cell != null) {
        int cellType = cell.getCellType();
        // CELL_TYPE_NUMERIC 0 数字
        // CELL_TYPE_STRING 1 字符串
        // CELL_TYPE_FORMULA 2 公式
        // CELL_TYPE_BLANK 3 空格
        // CELL_TYPE_BOOLEAN 4 布尔值
        // CELL_TYPE_ERROR 5 错误
        switch (cellType) {
        // 单元格类型为数字
        case HSSFCell.CELL_TYPE_NUMERIC:
         // 取数字单元格的值
         double d = cell.getNumericCellValue();
         content.append(String.valueOf(d) + ”   “);
         break;
        // 单元格类型为字符串
        case HSSFCell.CELL_TYPE_STRING:
         String str = cell.getStringCellValue().trim();
         if (!str.equals(“”)) {
          content.append(str + ”   “);
         }
         break;
        // 单元格类型为公式
        case HSSFCell.CELL_TYPE_FORMULA:
         // 不读取公式
         // String formula = cell.getCellFormula();
         // content = content + formula+” “;
         break;
        // 单元格类型为空白
        case HSSFCell.CELL_TYPE_BLANK:
         break;
        // 单元格类型为布尔值
        case HSSFCell.CELL_TYPE_BOOLEAN:
         // boolean bool = cell.getBooleanCellValue();
         // content = content + bool+” “;
         break;
        // 单元格类型为错误
        case HSSFCell.CELL_TYPE_ERROR:
         // byte errorCode = cell.getErrorCellValue();
         // content = content + errorCode+” “;
         break;
        default:
         break;
        }
       } else {
        // content = content + “…” +”
“;//没有多少的单元格使用…填充
home88一必发,       }
      }
     }
     content.append(“\r”);
    }
   }
   return content.toString().trim();
}

// 读取pdf
public static String readPdf(String path) throws Exception {
   StringBuffer content = new StringBuffer(“”);// 文档内容
   FileInputStream fis = new FileInputStream(path);
   PDFParser p = new PDFParser(fis);
   p.parse();
   PDFTextStripper ts = new PDFTextStripper();
   content.append(ts.getText(p.getPDDocument()));
   fis.close();
   return content.toString().trim();
}

// 读取word,只好读取文本内容 图片不行
public static String readWord(String path) throws Exception {

   StringBuffer content = new StringBuffer(“”);// 文档内容
   HWPFDocument doc = new HWPFDocument(new FileInputStream(path));
   Range range = doc.getRange();
   int paragraphCount = range.numParagraphs();// 段落
   for (int i = 0; i < paragraphCount; i++) {// 遍历段落读取数据
    Paragraph pp = range.getParagraph(i);
    content.append(pp.text());
   }
   return content.toString().trim();
}

// 读取text
public static String readTxt(String path) {
   StringBuffer content = new StringBuffer(“”);// 文档内容
   try {
    FileReader reader = new FileReader(path);
    BufferedReader br = new BufferedReader(reader);
    String s1 = null;

    while ((s1 = br.readLine()) != null) {
     content.append(s1 + “\r”);
    }
    br.close();
    reader.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   return content.toString().trim();
}

}

汉字转拼音使用到了 pinyin4j

汉字转拼音使用到了 pinyin4j

1:excel转pdf出现乱码:

maven依赖:

maven依赖:

    第两回excel转pdf是打响的,第二次开首前边皆是乱码,是因为自身的pdf转excel方法出现的难点,解决办法是使用java自身底层的措施(详见下方代码)。

<dependency>
  <groupId>com.belerweb</groupId>
  <artifactId>pinyin4j</artifactId>

<dependency>
  <groupId>com.belerweb</groupId>
  <artifactId>pinyin4j</artifactId>

 public static boolean getLicense()
{
        boolean result = false;
        try {
            InputStream is =
Thread.currentThread().getContextClassLoader()
                  
 .getResourceAsStream(“license.xml”); // 
license.xml应放在..\WebRoot\WEB-INF\classes路径下
            License aposeLic = new
License();
           
aposeLic.setLicense(is);
            result = true;
        } catch (Exception e)
{               
            e.printStackTrace();
        }
        return result;
    }
    
    
    public static void
excelTransferPdf(String excelPath,String pdfPath) {
        if (!getLicense()) {
            System.out.println(“license
faile”);
            return;
        }
        
        try {     
            Workbook wb = new
Workbook(excelPath);
            FileOutputStream fileOS = new
FileOutputStream(new File(pdfPath));
            wb.save(fileOS,
com.aspose.cells.SaveFormat.PDF);
            fileOS.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  <version>2.5.0</version>

  <version>2.5.0</version>

2:excel转pdf出现折行。

</dependency>

</dependency>

  excel转pdf出现折行的情状尤其普遍,因为在程序运行进程中广大字段是抓取的,你不能判断你的excel转成pdf会有几页,所以那几个时候你就不用任意设置excel的预览格式,将excel的单元格式设置自动换行。

或者:

或者:

3:抓取字段显示结果不完全:。

<dependency>
  <groupId>net.sourceforge.pinyin4j</groupId>
  <artifactId>pinyin4j</artifactId>

<dependency>
  <groupId>net.sourceforge.pinyin4j</groupId>
  <artifactId>pinyin4j</artifactId>

  当你未安装单元格大小而又没有设置单元格自动换行,比如你的A18单元格里面的字段超过了单元格的长度你还并未设置单元格大小而又从不安装单元格自动换行,就将抓取的字段填充在B18单元格里面,那么打印出来的pdf文件A18单元格超出单元极度的内容是反对展现的,此时您要么将抓取字段填充在C18单元格内要么将更改A18单元格格式

  <version>2.5.0</version>

  <version>2.5.0</version>

4:excel转PDF字段内容无故中间部分换行:

</dependency>

</dependency>

  这是自家遭遇的最坑的一个地点,那些时候你只须要在excel单元格里面安装自动换行即可,无需代码强行自动换行(强行换行有可能只现出多行数据只显示一行)。同时您必要如下代码:

/**
* 汉语转汉语拼音
* @param chinese
* @param isPure true:只保留粤语和英文 false:保留中国和英国文和其余字符
* @return 拼音全体大写,拼音之间以空格分隔
*/
public static String chinesePaseSpell(String chinese,boolean isPure) {
  StringBuilder result = new StringBuilder();
  if(StringUtils.isNotBlank(chinese)) {
    HanyuPinyinOutputFormat defaultFormat = new
HanyuPinyinOutputFormat();
    defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
    for (int i = 0; i < chinese.length(); i++) {
      char c = chinese.charAt(i);
      try {
        if
(String.valueOf(c).matches(“[\u4e00-\u9fa5]+”)){//
若是字符是汉语,则将中文转为中文拼音
          result.append(PinyinHelper.toHanyuPinyinStringArray(c,
defaultFormat)[0]).append(HELPERSPACE);
        } else if(String.valueOf(c).matches(“[a-zA-Z]”))
{//假设字符是英文,则一贯扩充
          result.append(String.valueOf(c));
        } else {// 若是字符不是中英文,则展开判断
          result.append(isPure ? “” : String.valueOf(c));
        }
      } catch (BadHanyuPinyinOutputFormatCombination e) {
        e.printStackTrace();
      }
    }
  }
  return result.toString().trim();
}

/**
* 汉语转中文拼音
* @param chinese
* @param isPure true:只保留汉语和英文 false:保留中国和英国文和其他字符
* @return 拼音全体大写,拼音之间以空格分隔
*/
public static String chinesePaseSpell(String chinese,boolean isPure) {
  StringBuilder result = new StringBuilder();
  if(StringUtils.isNotBlank(chinese)) {
    HanyuPinyinOutputFormat defaultFormat = new
HanyuPinyinOutputFormat();
    defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    defaultFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
    for (int i = 0; i < chinese.length(); i++) {
      char c = chinese.charAt(i);
      try {
        if
(String.valueOf(c).matches(“[\u4e00-\u9fa5]+”)){//
假使字符是华语,则将中文转为普通话拼音
          result.append(PinyinHelper.toHanyuPinyinStringArray(c,
defaultFormat)[0]).append(HELPERSPACE);
        } else if(String.valueOf(c).matches(“[a-zA-Z]”))
{//借使字符是英文,则平昔增添
          result.append(String.valueOf(c));
        } else {// 如若字符不是中国和英国文,则举办判定
          result.append(isPure ? “” : String.valueOf(c));
        }
      } catch (BadHanyuPinyinOutputFormatCombination e) {
        e.printStackTrace();
      }
    }
  }
  return result.toString().trim();
}

/**
     *
获得一个字符串的尺寸,突显的长短,一个中国字或日斯拉维尼亚语长度为1,英文字符长度为0.5
     *
     * @param String
     *            s 须求得到长度的字符串
     * @return int 得到的字符串长度
     */
    public static double getLength(String s) {
        double valueLength = 0;
        if (s == null) {
            return 0;
        }
        String chinese = “[\u4e00-\u9fa5]”;
        //
获取字段值的长短,如果含中文字符,则每个中文字符长度为2,否则为1
        for (int i = 0; i < s.length(); i++) {
            // 获取一个字符
            String temp = s.substring(i, i + 1);
            // 判断是不是为华语字符
            if (temp.matches(chinese)) {
                // 普通话字符长度为2
                valueLength += 2;
            } else {
                // 其余字符长度为1
                valueLength += 1;
            }
        }
        // 进位取整
        return Math.ceil(valueLength);
    }

/**
* 依照空格分割字符串,重回每个单词首字母拼接的字符串
*/
public static String getFirstCharBySpace(String str) {
  if(StringUtils.isBlank(str)) return str;
  StringBuilder result = new StringBuilder();
  String[] words = str.split(HELPERSPACE);
  for(String word : words) {
    if(StringUtils.isBlank(word)) continue;
    result.append(word.charAt(0));
  }
  return result.toString();
}

/**
* 依照空格分割字符串,再次回到每个单词首字母拼接的字符串
*/
public static String getFirstCharBySpace(String str) {
  if(StringUtils.isBlank(str)) return str;
  StringBuilder result = new StringBuilder();
  String[] words = str.split(HELPERSPACE);
  for(String word : words) {
    if(StringUtils.isBlank(word)) continue;
    result.append(word.charAt(0));
  }
  return result.toString();
}

    /**
     * 根据字符串长度获取行高
     *
     * @param str
     * @return
     */
    public static Float getRowHeight(String str) {

/**转大写**/
private static char charToUpperCase(char ch){
  if(ch <= 122 && ch >= 97){
    ch -= 32;
  }
  return ch;
}
/***转小写**/
private char charToLowerCase(char ch){
  if(ch <= 90 && ch >= 65){
    ch += 32;
  }
  return ch;
}

/**转大写**/
private static char charToUpperCase(char ch){
  if(ch <= 122 && ch >= 97){
    ch -= 32;
  }
  return ch;
}
/***转小写**/
private char charToLowerCase(char ch){
  if(ch <= 90 && ch >= 65){
    ch += 32;
  }
  return ch;
}

        Integer lineCount = (int) (getLength(str) / 64) + 1;
        if (str.contains(“\n”)) {
            Integer tempLineCount = 1;
            String[] lines = str.split(“\n”);
            for (String line : lines) {
                Integer everyLineCount = (int) (getLength(line) / 64) +
1;
                tempLineCount += everyLineCount;
            }
            lineCount = lineCount >= tempLineCount ? lineCount :
tempLineCount;
        }
        Float rowHeight = (float) (lineCount * 20);
        return rowHeight;
    }

/**设置xml文件属性的值  (xml文件是一个字符串的款型)*/

/**安装xml文件属性的值  (xml文件是一个字符串的款型)*/

你须求先取得抓取的字符串的尺寸,然后经过这么些办法计算行高,再将excel需求填写的该行用Java代码设置行高(行高单位是像素),不过只要出现本身上边说的字段内容无故中间有些换行,那么你得到的行高就会供不应求,那几个时候你要求变更那么些地方—–>>>>Float rowHeight = (float) (lineCount * X); 
x的值一定要设置的大一行,以免出现那种气象!

public static String resetXmlProperty(String xmlStr,String
companySpell,String projectName){

public static String resetXmlProperty(String xmlStr,String
companySpell,String projectName){

 

   //必要参与相应的try catch

   //需求进入相应的try catch

*  StringReader sr = new StringReader(xmlStr); *

*  StringReader sr = new StringReader(xmlStr); *

*  InputSource is = new InputSource(sr); *

*  InputSource is = new InputSource(sr); *

*  DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
  DocumentBuilder builder=factory.newDocumentBuilder();
  Document doc = builder.parse(is);
  NodeList nodes = doc.getElementsByTagName(“category”);
  for(int i=0;i<nodes.getLength();i++){
    Element category=(Element) nodes.item(i);
    String oldValue = category.getAttribute(“clazz”);
    //修改属性
    category.setAttribute(“clazz”, “目标值”);
  }
  TransformerFactory tf = TransformerFactory.newInstance();
  Transformer t = tf.newTransformer();
  ByteArrayOutputStream bos = new ByteArrayOutputStream();
  t.transform(new DOMSource(doc), new StreamResult(bos));
  xmlStr = bos.toString();*

*  DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
  DocumentBuilder builder=factory.newDocumentBuilder();
  Document doc = builder.parse(is);
  NodeList nodes = doc.getElementsByTagName(“category”);
  for(int i=0;i<nodes.getLength();i++){
    Element category=(Element) nodes.item(i);
    String oldValue = category.getAttribute(“clazz”);
    //修改属性
    category.setAttribute(“clazz”, “目标值”);
  }
  TransformerFactory tf = TransformerFactory.newInstance();
  Transformer t = tf.newTransformer();
  ByteArrayOutputStream bos = new ByteArrayOutputStream();
  t.transform(new DOMSource(doc), new StreamResult(bos));
  xmlStr = bos.toString();*

*  return xmlStr;*

*  return xmlStr;*

}

}

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图