Androidがpdfファイルを開く
5083 ワード
ターンhttps://www.jb51.net/article/136364.htm
AndroidのWebViewはiosのWebViewのようにpdfファイルを直接プレビューするのに便利です.WebViewプレビューpdfを利用するには、Googleドキュメントサービスを使用します.
この方式は国内のネットワーク環境は考慮しなくてもよい.もちろん、mozillaオープンソースのPDFを使用することもできます.js.
Github
mozilla公式demo
WebViewの設定:
1 2 3 4 5
二実現方式
方法1:mozillaを使用してgithub pagesに配備されたViewer
1
この方式はgoogle docsを使うのとは違い、重要なのは国内で直接アクセスできるが、ドメインをまたぐ問題に直面することだ.
方式2:PDFをダウンロードする.js assetsディレクトリの下に置く
pdfファイルがドメイン間でアクセスできない場合は、まずファイルをローカルにダウンロードし、ローカルファイルパスプレビューpdfに転送します.
1
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(); } }
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ディレクトリの下に置く
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(); } }