package com.itss.huao.xz.newRecruit.util;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.poifs.filesystem.NotOLE2FileException;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import com.itss.huao.xz.newRecruit.entity.RecruitUserInfo;
import com.itss.huao.xz.newRecruit.enums.SearchCategoryE;
/**
* 检索doc文件工具类
*
* @ClassName: GenerateDoc
* @Description:TODO(这里用一句话描述这个类的作用)
* @author LiYonghui
* @date 2017年8月8日 下午3:31:20
*/
public class GenerateDoc implements GenerateFile{
public GenerateDoc() {}
@Override
public String getText(String fillFullPath,String newWordPath) throws FileNotFoundException, IOException{
String text="";
String fux = fillFullPath.substring(fillFullPath.lastIndexOf(".")+1);
try{
if(fux.equals("doc")){
WordExtractor doc = new WordExtractor(new FileInputStream(fillFullPath));
text = doc.getText();
}else if(fux.equals("docx")){
XWPFDocument docx = new XWPFDocument(new FileInputStream(fillFullPath));
XWPFWordExtractor extractor = new XWPFWordExtractor(docx);
text = extractor.getText();
}
}catch (NotOLE2FileException e) {
FileInputStream in = null;
FileOutputStream out = null;
try {
String to=GeneratePDF.writeSimpleWord(newWordPath);
in = new FileInputStream(fillFullPath);
out = new FileOutputStream(to);
int i = 0;
while((i = in.read()) != -1){
out.write(i);
}
}catch(FileNotFoundException e1){
e1.printStackTrace();
}catch(IOException e2){
e2.printStackTrace();
}catch(Exception e3){
e3.printStackTrace();
}finally{
in.close();
out.close();
}
}catch (FileNotFoundException e) {
}catch (IOException e) {
}
text = initText(text);
System.out.println(text);
return text;
}
@Override
public String initText(String text) {
text = text.replaceAll(":", " ");
text = text.replaceAll(":", " ");
text = text.replaceAll("", " ");
text = text.replaceAll("", " ");
text = text.replaceAll("", " ");
text = text.replaceAll("", " ");
text = text.replaceAll("", " ");
text = text.replaceAll("", " ");
return text;
}
@Override
public Field[] getClassFields(RecruitUserInfo recruit) {
Field[] fields = null;
try {
fields = recruit.getClass().getDeclaredFields();
} catch (Exception e) {
e.printStackTrace();
}
return fields;
}
@Override
public RecruitUserInfo getInitObject(Field[] fields,SearchCategoryE[] categorys,String text) throws IllegalArgumentException, IllegalAccessException {
RecruitUserInfo recruit = new RecruitUserInfo();
for (SearchCategoryE category : categorys) {
Map<String,String> map = getKeyValue(category, text);
String value = "";
for(String key:map.keySet()){
value = map.get(key);
}
String propertyName = category.fieldName();
for (Field field : fields) {
field.setAccessible(true);
if (field.getName().equals(propertyName)) {
field.set(recruit, value);
break;
}
}
}
return recruit;
}
private static String getValue(String key, String text, String reg) {
String result = "";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(text);
boolean isExsit = matcher.find();
if (isExsit) {
String matcherStr = matcher.group();
matcherStr = matcherStr.replaceAll("\\s*", "");
result = matcherStr.substring(key.length());
}
return result;
}
private static Map<String, String> getKeyValue(SearchCategoryE category,String text){
String key = category.getCN();
String reg = category.getReg(key, true);
String value = getValue(key, text, reg);
if (value.equals("")) {
key = category.getEN();
reg = category.getReg(key, false);
value = getValue(key, text, reg);
}
if (value.equals("")) {
key = category.getAlias();
if (key.indexOf(";") > 0) {
String[] aliases = key.split(";");
for (String alias : aliases) {
reg = category.getReg(alias, true);
value = getValue(alias, text, reg);
key = alias;
if (value != null && !value.equals("")) {
break;
}
}
}
}
Map<String, String> map = new HashMap<String,String>();
map.put(key, value);
return map;
}
}
package com.itss.huao.xz.newRecruit.util
import java.awt.Color
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.IOException
import org.apache.poi.hwpf.HWPFDocument
//import com.itss.huao.xz.newRecruit.action.ReadAndWriteDoc
import com.lowagie.text.Document
import com.lowagie.text.Font
import com.lowagie.text.FontFactory
import com.lowagie.text.PageSize
import com.lowagie.text.Paragraph
import com.lowagie.text.pdf.PdfWriter
public class GeneratePDF {
public static String writeSimplePdf(String pdfPath) throws Exception {
// 1.新建document对象
// 第一个参数是页面大小。接下来的参数分别是左、右、上和下页边距。
Document document = new Document(PageSize.A4, 50, 50, 50, 50)
// 2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
// 创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
@SuppressWarnings("unused")
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(pdfPath))
// 3.打开文档
document.open()
// 4.向文档中添加内容
// 通过 com.lowagie.text.Paragraph 来添加文本。可以用文本及其默认的字体、颜色、大小等等设置来创建一个默认段落
document.add(new Paragraph("this is temp file"))
document.add(new Paragraph("Some more text on the first page with different color and font type.", FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD, new Color(255, 150, 200))))
// 5.关闭文档
document.close()
return pdfPath
}
public static String writeSimpleWord(String newWordPath) throws Exception {
// 1.新建document对象
Document document = new Document(PageSize.A4, 50, 50, 50, 50)
// ReadAndWriteDoc rawDoc = new ReadAndWriteDoc()
// String fileDir = "D://"
File newFile=new File(newWordPath+"new.doc")
newFile.createNewFile()
ByteArrayOutputStream ostream = new ByteArrayOutputStream()
FileOutputStream out = new FileOutputStream(newFile, true)
// 输出字节流
out.write(ostream.toByteArray())
out.close()
ostream.close()
// 3.打开文档
document.open()
// 5.关闭文档
document.close()
return newFile.getPath()
}
public void writeDoc(File newFile)
{
try
{
// 替换文本内容
ByteArrayOutputStream ostream = new ByteArrayOutputStream()
FileOutputStream out = new FileOutputStream(newFile, true)
// 输出字节流
out.write(ostream.toByteArray())
out.close()
ostream.close()
}
catch(IOException e)
{
e.printStackTrace()
}
catch(Exception e)
{
e.printStackTrace()
}
}
}
环境需要自己下载
package com.itss.huao.xz.newRecruit.util;
import java.io.File;
import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;
import com.itss.huao.xz.newhr.util.ReadProperties;
/**
* office转pdf服务工具类
*
* @ClassName: Office2PdfUtil
* @Description:TODO(这里用一句话描述这个类的作用)
* @author LiYonghui
* @date Aug 18, 2017 4:10:12 PM
*/
public class Office2PdfUtil {
private static Office2PdfUtil office2PdfUtil = new Office2PdfUtil();
private static OfficeManager officeManager;
public static Office2PdfUtil getOffice2PdfUtil() {
return office2PdfUtil;
}
/**
*
* office2Pdf 方法
*
* @descript:TODO
* @param inputFile
* 文件全路径
* @param pdfFilePath
* pdf文件全路径
* @return void
* @author lxz
* @return
*/
public void office2Pdf(String inputFile, String pdfFilePath) {
File pdfFile = new File(pdfFilePath);
File docFile = new File(inputFile);
try {
startService();
OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
converter.convert(docFile, pdfFile);
stopService();
System.out.println("运行结束");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 关闭服务 @Title: stopService @Description:
* TODO(这里用一句话描述这个方法的作用) @param: @author LiYonghui @date Aug 18, 2017
* 4:11:01 PM @return: void @throws
*/
private void stopService() {
if (officeManager != null) {
officeManager.stop();
}
}
/**
* 开启服务 @Title: startService @Description:
* TODO(这里用一句话描述这个方法的作用) @param: @author LiYonghui @date Aug 18, 2017
* 4:10:52 PM @return: void @throws
*/
private void startService() {
DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
try {
String openOfficeHome = "E:/officeOpen/";
String openOfficePort = "8100";
configuration.setOfficeHome(openOfficeHome);
configuration.setPortNumbers(Integer.parseInt(openOfficePort));
configuration.setTaskExecutionTimeout(1000 * 60 * 5L);
configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);
officeManager = configuration.buildOfficeManager();
officeManager.start();
} catch (Exception ce) {
System.out.println("office转换服务启动失败!详细信息:" + ce);
}
}
}
package com.itss.huao.xz.newRecruit.enums;
public enum SearchCategoryE {
NAME {
@Override
public String getCN() {
return "姓名";
}
@Override
public String getEN() {
return "name";
}
@Override
public String getAlias() {
return "名字";
}
@Override
public String fieldName() {
return "name";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("[\u4E00-\u9FA5\uF900-\uFA2D]*");
return reg.toString();
}
},
GENDER {
@Override
public String getCN() {
return "性别";
}
@Override
public String getEN() {
return "SEX";
}
@Override
public String getAlias() {
return "gender";
}
@Override
public String fieldName() {
return "gender";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("[\u4E00-\u9FA5\uF900-\uFA2D]");
return reg.toString();
}
},
EMAIL {
@Override
public String getCN() {
return "邮箱";
}
@Override
public String getEN() {
return "E-mail";
}
@Override
public String getAlias() {
return "电子邮箱;电邮;电子邮件;电子信箱;E-mail;email";
}
@Override
public String fieldName() {
return "email";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("(.)*[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+");
return reg.toString();
}
},
POST {
@Override
public String getCN() {
return "职务";
}
@Override
public String getEN() {
return "post";
}
@Override
public String getAlias() {
return "应聘职位;应聘岗位";
}
@Override
public String fieldName() {
return "post";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("[a-z,A-Z]*(\u0020)*[\u4E00-\u9FA5\uF900-\uFA2D]*");
return reg.toString();
}
},
PHONE{
@Override
public String getCN() {
return "电话";
}
@Override
public String getEN() {
return "phone";
}
@Override
public String getAlias() {
return "联系电话;手机;联系方式";
}
@Override
public String fieldName() {
return "phone";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("[+]{0,1}(\\d){1,3}[ ]?([-]?((\\d)|[ ]){1,12})+");
return reg.toString();
}
},
WORK{
@Override
public String getCN() {
return "工作年限";
}
@Override
public String getEN() {
return "work";
}
@Override
public String getAlias() {
return "工作经验;工作年限;工作年份";
}
@Override
public String fieldName() {
return "work";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("[0-9]+([.]{1}[0-9]+){0,1}");
return reg.toString();
}
},
AGE{
@Override
public String getCN() {
return "年龄";
}
@Override
public String getEN() {
return "age";
}
@Override
public String getAlias() {
return "年龄";
}
@Override
public String fieldName() {
return "age";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("[1-6]{1}[0-9]{1}");
return reg.toString();
}
},
ADDRESS{
@Override
public String getCN() {
return "现居住地";
}
@Override
public String getEN() {
return "address";
}
@Override
public String getAlias() {
return "住址;居住地";
}
@Override
public String fieldName() {
return "address";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("[\u4E00-\u9FA5\uF900-\uFA2D]*");
return reg.toString();
}
},
COMPANY{
@Override
public String getCN() {
return "上家公司";
}
@Override
public String getEN() {
return "company";
}
@Override
public String getAlias() {
return "公司名称";
}
@Override
public String fieldName() {
return "company";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("[\u4E00-\u9FA5\uF900-\uFA2D]*");
return reg.toString();
}
},
IDCARD{
@Override
public String getCN() {
return "身份证号";
}
@Override
public String getEN() {
return "idCard";
}
@Override
public String getAlias() {
return "证件号";
}
@Override
public String fieldName() {
return "idCard";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("([1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2})|([1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx])");
return reg.toString();
}
},
EDUCATION{
@Override
public String getCN() {
return "学历";
}
@Override
public String getEN() {
return "education";
}
@Override
public String getAlias() {
return "学历";
}
@Override
public String fieldName() {
return "education";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("[\u4E00-\u9FA5\uF900-\uFA2D]*");
return reg.toString();
}
},
salaryExpection{
@Override
public String getCN() {
return "期望薪资";
}
@Override
public String getEN() {
return "salaryExpection";
}
@Override
public String getAlias() {
return "薪资;期望薪水;期望年薪";
}
@Override
public String fieldName() {
return "salaryExpection";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("(面(\\u0020)*议)?((\\d)*[K,k,]?[-,~]?)*");
return reg.toString();
}
},
remark{
@Override
public String getCN() {
return "备注";
}
@Override
public String getEN() {
return "remark";
}
@Override
public String getAlias() {
return "备注";
}
@Override
public String fieldName() {
return "remark";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("[\u4E00-\u9FA5\uF900-\uFA2D]*");
return reg.toString();
}
},
graduatedSchool{
@Override
public String getCN() {
return "毕业院校";
}
@Override
public String getEN() {
return "school";
}
@Override
public String getAlias() {
return "毕业学校";
}
@Override
public String fieldName() {
return "graduatedSchool";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("[\u4E00-\u9FA5\uF900-\uFA2D]*");
return reg.toString();
}
},
profession{
@Override
public String getCN() {
return "专业";
}
@Override
public String getEN() {
return "major";
}
@Override
public String getAlias() {
return "专业";
}
@Override
public String fieldName() {
return "profession";
}
@Override
public String getReg(String key, boolean isSplit) {
StringBuffer reg = new StringBuffer();
if(isSplit){
for(int i =0;i<key.length();i++){
reg.append("(\u0020)*");
reg.append(key.charAt(i));
}
}else{
reg.append("(\u0020)*");
reg.append(key);
}
reg.append("(\\s)*");
reg.append("[\u4E00-\u9FA5\uF900-\uFA2D]*");
return reg.toString();
}
}
;
/**
* 获取中文名称
* @Title: getCN
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @return
* @author WangFangfang
* @date 2017年7月26日 下午3:30:25
* @return: String
* @throws
*/
public abstract String getCN();
/**
* 获取对应的英文名称
* @Title: getEN
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @return
* @author WangFangfang
* @date 2017年7月26日 下午3:30:38
* @return: String
* @throws
*/
public abstract String getEN();
/**
* 获取别称
* @Title: getAlias
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @return
* @author WangFangfang
* @date 2017年7月26日 下午3:48:10
* @return: String
* @throws
*/
public abstract String getAlias();
/**
* 类属性名称
* @Title: fieldName
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @return
* @author WangFangfang
* @date 2017年7月26日 下午4:25:37
* @return: String
* @throws
*/
public abstract String fieldName();
/**
* 获取则正则字符串
* @Title: getReg
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @param key 需要查询的的字符
* @param: @param isSplit 是否分词
* @param: @return
* @author LiYonghui
* @date 2017年8月3日 下午2:35:15
* @return: String
* @throws
*/
public abstract String getReg(String key,boolean isSplit);
}