From c6d5a3e6711e58546254333aa1184360a841c6bb Mon Sep 17 00:00:00 2001
From: shichongfu <shi_chongfu@163.com>
Date: 星期一, 12 六月 2023 11:07:53 +0800
Subject: [PATCH] 文档合并、转换
---
src/main/java/com/product/file/util/AsposeUtil.java | 185 +++++++++++++++++++++++++++++++++++++--------
src/main/java/com/product/file/config/FileCode.java | 4 +
src/main/java/com/product/file/service/FileManagerService.java | 2
3 files changed, 154 insertions(+), 37 deletions(-)
diff --git a/src/main/java/com/product/file/config/FileCode.java b/src/main/java/com/product/file/config/FileCode.java
index 357431f..68c335d 100644
--- a/src/main/java/com/product/file/config/FileCode.java
+++ b/src/main/java/com/product/file/config/FileCode.java
@@ -74,6 +74,10 @@
GET_CLIENT_INFO_FAIL("鑾峰彇瀹㈡埛淇℃伅澶辫触", ModuleEnum.FILE.getValue() + "052"),
RE_TRANSFER_FILE_WAIT_FAIL("鍐嶆杞崲pdf鏂囦欢绛夊緟寮傚父", ModuleEnum.FILE.getValue() + "053"),
+ DOC_CONVERT_FALL("鏂囨。杞崲澶辫触", ModuleEnum.FILE.getValue() + "054"),
+ DOC_MERGE_FALL("鏂囨。鍚堝悓骞跺け璐�", ModuleEnum.FILE.getValue() + "055"),
+ DOC_CONVERT_FILE_NOT_EXIST_FALL("鏂囨。杞崲澶辫触,鏂囦欢涓嶅瓨鍦�", ModuleEnum.FILE.getValue() + "056"),
+ DOC_CONVERT_NOT_SUPPORT_FILE_FALL("鏂囨。杞崲澶辫触,涓嶆敮鎸佺殑鏂囨。绫诲瀷", ModuleEnum.FILE.getValue() + "057"),
;
diff --git a/src/main/java/com/product/file/service/FileManagerService.java b/src/main/java/com/product/file/service/FileManagerService.java
index e1fd43b..51e80c5 100644
--- a/src/main/java/com/product/file/service/FileManagerService.java
+++ b/src/main/java/com/product/file/service/FileManagerService.java
@@ -30,9 +30,7 @@
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.text.SimpleDateFormat;
-import java.time.OffsetDateTime;
import java.util.*;
-import java.util.concurrent.TimeUnit;
/**
* Copyright LX-BASE
diff --git a/src/main/java/com/product/file/util/AsposeUtil.java b/src/main/java/com/product/file/util/AsposeUtil.java
index 152695e..0d427d3 100644
--- a/src/main/java/com/product/file/util/AsposeUtil.java
+++ b/src/main/java/com/product/file/util/AsposeUtil.java
@@ -8,12 +8,18 @@
import java.math.RoundingMode;
import java.text.DecimalFormat;
+import com.aspose.cells.Cells;
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.SaveFormat;
import com.product.core.exception.BaseException;
import com.product.core.spring.context.SpringMVCContextHolder;
+import com.product.file.config.FileCode;
public class AsposeUtil {
//鏄惁鍒濆浜唋icense
@@ -45,7 +51,7 @@
isInitLicense=true;
} catch (Exception e) {
result=false;
- throw new BaseException(e);
+ throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
}finally{
if(is!=null) {
try {
@@ -75,14 +81,13 @@
file.mkdirs();
}
Workbook wb = new Workbook(officePath);// 鍘熷excel璺緞
- File pdfFile = new File(OutPutPath);// 杈撳嚭璺緞
- fileOS = new FileOutputStream(pdfFile);
+ 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(e);
+ throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
}finally{
if(fileOS!=null) {
try {
@@ -93,6 +98,58 @@
}
}
}
+ }
+ 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.exists()) {
+ file.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));
+ }
+ fileOS = new FileOutputStream(OutPutPath);
+ wb.save(fileOS, 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);
+ }
}
/**
*
@@ -108,15 +165,14 @@
FileOutputStream fileOS=null;
try {
File file = new File(OutPutPath);
- if (!file.getParentFile().exists()) {
- file.getParentFile().mkdirs();
+ if (!file.exists()) {
+ file.mkdirs();
}
Document doc = new Document(officePath);// 鍘熷word璺緞
- File pdfFile = new File(OutPutPath);// 杈撳嚭璺緞
- fileOS = new FileOutputStream(pdfFile);
+ fileOS = new FileOutputStream(OutPutPath);
doc.save(fileOS, com.aspose.words.SaveFormat.PDF);
} catch (Exception e) {
- throw new BaseException(e);
+ throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
}finally{
if(fileOS!=null) {
try {
@@ -145,15 +201,12 @@
if (!PathFile.exists()) {
PathFile.mkdirs();
}
- InputStream slides = new FileInputStream(new File(officePath));// 鍘熷ppt璺緞
+ InputStream slides = new FileInputStream(officePath);// 鍘熷ppt璺緞
Presentation pres = new Presentation(slides);
- File file = new File(OutPutPath);// 杈撳嚭pdf璺緞
- fileOS = new FileOutputStream(file);
+ fileOS = new FileOutputStream(OutPutPath);
pres.save(fileOS, com.aspose.slides.SaveFormat.Pdf);
- fileOS.flush();
- fileOS.close();
} catch (Exception e) {
- throw new BaseException(e);
+ throw new BaseException(FileCode.DOC_CONVERT_FALL,e);
}finally{
if(fileOS!=null) {
try {
@@ -175,33 +228,24 @@
public static String OfficeToPdf(String officePath,String outFile,String officeType )throws BaseException {
SpringMVCContextHolder.getSystemLogger().info("The file of office type:"+officePath);
- SpringMVCContextHolder.getSystemLogger().info("The file of PDF type:"+outFile);
+ if("pdf".equals(officeType)) {
+ return outFile;
+ }
File file = new File(officePath);
//鍒ゆ柇褰撳墠office鏂囦欢鏄惁宸茬粡杞负PDF,濡傛灉宸茶浆涓篜DF灏变笉闇�瑕佸啀娆¤浆鎹€��
- if (file.exists()&& !"pdf".equals(officeType)) {
- double bytes = file.length();
- double kilobytes = (bytes / 1024);
- double megabytes = (kilobytes / 1024);
-
- DecimalFormat df = new DecimalFormat("0.00");
- df.setRoundingMode(RoundingMode.HALF_UP);
- String MB = df.format(megabytes);
- Double Size = Double.parseDouble(MB);
-// if(Size>10){
- SpringMVCContextHolder.getSystemLogger().info("The file size:"+Size+"MB");
-// }
- //"doc", "docx", "xls","xlsx", "ppt", "pptx"
- if(officeType.equals("doc")||officeType.equals("docx")){
+ if (file.exists()) {
+ if(officeType.equals("doc")||officeType.equals("docx")){
Word2Pdf(officePath,outFile);
}else if(officeType.equals("xls")||officeType.equals("xlsx")){
- Excel2Pdf(officePath,outFile);
+// Excel2Pdf(officePath,outFile);
+ Excel2Html(officePath,outFile);
}else if(officeType.equals("ppt")||officeType.equals("pptx")){
PPT2Pdf(officePath,outFile);
}else{
- SpringMVCContextHolder.getSystemLogger().info("File types that cannot be converted:"+officeType);
+ throw new BaseException(FileCode.DOC_CONVERT_NOT_SUPPORT_FILE_FALL);
}
} else {
- SpringMVCContextHolder.getSystemLogger().info("File Not Exist");
+ throw new BaseException(FileCode.DOC_CONVERT_FILE_NOT_EXIST_FALL);
}
return outFile;
}
@@ -212,7 +256,6 @@
*/
public static String OfficeToPdf(String officePath) {
- //G:/product/WebApp/fwis_develop/com/is/flywings/oa/attchfile/1000000000/i0002/101951.docx鈱�101951.docx鈱抐eiyu.docx
String[] split = officePath.split("鈱�");
int lastIndex = split[0].lastIndexOf(".");
int lastNameIndex = split[0].lastIndexOf("/");
@@ -261,7 +304,79 @@
}
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);
+ targetDoc.appendDocument(sourceDoc, ImportFormatMode.KEEP_SOURCE_FORMATTING);
+ File dir=new File(temp);
+ if(!dir.exists()) {
+ if(dir.mkdirs()) {
+ 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 main(String args[]) {
String file="E:/work/娌勫磧/FE6.6浜у搧鎶ヤ环宸ュ叿-鏂� - 鍓湰.xlsx";
AsposeUtil.OfficeToPdf(file);
--
Gitblit v1.9.2