首页 > 其他分享 >Android之WebView显示PDF文档

Android之WebView显示PDF文档

时间:2023-10-31 13:44:20浏览次数:23  
标签:WebSettings mWv1 WebView var PDF Android true webSettings android

参考:https://blog.csdn.net/Android_Cll/article/details/131641229
https://cloud.tencent.com/developer/article/2301730
Android项目新增js:/app/src/main/assets/wwwroot/index.js 我新建了一个wwwroot放里面了。自己看着办。

var url = location.search.substring(1);

PDFJS.cMapUrl = 'https://unpkg.com/[email protected]/cmaps/';
PDFJS.cMapPacked = true;

var pdfDoc = null;

function createPage() {
    var div = document.createElement("canvas");
    document.body.appendChild(div);
    return div;
}

function renderPage(num) {
    pdfDoc.getPage(num).then(function (page) {
        var viewport = page.getViewport(2.0);
        var canvas = createPage();
        var ctx = canvas.getContext('2d');

        canvas.height = viewport.height;
        canvas.width = viewport.width;

        page.render({
            canvasContext: ctx,
            viewport: viewport
        });
    });
}

PDFJS.getDocument(url).then(function (pdf) {
    pdfDoc = pdf;
    for (var i = 1; i <= pdfDoc.numPages; i++) {
        renderPage(i)
    }
});

同样目录,再新增一个index.html

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=4.0,user-scalable=no"/>
    <title>Document</title>
    <style type="text/css">
        canvas {
            width: 100%;
            height: 100%;
            border: 1px solid black;
        }
    </style>
    <script src="https://unpkg.com/[email protected]/build/pdf.min.js"></script>
    <script type="text/javascript" src="index.js"></script>
</head>
<body>
</body>
</html>

webview加载pdf

package com.jay.myappstudy;

import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;

public class WebViewPdfActivity extends Activity {
    private WebView mWv1;
    private Context ctx = this;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view_pdf);
        mWv1 = findViewById(R.id.wv1);
        WebSettings webSettings = mWv1.getSettings();
        // 允许javascript 设置支持JS就自动打开IndexedDB存储机制
        webSettings.setJavaScriptEnabled(true);
        webSettings.setUseWideViewPort(true); //将图片调整到适合WebView的大小
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
        webSettings.setUserAgentString("User-Agent");
        //webSettings.setLightTouchEnabled(true);//设置用鼠标激活被选项
        webSettings.setBuiltInZoomControls(true);//设置支持缩放
        webSettings.setDomStorageEnabled(true);//设置DOM缓存,当H5网页使用localStorage时,一定要设置
        webSettings.setDatabaseEnabled(true);
        //WebSettings.LOAD_NO_CACHE 设置去缓存,防止加载的为上一次加载过的
        webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
        webSettings.setSupportZoom(true);//设置支持变焦
        mWv1.setHapticFeedbackEnabled(false);
        //webSettings.setPluginState(WebSettings.PluginState.ON);
        webSettings.setAllowFileAccess(true);
        webSettings.setAllowContentAccess(true);
        // 设置是否允许通过 file url 加载的 Javascript 可以访问其他的源(包括http、https等源)
        webSettings.setAllowUniversalAccessFromFileURLs(true);
        // 支持通过JS打开新窗口
        webSettings.setAllowFileAccessFromFileURLs(true);
        webSettings.setDefaultTextEncodingName("UTF-8");
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);

        webSettings.setGeolocationEnabled(true);
        webSettings.setAppCacheEnabled(false);
        mWv1.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

        //触摸焦点起作用
        mWv1.requestFocus();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            //http与https的方法
            webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        }
        mWv1.loadUrl("file:///android_asset/wwwroot/viewpdf.html?http://192.168.9.9:8090/1.pdf");
    }
}

 

标签:WebSettings,mWv1,WebView,var,PDF,Android,true,webSettings,android
From: https://www.cnblogs.com/xsj1989/p/17800056.html

