Android 打开 在线 pdf 文件

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>H5 PDF 预览</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.4.120/pdf.min.js"></script>
    <style>
        body { margin: 0; padding: 10px; box-sizing: border-box; }
        #pdfContainer { width: 100%; min-height: 80vh; border: 1px solid #eee; }
        .loading { text-align: center; padding: 20px; color: #666; }
        .error { text-align: center; padding: 20px; color: red; }
    </style>
</head>
<body>
<div class="loading" id="loading">正在加载PDF...</div>
<div class="error" id="error" style="display: none;"></div>
<div id="pdfContainer"></div>

<script>
    pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.4.120/pdf.worker.min.js';

    // 从URL参数获取PDF地址
    function getPdfUrlFromParams() {
        const urlParams = new URLSearchParams(window.location.search);
        return urlParams.get('pdfUrl');
    }

    // 初始化PDF渲染
    async function renderPdf() {
        const container = document.getElementById('pdfContainer');
        const loading = document.getElementById('loading');
        const errorDiv = document.getElementById('error');

        // 获取PDF URL
        const pdfUrl = getPdfUrlFromParams();

        if (!pdfUrl) {
            loading.style.display = 'none';
            errorDiv.style.display = 'block';
            errorDiv.textContent = '未提供PDF文件地址';
            return;
        }

        try {
            // 获取PDF文档
            const pdfDoc = await pdfjsLib.getDocument(pdfUrl).promise;
            loading.style.display = 'none';

            // 渲染每一页PDF
            for (let pageNum = 1; pageNum <= pdfDoc.numPages; pageNum++) {
                const page = await pdfDoc.getPage(pageNum);
                // 设置渲染尺寸(适配移动端宽度)
                const viewport = page.getViewport({ scale: 1 });
                const scale = window.innerWidth / viewport.width;
                const scaledViewport = page.getViewport({ scale: scale });

                // 创建画布容器
                const canvas = document.createElement('canvas');
                const context = canvas.getContext('2d');
                canvas.width = scaledViewport.width;
                canvas.height = scaledViewport.height;
                container.appendChild(canvas);

                // 渲染页面
                await page.render({
                    canvasContext: context,
                    viewport: scaledViewport
                }).promise;
            }
        } catch (error) {
            loading.style.display = 'none';
            errorDiv.style.display = 'block';
            errorDiv.textContent = 'PDF加载失败,请检查文件地址';
            console.error('PDF加载错误:', error);
        }
    }

    // 页面加载完成后执行
    window.onload = renderPdf;
</script>
</body>
</html>

将这个文件放在服务器上,让后直接用webView打开,拼接上 pdfUrl= 链接,就Ok了

相关推荐
肯多洛夫斯基23 分钟前
安卓工控屏静默连WiFi全攻略
android
极梦网络无忧1 小时前
Android无障碍服务实现抖音直播间界面监控(场控助手核心原理)
android
call me by ur name2 小时前
ERNIE 5.0 Technical Report论文解读
android·开发语言·人工智能·机器学习·ai·kotlin
kerli2 小时前
Compose 组件:Box 核心参数及其 Bias 算法
android·前端
BLUcoding2 小时前
Android 常用控件及核心属性
android
遥不可及zzz2 小时前
[特殊字符] Android AAB 一键安装工具配置指南
android·macos
私人珍藏库3 小时前
【Android】一键硬核锁手机
android·智能手机·app·工具·软件
TTTao23333 小时前
自用Android项目框架备份
android
沃尔威武4 小时前
性能调优实战:从火焰图定位到SQL优化的全流程
android·数据库·sql
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.4 小时前
基于MySQL一主一从环境添加多个新从库
android·mysql·adb