利用pdfjs实现的pdf预览简单demo(包含翻页功能)

利用pdfjs实现的pdf预览简单demo

文章目录


实现方式

该demo采用html实现,然后js什么的都引用线上的,主要呈现思路,有需要的话,可以摘取页面实现部分思路二次开发,或直接封装使用。


demo展示

代码如下:

c 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PDF.js Demo</title>
<style>
    body {
        font-family: Arial, sans-serif;
        margin: 20px;
    }
    canvas {
        border: 1px solid black;
        margin-top: 10px;
    }
</style>
</head>
<body>
<h1>PDF.js Demo</h1>
<button onclick="previousPage()">Previous Page</button>
<button onclick="nextPage()">Next Page</button>
<div>
    Page <span id="page_num"></span> of <span id="page_count"></span>
</div>
<canvas id="pdf_renderer"></canvas>

<script src="https://cdn.bootcdn.net/ajax/libs/pdf.js/2.10.377/pdf.min.js"></script>
<script>
    let pdfDoc = null,
        pageNum = 1,
        pageRendering = false,
        pageNumPending = null,
        canvas = document.getElementById('pdf_renderer'),
        ctx = canvas.getContext('2d');

    function renderPage(num) {
        pageRendering = true;
        pdfDoc.getPage(num).then(function(page) {
            let viewport = page.getViewport({scale: 1.5});
            canvas.height = viewport.height;
            canvas.width = viewport.width;
            let renderContext = {
                canvasContext: ctx,
                viewport: viewport
            };
            let renderTask = page.render(renderContext);
            renderTask.promise.then(function() {
                pageRendering = false;
                if (pageNumPending !== null) {
                    renderPage(pageNumPending);
                    pageNumPending = null;
                }
            });
        });
        document.getElementById('page_num').textContent = num;
    }

    function queueRenderPage(num) {
        if (pageRendering) {
            pageNumPending = num;
        } else {
            renderPage(num);
        }
    }

    function nextPage() {
        if (pageNum >= pdfDoc.numPages) {
            return;
        }
        pageNum++;
        queueRenderPage(pageNum);
    }

    function previousPage() {
        if (pageNum <= 1) {
            return;
        }
        pageNum--;
        queueRenderPage(pageNum);
    }

    // Load PDF document 
     const url = '自己的文件的路径';
    pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
        pdfDoc = pdfDoc_;
        document.getElementById('page_count').textContent = pdfDoc.numPages;
        renderPage(pageNum);
    });
</script>
</body>
</html>

总结

好的你绝对看不出博主在水文章,这个是博主之前解决一个项目难题积累下的,希望或多或少能够帮助你们。

相关推荐
叫我一声阿雷吧24 分钟前
JS 入门通关手册(44):宏任务 / 微任务 / Event Loop(前端最难核心,面试必考
javascript·宏任务·event loop· 前端面试· 微任务· 事件循环·js单线程
KevinCyao25 分钟前
安卓android视频短信接口怎么集成?AndroidStudio视频短信开发指南
android
We་ct26 分钟前
LeetCode 172. 阶乘后的零:从暴力到最优,拆解解题核心
开发语言·前端·javascript·算法·leetcode·typescript
军军君0126 分钟前
数字孪生监控大屏实战模板:可视化数字统计展示
前端·javascript·vue.js·typescript·echarts·数字孪生·前端大屏
吴声子夜歌1 小时前
ES6——Iterator和for...of循环详解
前端·javascript·es6
小李子呢02111 小时前
前端八股3---ref和reactive
开发语言·前端·javascript
Android出海1 小时前
安卓侧载强制24小时冷却,第三方APK直投买量面临停摆
android·google play·app出海·android出海·android侧载·谷歌开发者·android开发者
优化控制仿真模型1 小时前
【26年6月四级】英语四级高频核心词汇1500个pdf电子版+真题
经验分享·pdf
kerli1 小时前
Compose 组件:LazyColumn 核心参数与 key/contentType 详解
android·前端
优化控制仿真模型1 小时前
【26大英赛】2012-2026年全国大学生英语竞赛ABCD类历年真题、样题及答案电子版PDF
经验分享·pdf