相关文章

  • Android开发App回到桌面但不退出APP的实现
    方法1:Intentintent=newIntent();//创建Intent对象intent.setAction(Intent.ACTION_MAIN);//设置Intent动作intent.addCategory(Intent.CATEGORY_HOME);//设置Intent种类intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//标记context.startActivity(intent);方法2:......
  • 【专题】2022年智能汽车行业数字化人才白皮书报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34111原文出处:拓端数据部落公众号随着新一轮技术革命和产业变革的推动,以及国家政策的大力扶持,电动化、智能化、网联化已经成为汽车行业发展的新趋势。在这种背景下,各大企业纷纷争夺数字化人才,以推动产品的规模化落地和商业化创新应用。阅读原文,获......
  • 7 年 Android 老油条告诉你:天天工作拧螺丝,如何打破技术瓶颈?
    引言作为在Android这个圈子摸爬滚打7年的老油条想给你们工作“3~5”年的朋友提点职业上和技术上的建议其实很多做开发的朋友都会遇到的怪圈。就是当你到某一个阶段,会觉得业务和技术提升都很难,现在的公司待着感觉没有前途混吃等死,想跳槽吧,心里却没底。如果是碰到这种情况,那么十......
  • Android的Handler机制原理详解
    Android的Handler机制是一种用于处理和调度线程之间消息传递的机制,通常用于在后台线程中执行任务,并将结果返回到主线程中更新UI。Handler机制的核心是Message和MessageQueue,以及Looper。以下是AndroidHandler机制的主要组成部分和工作原理:1.Message(消息):Message是一个包含要传递的......
  • 重新使用android studio编写udp socket程序,备忘记录
    1,建立socket需要使用子线程而不是主线程。2,java/android使用数据报格式。3,可以利用python作为socket的客户/服务器端,非常简单。但python可以不使用数据报,而直接使用字符串。当然也可以使用数据报。当与android配合时使用数据报格式4,一般地,传输的是字符串,因此,数字要编码为字符串......
  • 揭秘:为什么80%的Android码农都做不了架构师?
    前言一般来说技术团队的金字塔顶尖往往是技术最牛的人做架构师(或TL)。所以架构师在广大码农中的占比大概平均不到20%。然而80%码农干上许多年都是重复以下内容,所以做不了架构师,正在辛苦工作的程序员们,你有没有下面几种感觉?①我的工作就是按时完成领导交给我的任务,至于代码写的怎样......
  • vue 将html保存成pdf文件
    结合html2canvas和jspdf插件处理/*eslint-disable*///不使用JQuery版的importhtml2canvasfrom'html2canvas'importJsPDFfrom'jspdf'/***@paramele要生成pdf的DOM元素(容器)*@parampadfNamePDF文件生成后的文件名字**/exportfunc......
  • 安卓平板,学习平板、三防工业平板Android主板定制方案
    近年来,平板设备在生活和工业领域应用不断增长。学习平板和工业intelligent设备的销量都处在高速发展阶段。预计到2024年,我国平板总出货量将继续增长。安卓平板采用高度集成设计,将多媒体解码、液晶驱动、USB接口、以太网、HDMI输出、TF卡插槽、WiFi、人体感应、串口、......
  • FastReport 导出Excel、Word、Pdf
    privatevoidExportPDF(H_HistoryDataModelmodel){try{//createreportinstanceReportreport=newReport();PrepareReport(report,model);//createexpor......
  • Android Studio无法启动虚拟机
    TheemulatorprocessforAVDhasterminated网上很多这个问题的解决方案,当然也是有不同的原因的1、就是.android路径的问题,不在SDK目录下,那就乾坤大挪移呗2、可能是磁盘空间不足,自己清理吧3、就是那个模拟器的性能设置那里了,automatic或者hardware的都不行,那就试试software的我这......