拆分PDF.html 办公小工具

将下面的脚本拷贝放到一个空白的html文件中,然后保存,通过浏览器打开后就可以拆分pdf文件了。

拆分PDF.html

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <title>PDF拆分工具</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/FileSaver.js/2.0.5/FileSaver.min.js"></script> 
    <style>
        .container { max-width: 800px; margin: 20px auto; padding: 20px; }
        .drop-zone { border: 2px dashed #ccc; padding: 20px; text-align: center; }
        #pageInput { width: 300px; padding: 5px; margin: 10px 0; }
        #status { color: #666; margin: 10px 0; }
        #splitBtn { background: #2196F3; color: white; padding: 10px 20px; border: none; cursor: pointer; }
    </style>
</head>
<body>
    <div class="container">
        <div class="drop-zone" id="dropZone">
            拖拽PDF文件至此 或 <input type="file" id="fileInput" accept=".pdf">
        </div>
        <input type="text" id="pageInput" placeholder="输入页码范围 (如: 1-5,7,9-12)">
        <div id="status">等待文件上传...</div>
        <button id="splitBtn" onclick="splitPDF()">开始拆分</button>
    </div>
 
<script>
let selectedFile = null;
 
// 文件处理 
document.getElementById('dropZone').ondragover  = (e) => {
    e.preventDefault(); 
    e.target.style.borderColor  = '#2196F3';
};
 
document.getElementById('dropZone').ondrop  = (e) => {
    e.preventDefault(); 
    const file = e.dataTransfer.files[0]; 
    if(file.type  === 'application/pdf') {
        selectedFile = file;
        updateStatus(`已选择文件: ${file.name}`); 
    }
};
 
document.getElementById('fileInput').onchange  = (e) => {
    const file = e.target.files[0]; 
    if(file.type  === 'application/pdf') {
        selectedFile = file;
        updateStatus(`已选择文件: ${file.name}`); 
    }
};
 
// 核心拆分逻辑 
async function splitPDF() {
    if(!selectedFile) return alert('请先选择PDF文件');
    const pages = parsePageRange(document.getElementById('pageInput').value); 
    if(pages.length  === 0) return alert('请输入有效页码范围');
 
    try {
        const pdfBytes = await selectedFile.arrayBuffer(); 
        const pdfDoc = await PDFLib.PDFDocument.load(pdfBytes); 
        const newPdf = await PDFLib.PDFDocument.create(); 
        
        // 复制指定页面 
        const copiedPages = await newPdf.copyPages(pdfDoc,  pages.map(p  => p-1));
        copiedPages.forEach(page  => newPdf.addPage(page)); 
 
        // 生成新文件 
        const newPdfBytes = await newPdf.save(); 
        saveAs(new Blob([newPdfBytes], {type: 'application/pdf'}), 
              `拆分结果_${selectedFile.name}`); 
        updateStatus("拆分完成,开始下载...");
    } catch (error) {
        console.error(' 拆分失败:', error);
        alert('文件处理失败,请检查PDF格式');
    }
}
 
// 页码解析器 (支持格式: 1-5,7,9-12)
function parsePageRange(input) {
    const pages = new Set();
    const ranges = input.split(','); 
    
    ranges.forEach(range  => {
        const match = range.match(/^(\d+)(?:-(\d+))?$/); 
        if(match) {
            const start = parseInt(match[1]);
            const end = match[2] ? parseInt(match[2]) : start;
            for(let i = start; i <= end; i++) {
                pages.add(i); 
            }
        }
    });
    return Array.from(pages).sort((a,b)  => a - b);
}
 
function updateStatus(text) {
    document.getElementById('status').innerHTML  = text;
}
</script>
</body>
</html>
相关推荐
XiaoLeisj1 小时前
Android 短视频项目首页开发实战:从广场页广告轮播与网格列表,到发现页分类、播单与话题广场的数据驱动实现
android·okhttp·mvvm·recyclerview·retrofit·databinding·xbanner 轮播
.豆鲨包3 天前
【Android】OkHttp的使用及封装
android·java·okhttp
华科易迅3 天前
Vue通过Ajax获取后台路由信息
vue.js·ajax·okhttp
studyForMokey4 天前
【Android面试】OkHttp & Retrofit 专题
android·okhttp·面试
fLDiSQV1W5 天前
springMVC-HTTP消息转换器与文件上传、下载、异常处理
网络协议·http·okhttp
Ttang239 天前
Java爬虫:Jsoup+OkHttp实战指南
java·爬虫·okhttp
李庆政3709 天前
OkHttp的基本使用 实现GET/POST请求 authenticator自动认证 Cookie管理 请求头设置
java·网络协议·http·okhttp·ssl
无名-CODING10 天前
Java 爬虫进阶:动态网页、多线程与 WebMagic 框架实战
java·爬虫·okhttp
小李云雾11 天前
零基础-从ESS6基础到前后端联通实战
前端·python·okhttp·中间件·eclipse·html·fastapi
亿牛云爬虫专家11 天前
爬虫踩坑实录:OkHttp 接入爬虫代理报 Too many tunnel connections attempted 深度解析
爬虫·okhttp·https·爬虫代理·connect·隧道代理·ip 切换