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 +++++++++++++++++++++++++++++++++++++-------- 1 files changed, 150 insertions(+), 35 deletions(-) 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