<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PDF Page Extractor and Cover Generator</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf-lib/1.17.1/pdf-lib.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.10.377/pdf.min.js"></script>
    <style>
        #pdf-render {
            max-width: 100%;
            height: auto;
            border: 1px solid #ddd;
            margin-top: 20px;
        }
        body {
            background-color: #1a1a1a; /* 默认深色 */
            color: #ffffff;
            transition: all 0.3s ease; /* 平滑切换 */
        }
        body.theme-light {
            background-color: #ffffff; /* 浅色模式 */
            color: #000000;
        }
    </style>
</head>
<body>
<h2>Upload a PDF and Extract Specific Pages</h2>
<input type="file" id="pdfFile" accept="application/pdf">
<br><br>
<label for="startPage">Start Page:</label>
<input type="number" id="startPage" min="1">
<label for="endPage">End Page:</label>
<input type="number" id="endPage" min="1">
<br><br>
<button onclick="extractPages()">Extract Pages</button>
<br><br>
<a id="downloadLink" style="display: none;">Download Extracted PDF</a>

<h2>Generate PDF Cover Page</h2>
<input type="file" id="pdf-upload" accept="application/pdf">
<canvas id="pdf-render"></canvas>

<script>
    window.addEventListener('message', (event) => {
        const {theme} = event.data;
        if (theme) {
            // 根据主题动态添加或移除 class
            document.body.classList.toggle('theme-light', theme === 'light');
        }
    });
    async function extractPages() {
        const fileInput = document.getElementById('pdfFile');
        const startPage = parseInt(document.getElementById('startPage').value);
        const endPage = parseInt(document.getElementById('endPage').value);

        if (!fileInput.files.length) {
            alert('Please upload a PDF file.');
            return;
        }

        if (isNaN(startPage) || isNaN(endPage) || startPage <= 0 || endPage < startPage) {
            alert('Please enter a valid page range.');
            return;
        }

        const file = fileInput.files[0];
        const arrayBuffer = await file.arrayBuffer();
        const pdfDoc = await PDFLib.PDFDocument.load(arrayBuffer);
        const totalPages = pdfDoc.getPageCount();

        if (startPage > totalPages || endPage > totalPages) {
            alert('Page range exceeds the total number of pages in the PDF.');
            return;
        }

        const newPdfDoc = await PDFLib.PDFDocument.create();
        for (let i = startPage - 1; i < endPage; i++) {
            const [copiedPage] = await newPdfDoc.copyPages(pdfDoc, [i]);
            newPdfDoc.addPage(copiedPage);
        }

        const pdfBytes = await newPdfDoc.save();
        const blob = new Blob([pdfBytes], { type: 'application/pdf' });
        const downloadLink = document.getElementById('downloadLink');
        downloadLink.href = URL.createObjectURL(blob);
        downloadLink.download = 'extracted_pages.pdf';
        downloadLink.style.display = 'block';
        downloadLink.textContent = 'Download Extracted PDF';
    }

    document.getElementById('pdf-upload').addEventListener('change', async function(event) {
        const file = event.target.files[0];
        if (file && file.type === "application/pdf") {
            const fileReader = new FileReader();

            fileReader.onload = async function() {
                const typedArray = new Uint8Array(this.result);
                const loadingTask = pdfjsLib.getDocument(typedArray);

                try {
                    const pdf = await loadingTask.promise;
                    const page = await pdf.getPage(1); // 获取第一页

                    const viewport = page.getViewport({ scale: 1.5 });
                    const canvas = document.getElementById('pdf-render');
                    const context = canvas.getContext('2d');
                    canvas.width = viewport.width;
                    canvas.height = viewport.height;

                    // 渲染页面
                    const renderContext = {
                        canvasContext: context,
                        viewport: viewport
                    };
                    await page.render(renderContext).promise;

                    console.log('封面生成成功');
                } catch (error) {
                    console.error('无法加载 PDF 文件:', error);
                }
            };

            fileReader.readAsArrayBuffer(file);
        } else {
            alert('请选择一个有效的 PDF 文件');
        }
    });
</script>
</body>
</html>