• 最近项目中需要使用在线预览pdf,并要能实现自动播放,我想这样的需求无论如何来说都是很操蛋的 由于本人水平有限,最后讨论将项目需求改成将pdf下载到本地再实现自动播放。 接下来总结下目前能够实现pdf阅读的方案...
    最近项目中需要使用在线预览pdf,并要能实现自动播放,我想这样的需求无论如何来说都是很操蛋的
    由于本人水平有限,最后讨论将项目需求改成将pdf下载到本地再实现自动播放。

    接下来总结下目前能够实现pdf阅读的方案,开发当中需要根据实际需求去选择相应的方案。


    1.使用Google doc支持来展示word,excel,pdf,txt(WebView方式在线预览):

    WebView urlWebView = (WebView)findViewById(R.id.containWebView);
    	urlWebView.setWebViewClient(new AppWebViewClients());
    	urlWebView.getSettings().setJavaScriptEnabled(true);
    	urlWebView.getSettings().setUseWideViewPort(true);
    	urlWebView.loadUrl("http://docs.google.com/gview?embedded=true&url="
    					+ "YOUR_DOC_URL_HERE"); 
    
    	public class AppWebViewClients extends WebViewClient {
    
    		@Override
    		public boolean shouldOverrideUrlLoading(WebView view, String url) {
    			// TODO Auto-generated method stub
    			view.loadUrl(url);
    			return true;
    		}
    
    		@Override
    		public void onPageFinished(WebView view, String url) {
    			// TODO Auto-generated method stub
    			super.onPageFinished(view, url);
    
    		}
    	}
    https://docs.google.com/gview?embedded=true&url=文档地址

    优点:使用简单,无需服务器和客户端的额外部署工作。
    缺点:国内需要翻墙访问。

    2.github开源项目:https://github.com/JoanZapata/android-pdfview:

         

    引入:compile 'com.joanzapata.pdfview:android-pdfview:1.0.4@aar'

        <com.joanzapata.pdfview.PDFView
            android:id="@+id/pdfview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

             pdfView = (PDFView) findViewById(R.id.pdfview);
                   //加载assets下的文件
    		pdfView.fromAsset("sample.pdf")
    		     //.fromFile("")指定加载某个文件
    		     //指定加载某一页
                  /*.pages(0, 1,2, 3, 4, 5)*/
                    .defaultPage(1)
                    .showMinimap(false)
                    .enableSwipe(true)
                 /* .onDraw(onDraw)
                    .onLoad(onLoadCompleteListener)
                    .onPageChange(onPageChangeListener)*/
                    .load();
    里面有很多方法,可以去看PDFView的源码。


    3.Office Web 365(WebView方式在线预览,具体用法同1)

    第三方公司提供的一种 Office 文档在线预览的功能,能够实现 Microsoft、Adobe、WPS 
    文档的移动端和PC端在线网页访问。使用简单,类似 Google Doc 访问方式,一个固定格
    式的链接,轻松实现:
                     http://ow365.cn/?i=您的网站ID&furl=文档地址
    优点:功能强大,使用简单。
    缺点:付费使用(可免费受限使用,如访问次数、广告显示等)。



    4.打开本地应用

    如果移动设备中安装有能够打开 Office 文档的本地应用,也可以借助它们打开所要操作的文档,
    当然前提是必须先将远程文档下载到设备的本地存储空间中:

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    //officeFile:本地文档;type:文档MIMEType类型,可以使用文件格式后缀
    intent.setDataAndType(Uri.fromFile(officeFile), type);
    if (intent.resolveActivity(getPackageManager())!=null){
      startActivity(intent);
    }
    优点:可读可写。
    缺点:需要先行下载,同时设备中存在能够打开文档的本地应用,并且阅读时会离开当前应用。


    5.第三方 SDK

    网上有一些免费开源的解析源码和第三方公司提供的付费 SDK,将其嵌入自己的项目中,便能
    使用其中的功能操作 Office 文档。这种方式的缺点也显而易见,最直接的就是大大增加了 APK 
    安装文件的大小。免费的开源项目,存在一些局限性和不稳定性,操作繁琐;付费 SDK ,使用起来
    相对较为简单。
    免费开源:
    pdfium-----Google 的开源项目,也是 Chrome 浏览器的PDF渲染引擎,初始代码来自国内知名PDF技术公司「福昕」。


    AndroidPdfViewer(上面的方法2)


    PdfiumAndroid-----基于 pdfium 的两个 Android 平台实现方式,支持 PDF 文档的应用内预览,
                  支持动画、缩放、手势和双击操作。


    MuPDF------一个轻量级的 开源 PDF 和 XPS 查看器。


    付费SDK:
    Foxit PDF SDK-----福昕出品,性能稳定,功能强大,支持 PDF 的显示、导航、创建、搜索、
     注释、保护、PDF文本提取、图片转换、表单数据收集和编辑等功能。


    plugPDF-----来自国外的一个付费 SDK,使用简单,只需三步即可集成到自己的应用中并使用。


    6.服务器端解析
    需要在服务器端完成 Office 文档的解析工作,通过一些技术手段将文档转换为 Html 文件或者
    图片,然后再在客户端通过 WebView 加载显示。

    PDF.js:「 mozilla 」开源的一种JS解决方案,提供了服务器和客户端两种集成方式。


    pdf2htmlEX:类似 PDF.js ,在服务器端集成,利用 Web技术完成 Office 文档的解析工作。


    总结:

            总体来说,在 Android 平台上实现 Office 文档的预览和编辑功能,属于一个较为棘手的问题,
    需要结合实际产品需求和开发成本、稳定性等多方面考虑。当然,如果不是硬需求,最好不要
    随意集成开源 SDK,毕竟研发成本过高,同时稳定性不见得如你所想。

    展开全文
  • android原生webView不支持预览pdf文件,ios却可以,所以android想要实现在线预览webView要通过其他方法,有以下几种方法: 一.andorid原生自带的pdf管理库,主要提供两个类pdfRender和pdfDocument,有兴趣的可以...

    android原生webView不支持预览pdf文件,ios却可以,所以android想要实现在线预览webView要通过其他方法,有以下几种方法:

    一.andorid原生自带的pdf管理库,主要提供两个类pdfRender和pdfDocument,有兴趣的可以自己去了解一下,缺点就是必须是API>=21(也就是5.0以上)的版本才能支持,局限性太大。

    二.一个github上面的开源库PdfViewer,项目地址: https://github.com/barteksc/AndroidPdfViewer ,功能很强大,使用也很广泛,但有一个很重要的硬伤,那就是会使apk增加16M左右的大小,很难让人接受。

    三.也是一个github上的开源库PdfViewPager,项目路径是:https://github.com/voghDev/PdfViewPager ,可加载assets/SD卡/URL,使用比较方便,也不大,但不知道是否已经停止维护或是出现了bug,我在使用的时候报错,一直没解决,所以被我抛弃(可能自己技术不够罒ω罒)

    四.mupdf,是一款轻量级的pdf浏览框架,基本上支持前面两者的功能,如果是文本的pdf文档还支持搜索,标注等功能。当之无愧的强大。虽说轻量,但编译出来的so库也不小。具体怎样我也没用过,所以唔知。

    五.在webView中调用GoogleDocs实现在线预览,有个致命的缺点就是需要翻墙,所以果断放弃。

    六.调起第三发支持PDF阅读的应用,比如手机上的某些阅读器等,缺点明显,需要用户手机安装能预览PDF的应用才行,局限性太大,要预览还得再装一个app,不合理也麻烦,用户体验很差。

    七.通过PDF.js实现在线预览,这是一个github上的开源库。项目路径:https://github.com/mozilla/pdf.js

    这里重点讲第七种,因为局限性很小(除非github上的PDF.js没了),实现的方式也有两种,一种是直接下载整个开源库,拷贝到自己的项目的assets文件下,这样的优点就是可以改该库里的代码(根据自己的需要),缺点就是这个库也不小,会占用一定的内存空间,所以我也不考虑,我们采用以下第二种方式。

    首先,在assets下新建两个文件,pdf.html跟pdf.js,名字可以自己取,用的时候对应上就行

    pdf.html文件如下:

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

    pdf.js代码如下:

    var url = location.search.substring(1);
    PDFJS.cMapUrl = 'https://unpkg.com/pdfjs-dist@1.9.426/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)
      }
    });

    pdf.js文件中的 var viewport = page.getViewport(2.0); 是为了解决某些机型预览的时候显示模糊的问题;

    PDFJS.cMapUrl = 'https://unpkg.com/pdfjs-dist@1.9.426/cmaps/'; PDFJS.cMapPacked = true;是为了解决PDF内容显示不完整的问题。

    pdf.html文件中就将PDF.js链入了html中:<script src="https://unpkg.com/pdfjs-dist@1.9.426/build/pdf.min.js"></script>

    使用方式直接用webView.loadUrl("file:///android_asset/pdf.html?"+URL文件) URL文件可以是本地文件,也可以线上的pdf文件路径。这样就可以实现在线预览了,很简单,下面是可能会遇到的一些问题。

    出现的问题:

    1、WebView加载时控制台报错:Faild load file:你要展示的文件路径,这是因为WebView默认不允许加载本地文件,添加代码:WebView.getSettings().setAllowUniversalAccessFromFileURLs(true);即可。

    2、缩放问题,我运行上去发现图片中文字太小,需要放大才能看,但是界面却不能缩放,

    解决办法:

    (1)WebView设置:mWebView.getSettings().setSupportZoom(true);

    mWebView.getSettings().setBuiltInZoomControls(true);

    mWebView.getSettings().setDisplayZoomControls(true);  

    mWebView.getSettings().setAllowUniversalAccessFromFileURLs(true); //设置可以访问URL


    (2)show_pdf.html 文件修改:<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=4.0,user-scalable=yes"/>

    width=device-width :表示宽度是设备屏幕的宽度
    initial-scale=1.0:表示初始的缩放比例
    minimum-scale=0.5:表示最小的缩放比例
    maximum-scale=4.0:表示最大的缩放比例
    user-scalable=yes:表示用户是否可以调整缩放比例

    以上就是本博文的全部内容,有写得不好的地方,有什么需要建议的地方请留言,若觉得好请点个赞谢谢。

    参考博文:https://blog.csdn.net/sunnyjerry/article/details/84581819     https://blog.csdn.net/guoxiaolongonly/article/details/76992138

    展开全文
  • android 通过URL预览PDF文件和预览本地pdf文件,下载pdf文件
  • Android PdfViewer: 项目地址: https://github.com/barteksc/AndroidPdfViewer 功能很强大, 使用也比较广, 亲测可以使用. 1.依赖: compile 'es.voghdev.pdfviewpager:library:1.0.3' 2.xml布局 (可根据...

    安卓Webview不能直接打开PDF文件,需使用第三方框架 :

    Android PdfViewer:
    项目地址: https://github.com/barteksc/AndroidPdfViewer
    功能很强大, 使用也比较广, 亲测可以使用.

    1.依赖:

     compile 'es.voghdev.pdfviewpager:library:1.0.3'

     2.xml布局 (可根据自己项目, 增减)

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	xmlns:tools="http://schemas.android.com/tools"
    	android:layout_width="match_parent"
    	android:layout_height="match_parent"
    	android:orientation="vertical">
    	<include layout="@layout/layout"
    		android:id="@+id/basetop"/>
        <com.github.barteksc.pdfviewer.PDFView
            android:id="@+id/pdfView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
    </LinearLayout>

     3.activity (第一步,下载到本地;第二步,打开。So Easy!)

     

    public class PDFDatabaseActivity extends BaseActivity  implements OnPageChangeListener , OnLoadCompleteListener {
        private String mUrl = "http://web.online.jdmblock.com/币富宝超级节点计划app内部用.pdf";
      
        @BindView(R.id.pdfView)
        PDFView pdfView;
        Integer pageNumber = 0;
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_pdf);
            ButterKnife.bind(this);
            downFile(mUrl);
        }
        /**
         * 文件下载
         */
        private void downFile(String url) {
            DownloadUtil.get().download(url, 
     Environment.getExternalStorageDirectory().getAbsolutePath(), "文件名",
                    new DownloadUtil.OnDownloadListener() {
                        @Override
                        public void onDownloadSuccess(final File file) {
                          
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    // 下载完成打开
                                    Uri uri = Uri.fromFile(file);
                                    
                                    pdfView.fromUri(uri)
                                            .defaultPage(pageNumber)
                                            .onPageChange(PDFDatabaseActivity.this)
                                            .enableAnnotationRendering(true)
                                            .onLoad(PDFDatabaseActivity.this)
                                            .spacing(0) // in dp
                                            .load();
                                }
                            });
                        }
                        @Override
                        public void onDownloading(int progress) {
                        }
                        @Override
                        public void onDownloadFailed(Exception e) {
                        }
                    });
        }
        @Override
        public void onPageChanged(int page, int pageCount) {
        }
        @Override
        public void loadComplete(int nbPages) {
        }
    }
    

     

    附:okhttp下载工具类

     

    package com.example.btft.utils;
    
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    import okhttp3.Call;
    import okhttp3.Callback;
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.Response;
    
    /**
         * 文件下载工具类(单例模式)
         */
    
        public class DownloadUtil {
    
            private static DownloadUtil downloadUtil;
            private final OkHttpClient okHttpClient;
    
            public static DownloadUtil get() {
                if (downloadUtil == null) {
                    downloadUtil = new DownloadUtil();
                }
                return downloadUtil;
            }
    
            public DownloadUtil() {
                okHttpClient = new OkHttpClient();
            }
    
    
            /**
             * @param url          下载连接
             * @param destFileDir  下载的文件储存目录
             * @param destFileName 下载文件名称,后面记得拼接后缀,否则手机没法识别文件类型
             * @param listener     下载监听
             */
    
            public void download(final String url, final String destFileDir, final String destFileName, final OnDownloadListener listener) {
    
                Request request = new Request.Builder()
                        .url(url)
                        .build();
    
    
    
    
    
                //异步请求
                okHttpClient.newCall(request).enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        // 下载失败监听回调
                        listener.onDownloadFailed(e);
                    }
    
                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
    
                        InputStream is = null;
                        byte[] buf = new byte[2048];
                        int len = 0;
                        FileOutputStream fos = null;
    
                        //储存下载文件的目录
                        File dir = new File(destFileDir);
                        if (!dir.exists()) {
                            dir.mkdirs();
                        }
                        File file = new File(dir, destFileName);
    
                        try {
    
                            is = response.body().byteStream();
                            long total = response.body().contentLength();
                            fos = new FileOutputStream(file);
                            long sum = 0;
                            while ((len = is.read(buf)) != -1) {
                                fos.write(buf, 0, len);
                                sum += len;
                                int progress = (int) (sum * 1.0f / total * 100);
                                //下载中更新进度条
                                listener.onDownloading(progress);
                            }
                            fos.flush();
                            //下载完成
                            listener.onDownloadSuccess(file);
                        } catch (Exception e) {
                            listener.onDownloadFailed(e);
                        }finally {
    
                            try {
                                if (is != null) {
                                    is.close();
                                }
                                if (fos != null) {
                                    fos.close();
                                }
                            } catch (IOException e) {
    
                            }
    
                        }
    
    
                    }
                });
            }
    
    
            public interface OnDownloadListener{
    
                /**
                 * 下载成功之后的文件
                 */
                void onDownloadSuccess(File file);
    
                /**
                 * 下载进度
                 */
                void onDownloading(int progress);
    
                /**
                 * 下载异常信息
                 */
    
                void onDownloadFailed(Exception e);
            }
        }
    
    
    

     

    展开全文
  • android预览word/pdf demo

    2020-06-03 23:33:38
    实现在线js在线预览pdf,调用手机word预览软件进行预览等功能
  • 苹果手机可以直接在线预览PDF文件,而安卓手机不行,必须得下载(如图),所以需要解决一下 1.准备所需js文件 (1)js下载地址https://mozilla.github.io/pdf.js/ (2)下载步骤 ①:打开网址后,点击图中的...

    苹果手机可以直接在线预览PDF文件,而安卓手机不行,必须得下载(如图),所以需要解决一下

    1.准备所需js文件

    (1)js下载地址https://mozilla.github.io/pdf.js/

    (2)下载步骤

      ①:打开网址后,点击图中的“Download”

    ②:选择版本,直接下载即可

    2.在项目中导入相关JS文件(如图)

    3.编写代码

    (1)引入js文件

    <script src="js/build/pdf.js"></script>
    <script src="js/web/viewer.js"></script>
    <link rel="stylesheet" href="js/web/viewer.css">

    (2)指定相应文件路径

         ①:默认情况下,需要“mypdf”文件和“viewer.html”文件必须在同一个目录下,如图

     

            

     <a target="_blank" href="js/web/viewer.html?file=mypdf/test.pdf">在线预览PDF文件</a>

       ②:如果项目中无法实现两个文件在同一目录下(如图),可以使用相对路径来实现

           

    <a target="_blank" href="js/web/viewer.html?file=../../mypdf/test.pdf">在线预览PDF文件</a>

    3.效果(安卓可在线预览PDF文件)

    展开全文
  • pdf在线预览,支持pc, android, ios
  • 项目中要求在移动端实现在线预览pdf文件,通过一番折腾,最后选择用pdf.js实现。1、下载pdf.js 官网地址:https://mozilla.github.io/pdf.js/2、各种配置 下载下来的文件包,就是一个demo,我们仿照这个demo做就...

    项目中要求在移动端实现在线预览pdf文件,通过一番折腾,最后选择用pdf.js实现。

    1、下载pdf.js

        官网地址:https://mozilla.github.io/pdf.js/

    2、各种配置

        下载下来的文件包,就是一个demo,我们仿照这个demo做就可以啦

        (1)页面元素如下:    

    <button class="product-term to-clause" id="noteDetail">《投保须知》</button>
    <button class="to-clause" id="clauseDetail">《保险条款》</button>

        (2)js代码如下:

        

    $('#clauseDetail').click(function () {  
        window.open('../viewer.html?file=xxx-clause.pdf');  
    });
    注意:viewer.html就是下载下来文件包中的那个viewer.html,在此html中需要引入viewer.css、
    locale.properties、pdf.js和viewer.js。修改viewer.js中的以下代码:
    var DEFAULT_URL = 'compressed.tracemonkey-pldi-09.pdf';修改为  var DEFAULT_URL = '';
    
    

        需要预览的pdf文件,就是window.open('../viewer.html?file=xxx-clause.pdf');中的xxx-clause.pdf文件。注意:pdf文件需要和

     viewer.html放在同一个目录下,如果不在同一个目录下,需修改路径。

    通过以上的配置,就实现了在线预览pdf文件。

        




    展开全文
  • 本篇文章大部分为转载内容,不过最后有我自己使用后的小总结,原文地址:https://www.jianshu.com/p/9e3ff8385e6fAndroid PdfViewer: 项目地址: https://github.com/barteksc/AndroidPdfViewer 功能很强大, 使用也...
  • 之前上传了工具类。有朋友私信我不方便,这次我写了个简单的demo,使用者只需要3分钟就能掌握。配合我博客内写的文章教程。相信你可以很快把它融于你的项目。 线上目前已有3个项目使用此方式集成的功能。...
  • 在app内部实现通过webview预览app 注意1不调用第三方应用 2谷歌那个在线解析被屏蔽不能用 3只会回答网上有 或者百度一下的sb绕行
  • 最近有项目有一个需求,就是在线直接预览pdf,doc,xls,txt等文件,ios的webview比较强大,可以直接解析地址,然后预览。但是android的webview就比较差强人意了。当然,打开各种类型的文件,我么可以使用intent来做,...
  • Android 系统天然不支持 PDF 文件的阅读,因此,Android 应用中要实现 PDF 阅读功能一般有以下方案: 1、WebView 中调用 GoogleDocs; 2、调起第三方支持 PDF 阅读的应用; 3、集成第三方 PDF SDK,在 Native ...
  • 如题,实现在客户端预览各种文档。目的是不需要把文档下载到本地就能看到。类似于浏览器里打开qq邮箱,预览附件。 希望大家能帮忙提点思路或者参考链接。有替代的实现思路也十分感谢!
  • 基本思路::使用pdf.js实现在线预览pdf功能。将office(doc,execel),txt,png,jpeg等常见的格式在web端进行转换。 起初使用apose这个包,在Linux下中文字体显示为空格。这个网上有好多解决方案。但是由于内网环境,无法...
  • Android预览PDF文件

    2019-11-08 09:02:20
    Android预览PDF文件 上周临时收到客户的说明书,说要放在应用里显示,本来觉得一个非常简单的事情没想到一波三折。 第一波:我使用了pdfViewer控件:(相了解的可以查看:...
  • Android之内嵌PDF预览

    2019-08-08 08:46:48
    一、在对应模块的build.gradle文件中... implementation 'com.github.barteksc:android-pdf-viewer:3.1.0-beta.1' } 二、Activity布局Xml文件中,加入com.github.barteksc.pdfviewer.PDFView控件 <?xml versi...
  • 1.概述我们都知道,Android原生并没有提供浏览office文档格式的相关Api,在安卓端想要实现在线预览office文档的功能显然很是复杂,我们手机安装QQ浏览器时,在手机打开office文档时会提示如图, 这就是这篇文章的主角–...
  • Android加载预览PDF文件

    2017-10-20 13:56:51
    Android加载预览PDF文件
1 2 3 4 5 ... 20
收藏数 3,116
精华内容 1,246
关键字:

在线预览pdfandroid