package com.product.file.util;
|
|
import java.io.File;
|
import java.io.FileInputStream;
|
import java.io.FileOutputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.math.RoundingMode;
|
import java.text.DecimalFormat;
|
|
import com.aspose.cells.Cells;
|
import com.aspose.cells.HtmlSaveOptions;
|
import com.aspose.cells.PdfSaveOptions;
|
import com.aspose.cells.Workbook;
|
import com.aspose.cells.Worksheet;
|
import com.aspose.cells.WorksheetCollection;
|
import com.aspose.slides.Presentation;
|
import com.aspose.words.Document;
|
import com.aspose.words.ImportFormatMode;
|
import com.aspose.words.NodeCollection;
|
import com.aspose.words.NodeType;
|
import com.aspose.words.Paragraph;
|
import com.aspose.words.SaveFormat;
|
import com.aspose.words.Section;
|
import com.aspose.words.SectionStart;
|
import com.product.core.exception.BaseException;
|
import com.product.core.spring.context.SpringMVCContextHolder;
|
import com.product.file.config.FileCode;
|
|
public class AsposeUtil {
|
//是否初始了license
|
private static boolean isInitLicense=false;
|
/**
|
* 获取license
|
* @return
|
*/
|
public static boolean getLicense(int type)throws BaseException {
|
//已经初始过,不再初始
|
if(isInitLicense) {
|
return true;
|
}
|
boolean result = true;
|
InputStream is = null;
|
try {
|
is = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml");
|
com.aspose.cells.License excel = new com.aspose.cells.License();
|
excel.setLicense(is);
|
|
is = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml");
|
com.aspose.words.License word = new com.aspose.words.License();
|
word.setLicense(is);
|
|
is = AsposeUtil.class.getClassLoader().getResourceAsStream("license.xml");
|
com.aspose.slides.License ppt = new com.aspose.slides.License();
|
ppt.setLicense(is);
|
|
isInitLicense=true;
|
} catch (Exception e) {
|
result=false;
|
throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
|
}finally{
|
if(is!=null) {
|
try {
|
is.close();
|
}catch(IOException e) {
|
throw new BaseException(e);
|
}
|
}
|
}
|
return result;
|
}
|
/**
|
*
|
* @param officePath
|
* @param OutPutPath
|
* @throws BaseException
|
*/
|
public static void Excel2Pdf(String officePath,String OutPutPath)throws BaseException {
|
// 验证License
|
if (!getLicense(1)) {
|
return;
|
}
|
FileOutputStream fileOS=null;
|
try {
|
File file = new File(OutPutPath);
|
if (!file.getParentFile().exists()) {
|
file.getParentFile().mkdirs();
|
}
|
Workbook wb = new Workbook(officePath);// 原始excel路径
|
fileOS = new FileOutputStream(OutPutPath);
|
//wb.save(fileOS, com.aspose.cells.SaveFormat.PDF);
|
PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();
|
pdfSaveOptions.setAllColumnsInOnePagePerSheet(true);
|
wb.save(fileOS, pdfSaveOptions);
|
} catch (Exception e) {
|
throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
|
}finally{
|
if(fileOS!=null) {
|
try {
|
fileOS.flush();
|
fileOS.close();
|
}catch(IOException e) {
|
throw new BaseException(e);
|
}
|
}
|
}
|
}
|
/**
|
*
|
* @param officePath
|
* @param OutPutPath
|
* @throws BaseException
|
*/
|
public static void xls2xlsx(String officePath,String OutPutPath,String officeType)throws BaseException {
|
// 验证License
|
if (!getLicense(1)) {
|
return;
|
}
|
if("xlsx".equals(officeType)) {
|
FileUtil.copyFile(new File(officePath), OutPutPath);
|
return ;
|
}
|
FileOutputStream fileOS=null;
|
try {
|
File file = new File(OutPutPath);
|
if (!file.getParentFile().exists()) {
|
file.getParentFile().mkdirs();
|
}
|
Workbook wb = new Workbook(officePath);// 原始excel路径
|
fileOS = new FileOutputStream(OutPutPath);
|
wb.save(fileOS, com.aspose.cells.SaveFormat.XLSX);
|
} catch (Exception e) {
|
throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
|
}finally{
|
if(fileOS!=null) {
|
try {
|
fileOS.flush();
|
fileOS.close();
|
}catch(IOException e) {
|
throw new BaseException(e);
|
}
|
}
|
}
|
}
|
public static void Excel2Html(String officePath,String OutPutPath)throws BaseException {
|
// 验证License
|
if (!getLicense(1)) {
|
return;
|
}
|
FileOutputStream fileOS=null;
|
try {
|
File file = new File(OutPutPath);
|
if (!file.getParentFile().exists()) {
|
file.getParentFile().mkdirs();
|
}
|
Workbook wb = new Workbook(officePath);// 原始excel路径
|
WorksheetCollection sheets=wb.getWorksheets();
|
System.out.println("sheet个数:"+sheets.getCount());
|
for(int i=0;i<sheets.getCount();i++) {
|
//setAutoWithHeight(sheets.get(i));
|
}
|
// HtmlSaveOptions options = new HtmlSaveOptions();
|
// options.setPresentationPreference(true);
|
fileOS = new FileOutputStream(OutPutPath);
|
wb.save(fileOS, com.aspose.cells.SaveFormat.HTML);
|
} catch (Exception e) {
|
throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
|
}finally{
|
if(fileOS!=null) {
|
try {
|
fileOS.flush();
|
fileOS.close();
|
}catch(IOException e) {
|
throw new BaseException(e);
|
}
|
}
|
}
|
}
|
/**
|
* 设置单元格的自动适宽、高
|
* @param sheet
|
* @throws Exception
|
*/
|
public static void setAutoWithHeight(Worksheet sheet)throws Exception
|
{
|
Cells cells =sheet.getCells();
|
int columnCount = cells.getMaxColumn(); //获取表页的最大列数
|
int rowCount = cells.getMaxRow(); //获取表页的最大行数
|
if(columnCount<0 ||rowCount<0 )return ;
|
for (int col = 0; col < columnCount; col++)
|
{
|
sheet.autoFitColumn(col, 0, rowCount);
|
}
|
for (int row = 0; row < rowCount; row++)
|
{
|
sheet.autoFitRow(row, 0, columnCount);
|
}
|
}
|
/**
|
*
|
* @param officePath
|
* @param OutPutPath
|
* @throws BaseException
|
*/
|
public static void Word2Pdf(String officePath,String OutPutPath) throws BaseException {
|
// 验证License
|
if (!getLicense(2)) {
|
return;
|
}
|
FileOutputStream fileOS=null;
|
try {
|
File file = new File(OutPutPath);
|
if (!file.getParentFile().exists()) {
|
file.getParentFile().mkdirs();
|
}
|
Document doc = new Document(officePath);// 原始word路径
|
fileOS = new FileOutputStream(OutPutPath);
|
doc.save(fileOS, com.aspose.words.SaveFormat.PDF);
|
} catch (Exception e) {
|
throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
|
}finally{
|
if(fileOS!=null) {
|
try {
|
fileOS.flush();
|
fileOS.close();
|
}catch(IOException e) {
|
throw new BaseException(e);
|
}
|
}
|
}
|
}
|
/**
|
*
|
* @param officePath
|
* @param OutPutPath
|
* @throws BaseException
|
*/
|
public static void PPT2Pdf(String officePath,String OutPutPath)throws BaseException {
|
// 验证License
|
if (!getLicense(3)) {
|
return;
|
}
|
FileOutputStream fileOS=null;
|
try {
|
File PathFile = new File(OutPutPath);
|
if (!PathFile.getParentFile().exists()) {
|
PathFile.getParentFile().mkdirs();
|
}
|
InputStream slides = new FileInputStream(officePath);// 原始ppt路径
|
Presentation pres = new Presentation(slides);
|
fileOS = new FileOutputStream(OutPutPath);
|
pres.save(fileOS, com.aspose.slides.SaveFormat.Pdf);
|
} catch (Exception e) {
|
throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
|
}finally{
|
if(fileOS!=null) {
|
try {
|
fileOS.flush();
|
fileOS.close();
|
}catch(IOException e) {
|
throw new BaseException(e);
|
}
|
}
|
}
|
}
|
/**
|
* 文档转换
|
* @param officePath
|
* @param outFile
|
* @return
|
* @throws BaseException
|
*/
|
public static String OfficeToPdf(String officePath,String outFile,String officeType )throws BaseException {
|
officeType=officeType.toLowerCase();
|
SpringMVCContextHolder.getSystemLogger().info("The file of office type:"+officePath);
|
if("pdf".equals(officeType)) {
|
return outFile;
|
}
|
File file = new File(officePath);
|
//判断当前office文件是否已经转为PDF,如果已转为PDF就不需要再次转换。
|
if (file.exists()) {
|
if(officeType.equals("doc")||officeType.equals("docx")){
|
Word2Pdf(officePath,outFile);
|
}else if(officeType.equals("xls")||officeType.equals("xlsx")){
|
// Excel2Pdf(officePath,outFile);
|
// Excel2Html(officePath,outFile);
|
xls2xlsx(officePath,outFile,officeType);
|
}else if(officeType.equals("ppt")||officeType.equals("pptx")){
|
PPT2Pdf(officePath,outFile);
|
}else{
|
throw new BaseException(FileCode.DOC_CONVERT_NOT_SUPPORT_FILE_FALL);
|
}
|
} else {
|
throw new BaseException(FileCode.DOC_CONVERT_FILE_NOT_EXIST_FALL);
|
}
|
return outFile;
|
}
|
/**
|
* 文档转换
|
* @param officePath
|
* @return
|
*/
|
public static String OfficeToPdf(String officePath) {
|
|
String[] split = officePath.split("⌒");
|
int lastIndex = split[0].lastIndexOf(".");
|
int lastNameIndex = split[0].lastIndexOf("/");
|
|
String officeType = split[0].substring(lastIndex+1);
|
String officeName = split[0].substring(lastNameIndex+1,lastIndex);
|
String OutPutPath = split[0].substring(0,lastNameIndex+1)+"office/";
|
System.out.println("输出目录:"+OutPutPath);
|
File file = new File(split[0]);
|
//判断当前office文件是否已经转为PDF,如果已转为PDF就不需要再次转换。
|
if (file.exists()) {
|
//"doc", "docx", "xls","xlsx", "ppt", "pptx"
|
try {
|
if(officeType.equals("doc")||officeType.equals("docx")){
|
Word2Pdf(split[0],OutPutPath+"/"+officeName+".pdf");
|
}else if(officeType.equals("xls")||officeType.equals("xlsx")){
|
// Excel2Html(split[0],OutPutPath+"/"+officeName+".html");
|
xls2xlsx(split[0],OutPutPath+"/"+officeName+".xlsx",officeType);
|
}else if(officeType.equals("ppt")||officeType.equals("pptx")){
|
PPT2Pdf(split[0],OutPutPath+"/"+officeName+".pdf");
|
}else{
|
System.out.println("无法识别该文件!");
|
return "Error";
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
} else {
|
return "NotExists";
|
}
|
return OutPutPath+officeName;
|
}
|
/**
|
* word文档的合并
|
* @param targetWordFile
|
* @param sourceWordFile
|
* @return
|
* @throws Exception
|
*/
|
public static File mergeWord(String targetWordFile,String sourceWordFile ) throws BaseException{
|
File target=new File(targetWordFile);
|
File source=new File(sourceWordFile);
|
return mergeWord(target,source);
|
}
|
/**
|
* word文档的合并
|
* @param targetWordFile
|
* @param sourceWordFile
|
* @return
|
* @throws Exception
|
*/
|
public static File mergeWord(File target,File source ) throws BaseException{
|
|
if(!target.exists() && !source.exists()) {
|
return null;
|
}else if(!source.exists() && target.exists()) {
|
return target;
|
}else if(source.exists() && !target.exists()) {
|
return source;
|
}
|
// 验证License
|
if (!getLicense(2)) {
|
return null;
|
}
|
FileInputStream tin=null;
|
FileInputStream sin=null;
|
FileOutputStream out=null;
|
String temp=target.getParent()+File.separator+"mergeTemp";
|
File temp_target=new File(temp+File.separator+target.getName());
|
try {
|
tin=new FileInputStream(target);
|
sin=new FileInputStream(source);
|
Document targetDoc = new Document(tin);
|
Document sourceDoc = new Document(sin);
|
docBlankProcess(targetDoc);
|
targetDoc.appendDocument(sourceDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
|
|
|
// for(Section sect : targetDoc.getSections())
|
// {
|
// if (sect.getBody().getParagraphs().getCount() == 0) {
|
// sect.remove();
|
// }
|
// }
|
File dir=new File(temp);
|
if(!dir.exists()) {
|
dir.mkdirs();
|
}
|
if(temp_target.exists()) {
|
temp_target.delete();
|
}
|
if(temp_target.createNewFile()) {
|
out=new FileOutputStream(temp_target);
|
targetDoc.save(out, SaveFormat.DOCX);
|
}
|
}catch(Exception e) {
|
throw new BaseException(FileCode.DOC_MERGE_FALL,e);
|
}
|
finally{
|
try {
|
if(tin!=null) {
|
tin.close();
|
}
|
if(sin!=null) {
|
sin.close();
|
}
|
if(out!=null) {
|
out.flush();
|
out.close();
|
}
|
}catch(IOException e) {
|
throw new BaseException(FileCode.DOC_MERGE_FALL,e);
|
}
|
}
|
return temp_target;
|
}
|
|
public static void docBlankProcess(Document targetDoc) {
|
NodeCollection nodes=targetDoc.getChildNodes(NodeType.PARAGRAPH, true);
|
System.out.println(nodes.getCount());
|
for(Paragraph para :(Iterable<Paragraph>) nodes) {
|
String text=para.getText();
|
if("\r".equals(text)) {
|
System.out.println("rrrrrrrrrrrr");
|
}else if("\f".equals(text)) {
|
System.out.println("ffffffffffff");
|
}else {
|
System.out.println(text);
|
}
|
if ("\r".equals(text)
|
//|| "\f".equals(text)
|
) {
|
para.remove();
|
}
|
}
|
}
|
public static void docProcess(Document targetDoc) {
|
NodeCollection nodes=targetDoc.getChildNodes();
|
for(Paragraph para :(Iterable<Paragraph>) nodes) {
|
String text=para.getText();
|
if("\r".equals(text)) {
|
System.out.println("rrrrrrrrrrrr");
|
}else if("\f".equals(text)) {
|
System.out.println("ffffffffffff");
|
}else {
|
System.out.println(text);
|
}
|
if ("\r".equals(text)
|
//|| "\f".equals(text)
|
) {
|
para.remove();
|
}
|
}
|
}
|
public static void main(String args[]) {
|
String file="E:/工作内容.xlsx";
|
// String file="E:/爆破母线.xls";
|
// String file="E:/采集提取日志表结构.xlsx";
|
// String file="E:/FE信息系统国产化解决方案V1.0.docx";
|
AsposeUtil.OfficeToPdf(file);
|
// AsposeUtil.mergeWord("E:\\QQ\\住房担保置换公司.docx","E:\\QQ\\住房担保置换公司2.docx");
|
}
|
}
|