heheng
9 天以前 bd605ac1e79b73db3b501f323d6f4a10c0f27dd5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.gkhy.exam.common.utils;
 
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
 
import java.io.InputStream;
 
/**
 * 文档工具
 *
 * @author LYQ
 */
@Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class DocUtils {
 
    /**
     * 获取文档页数
     *
     * @param fileName 文档名称
     * @param is       文件流
     * @return 文档页数
     */
    public static int getDocPageCount(String fileName, InputStream is) {
        if (is == null) {
            return 0;
        }
 
        try {
            // txt
            if (fileName.endsWith(".txt")) {
                return 1;
            }
            // excel 97~2003
            if (fileName.endsWith(".xls")) {
                HSSFWorkbook workbook = new HSSFWorkbook(is);
                int sheetNums = workbook.getNumberOfSheets();
                if (sheetNums > 0) {
                    return workbook.getSheetAt(0).getRowBreaks().length + 1;
                }
                return 0;
            }
            // excel 新版
            if (fileName.endsWith(".xlsx")) {
                XSSFWorkbook xwb = new XSSFWorkbook(is);
                int sheetNums = xwb.getNumberOfSheets();
                if (sheetNums > 0) {
                    return xwb.getSheetAt(0).getRowBreaks().length + 1;
                }
                return 0;
            }
            // word 97~2003
            if (fileName.endsWith(".doc")) {
                HWPFDocument wordDoc = new HWPFDocument(is);
                return wordDoc.getSummaryInformation().getPageCount();
            }
            // word 新版
            if (fileName.endsWith(".docx")) {
                XWPFDocument wordDoc = new XWPFDocument(is);
                return wordDoc.getProperties().getExtendedProperties().getUnderlyingProperties().getPages();
            }
 
            // ppt 97~2003
            if (fileName.endsWith(".ppt")) {
                HSLFSlideShow slideShow = new HSLFSlideShow(is);
                return slideShow.getSlides().size();
            }
            // ppt 新版
            if (fileName.endsWith(".pptx")) {
                XMLSlideShow slideShow = new XMLSlideShow(is);
                return slideShow.getSlides().size();
            }
 
            // pdf
            if (fileName.endsWith(".pdf")) {
                PDDocument doc = PDDocument.load(is);
                return doc.getNumberOfPages();
            }
        } catch (Exception e) {
            log.error("获取文档页数失败!", e);
        }
        return 0;
    }
}