消逝
2024-07-12 b81d9110bcdef3b80386c6f16fa927e481ed9a7a
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
import { renderAsync } from "docx-preview";
import * as pdfjsLib from "pdfjs-dist";
import workerUrl from "pdfjs-dist/build/pdf.worker.min.mjs?url";
pdfjsLib.GlobalWorkerOptions.workerSrc = workerUrl;
/**
 * 预览文件
 * @param data 文件数据
 * @param fileType 文件类型
 * @param document 选择器或要渲染的dom对象
 */
export function previewFile(data, fileType, element) {
    if (typeof element === "string") {
        element = document.querySelector(element);
    }
    return new Promise(async (resolve, reject) => {
        let fileData = data;
        if (typeof data === "string") {
            fileData = await fetch(data).then((res) => res.arrayBuffer());
        }
 
        switch (fileType) {
            case "docx":
                renderAsync(fileData, element)
                    .then(() => {
                        resolve(void 0);
                    })
                    .catch((err) => {
                        reject(err);
                    });
                break;
            case "pdf":
                const loadingTask = pdfjsLib.getDocument(fileData);
                loadingTask.promise
                    .then((pdf) => {
                        // Fetch the first page
                        for (let i = 1; i <= pdf.numPages; i++) {
                            // const pageNumber = 1;
 
                            pdf.getPage(i)
                                .then((page) => {
                                    console.log("Page loaded");
 
                                    const scale = 1;
                                    const viewport = page.getViewport({
                                        scale: scale,
                                    });
 
                                    // Prepare canvas using PDF page dimensions
                                    const canvas =
                                        document.createElement("canvas");
                                    const context = canvas.getContext("2d");
                                    canvas.height = viewport.height;
                                    canvas.width = viewport.width;
                                    element.appendChild(canvas);
 
                                    // Render PDF page into canvas context
                                    const renderTask = page.render({
                                        canvasContext: context,
                                        viewport: viewport,
                                    });
                                    renderTask.promise.then(function () {
                                        console.log("Page rendered");
                                    });
                                })
                                .catch((err) => {
                                    reject(err);
                                });
                        }
                    })
                    .catch((err) => {
                        reject(err);
                    });
                break;
            case "xlsx":
                break;
        }
    });
}