美文网首页
2022-04-21 Android开发预览网络PDF

2022-04-21 Android开发预览网络PDF

作者: 颈椎以上瘫痪 | 来源:发表于2022-04-21 11:08 被阅读0次

    Android开发通常会需要预览一个服务器中的PDF文件

    使用原生WebView预览

    项目地址

    https://gitee.com/premeditate/MPEquipmentInformationAndroid

    1.编写一个PDF预览界面,进入界面需要传一个PDF网络地址

    界面内容

    package org.venus.mpeqi.ui.activity;
    
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.webkit.WebChromeClient;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import org.venus.library.utils.ToastUtil;
    import org.venus.mpeqi.R;
    import org.venus.mpeqi.utils.BASE64Encoder;
    
    import java.io.UnsupportedEncodingException;
    
    import butterknife.Bind;
    import butterknife.ButterKnife;
    
    /**
     * @Author Jxx     让世界看到我
     * @Create 2022/4/21 9:47
     * @Note TODO
     */
    public class PDFActivity extends AppCompatActivity {
    
        public static final String EXTRA_URL = "url";
    
        private String url;
    
        public static void join(Context context,String url){
            Intent intent = new Intent(context, PDFActivity.class);
            intent.putExtra(EXTRA_URL,url);
            context.startActivity(intent);
        }
    
        @Bind(R.id.pdf_view)
        WebView mPdfView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_pdf);
            ButterKnife.bind(this);;
    
            initData();
        }
    
        private void initData() {
            Intent intent = getIntent();
            if (intent == null) {
                ToastUtil.show(this, "数据错误");
                finish();
                return;
            }
            try {
                url = intent.getStringExtra(EXTRA_URL);
                if (url == null){
                    ToastUtil.show(this, "数据错误,请联系管理员");
                    finish();
                    return;
                }
                initView(url);
            } catch (Exception e) {
                e.printStackTrace();
                ToastUtil.show(this, "数据错误,请联系管理员");
                finish();
                return;
            }
        }
    
        private void initView(String url) {
            mPdfView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    // 返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
                    view.loadUrl(url);
                    return true;
                }
            });
            WebSettings settings = mPdfView.getSettings();
            settings.setSavePassword(false);
            settings.setJavaScriptEnabled(true);
            settings.setAllowFileAccessFromFileURLs(true);
            settings.setAllowUniversalAccessFromFileURLs(true);
            settings.setBuiltInZoomControls(true);
            mPdfView.setWebChromeClient(new WebChromeClient());
            if (!"".equals(url)) {
                byte[] bytes = null;
                try {// 获取以字符编码为utf-8的字符
                    bytes = url.getBytes("UTF-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                if (bytes != null) {
                    url = new BASE64Encoder().encode(bytes);// BASE64转码
                }
            }
            //下面是打开PDF的方法
            mPdfView.loadUrl("file:///android_asset/pdfjs/web/viewer.html?file=" + url);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            ButterKnife.unbind(this);
        }
    }
    

    布局内容

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <WebView
            android:id="@+id/pdf_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    
    </RelativeLayout>
    

    2.将PDFJS文件拷贝到assets目录中

    2022-04-21_110312.png

    3.对网络路径转码还有2个工具类,相关文件可以在项目代码中自提。

    4.在预览位置传入PDF网路地址打开预览界面

    fileInfo.url就是PDF路径

    FileListAdapter.OnItemEventListener mOnItemEventListener = new FileListAdapter.OnItemEventListener() {
        @RequiresApi(api = Build.VERSION_CODES.O)
        @Override
        public void click(FileInfo fileInfo) {
            //ToastUtil.show(FileListActivity.this,fileInfo.url);
            System.out.println("文件信息:"+new Gson().toJson(fileInfo));
            //使用PDFJS预览
            PDFActivity.join(FileListActivity.this,fileInfo.url);
        }
    };
    

    截图 Screenshot_20220421_101230_org.venus.mpeqi.jpg

    相关文章

      网友评论

          本文标题:2022-04-21 Android开发预览网络PDF

          本文链接:https://www.haomeiwen.com/subject/lbjiertx.html