Androidがpdfファイルを開く

5083 ワード

ターンhttps://www.jb51.net/article/136364.htm
AndroidのWebViewはiosのWebViewのようにpdfファイルを直接プレビューするのに便利です.WebViewプレビューpdfを利用するには、Googleドキュメントサービスを使用します.
  mWebView.loadUrl( "http://docs.google.com/gviewembedded=true&url=" + pdfUrl);
この方式は国内のネットワーク環境は考慮しなくてもよい.もちろん、mozillaオープンソースのPDFを使用することもできます.js.
Github
mozilla公式demo
WebViewの設定:
1 2 3 4 5 WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled( true ); webSettings.setAllowFileAccess( true ); webSettings.setAllowFileAccessFromFileURLs( true ); webSettings.setAllowUniversalAccessFromFileURLs( true );
二実現方式
方法1:mozillaを使用してgithub pagesに配備されたViewer
1 View.loadUrl( "http://mozilla.github.io/pdf.js/web/viewer.html?file=" + pdfUrl);
この方式はgoogle docsを使うのとは違い、重要なのは国内で直接アクセスできるが、ドメインをまたぐ問題に直面することだ.
方式2:PDFをダウンロードする.js assetsディレクトリの下に置く
Android打开pdf文件_第1张图片
pdfファイルがドメイン間でアクセスできない場合は、まずファイルをローカルにダウンロードし、ローカルファイルパスプレビューpdfに転送します.
1 mWebView.loadUrl( "file:///android_asset/pdfjs/web/viewer.html?file=" + pdfUrl);
PDF.js自体は比較的大きなライブラリで、すべてローカルに置くとapk差が5 m程度大きくなりません.PDFを考えてみましょうjsは、サービス側に配備されるか、cdnを使用する方法です.
ダウンロードしてから開きます.原文:https://blog.csdn.net/ming_147/article/details/53408233 
public class PdfHttpDownloader {     private Context context;
    public PdfHttpDownloader(Context context) {         this.context = context;     }
/**pdf*pdf:PDF url*name:pdfファイルの名前*/public void startPdfActivity(String pdf,String name){String terPath=getSDPath()+「/trader/」+name+「.PDF」;File file=new File(terPath);if(file.exists();{             Intent intent = getPdfFileIntent(terPath);             context.startActivity(intent);         } else {             downLoadPdf(pdf, name);         }     }
    public Intent getPdfFileIntent(String path) {         Intent i = new Intent(Intent.ACTION_VIEW);         i.addCategory(Intent.CATEGORY_DEFAULT);         i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);         Uri uri = Uri.fromFile(new File(path));         i.setDataAndType(uri, "application/pdf");         return i;     }
    public void downLoadPdf(final String pdf, final String name) {         Request request = new Request.Builder()                 .url(pdf)                 .get()                 .build();         OkHttpClient http = new OkHttpClient();         http.newCall(request)                 .enqueue(new com.squareup.okhttp.Callback() {                     @Override                     public void onFailure(Request request, IOException e) {                     }
                    @Override                     public void onResponse(Response response) {                         InputStream is = null;                         byte[] buf = new byte[1024];                         int len = 0;                         FileOutputStream fos = null;                         String terPath = null;                         File file = null;                         try {                             is = response.body().byteStream();                             terPath = getSDPath() + "/trader/"+ name + ".PDF";                             file = new File(terPath);                             fos = new FileOutputStream(file);                             while ((len = is.read(buf)) != -1) {                                 fos.write(buf, 0, len);                             }                             fos.flush();//ダウンロード成功if(file.exists(){Intent intent=getPdfFileIntent(terPath);context.startActivity(intent);                            }                         } catch (Exception e) {                             e.printStackTrace();                         } finally {                             try {                                 if (is != null)                                     is.close();                             } catch (IOException e) {                             }                             try {                                 if (fos != null)                                     fos.close();                             } catch (IOException e) {                             }                         }                     }                 });     }
private String getSDPath(){File sdDir=null;boolean sdCardExist=Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);//sdカードにif(sdCardExist){sdDir=Environment.getExternalStorageDirectory()があるかどうかを判断する;//取得とディレクトリ}return sdDir.toString();     } }