| | |
| | | private FileUtil() { |
| | | } |
| | | |
| | | public static String checkDocType(File file) { |
| | | try (FileInputStream fis = new FileInputStream(file)) { |
| | | byte[] bytes = new byte[8]; |
| | | fis.read(bytes, 0, 8); |
| | | |
| | | String hex = bytesToHex(bytes); |
| | | |
| | | if (hex.contains("504B0304") && (file.getName().endsWith(".doc") || file.getName().endsWith(".docx"))) { |
| | | return "docx"; |
| | | } else if (hex.contains("D0CF11E0") && (file.getName().endsWith(".doc") || file.getName().endsWith(".docx"))) { |
| | | //因为doc文件的头部也是D0CF11E0,所以需要判断文件后缀 |
| | | return "doc"; |
| | | } |
| | | //增加xls 和 xlsx的判断 |
| | | else if (hex.contains("504B0304") && (file.getName().endsWith(".xls") || file.getName().endsWith(".xlsx"))) { |
| | | return "xlsx"; |
| | | } else if (hex.contains("D0CF11E0") && (file.getName().endsWith(".xls") || file.getName().endsWith(".xlsx"))) { |
| | | //因为xls文件的头部也是D0CF11E0,所以需要判断文件后缀 |
| | | return "xls"; |
| | | } else { |
| | | return "unknown"; |
| | | } |
| | | } catch ( |
| | | IOException e) { |
| | | e.printStackTrace(); |
| | | return "unknown"; |
| | | } |
| | | } |
| | | |
| | | private static String bytesToHex(byte[] bytes) { |
| | | StringBuilder hex = new StringBuilder(); |
| | | for (byte b : bytes) { |
| | | hex.append(String.format("%02X", b)); |
| | | } |
| | | return hex.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 合并word文档 |
| | | * |
| | |
| | | * @return |
| | | */ |
| | | public static File mergeFile(File source, File target) throws Exception { |
| | | //判断文件是否为 docx或doc格式 |
| | | if (!source.getName().endsWith(".docx") && !source.getName().endsWith(".doc")) { |
| | | throw new BaseException(FileCode.ADD_FILE_NOT_ALLOWED); |
| | | } |
| | | //如果是doc格式则转换为docx格式 |
| | | if (source.getName().endsWith(".doc")) { |
| | | if ("doc".equals(FileUtil.checkDocType(source))) { |
| | | source = toDocx(source); |
| | | } |
| | | if (target.getName().endsWith(".doc")) { |
| | | boolean delTarget = false; |
| | | if ("doc".equals(FileUtil.checkDocType(target))) { |
| | | target = toDocx(target); |
| | | delTarget = true; |
| | | } |
| | | XWPFTemplate template = XWPFTemplate.compile(source); |
| | | NiceXWPFDocument xwpfDocument = template.getXWPFDocument(); |
| | |
| | | } catch (IOException e) { |
| | | throw e; |
| | | } finally { |
| | | if (delTarget) { |
| | | target.delete(); |
| | | } |
| | | newDoc.close(); |
| | | sub.close(); |
| | | } |
| | |
| | | File docxFile = new File(file.getParent() + File.separator + docxName); |
| | | String tempDir = Global.getSystemConfig("temp.dir", "./attachment/temp"); |
| | | File tempFile = new File(tempDir + File.separator + docxName); |
| | | try { |
| | | Document document = new Document(new FileInputStream(file)); |
| | | |
| | | try (FileInputStream is = new FileInputStream(file);) { |
| | | Document document = new Document(is); |
| | | document.save(tempFile.getAbsolutePath(), com.aspose.words.SaveFormat.DOCX); |
| | | return tempFile; |
| | | } catch (Exception e) { |