Android中显示PDF

iOS的WebView能从线上url直接显示pdf,而Android的WebView不能直接显示,
Android的WebView要显示pdf需要拼接url到google的一个url显示,国内需要…所以这条路肯定走不通了

urlWebView.loadUrl("http://docs.google.com/gview?embedded=true&url="
+ "YOUR_DOC_URL_HERE");


github上有一个控件形式的PDF显示器PDFView
https://github.com/barteksc/AndroidPdfViewer/issues
可以通过Uri / File / byte数组 /输入流 /DocumentSource 几个形式显示PDf到PDFView上
并且支持许多回调和自定义设置


可以用HttpURLConnection从url中获取流,再传入PdfView显示

  • 在xml中使用

    android:id="@+id/pdfView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
  • 通过流读取pdf到View

    url = new URL(url);
    urlConnection = (HttpURLConnection) url.openConnection();
    urlConnection.setConnectTimeout(30000);
    urlConnection.setReadTimeout(30000);
    urlConnection.setRequestMethod("GET");
    urlConnection.connect();
    if (urlConnection.getResponseCode() == 200) {
    PDFView.Configurator configurator = vPdfView.fromStream(urlConnection.getInputStream())
    .enableSwipe(true) // allows to block changing pages using swipe
    .swipeHorizontal(false)
    .enableDoubletap(true)
    .defaultPage(0)
    .onLoad(nbPages -> showLoading(false))
    // allows to draw something on the current page, usually visible in the middle of the screen
    .enableAnnotationRendering(false) // render annotations (such as comments, colors or forms)
    .password(null)
    .scrollHandle(null)
    .enableAntialiasing(true) // improve rendering a little bit on low-res screens
    // spacing between pages in dp. To define spacing color, set view background
    .spacing(15)
    .load();

注意把网络请求放在子线程中进行,PdfView的load()方法需要放在主线程中进行,否则没法显示pdf,

PDFView的Configurator设置


.pages(0, 2, 1, 3, 3, 3) // 选择显示那些page
.enableSwipe(true) // 是否允许滑动切换page
.swipeHorizontal(false)//水平滑动
.enableDoubletap(true)//双击放大
.defaultPage(0)//默认显示page
// allows to draw something on the current page, usually visible in the middle of the screen
.onDraw(onDrawListener)//可以在onDraw中绘制自定义图形到当前页
// allows to draw something on all pages, separately for every page. Called only for visible pages
.onDrawAll(onDrawListener)//绘制自定义图形到所有页面
.onLoad(onLoadCompleteListener) // 在加载完成后调用,调用后开始onRender
.onPageChange(onPageChangeListener)//page切换监听
.onPageScroll(onPageScrollListener)//page滚动监听
.onError(onErrorListener)//错误时回调
.onPageError(onPageErrorListener)//page加载错误
.onRender(onRenderListener) // called after document is rendered for the first time 首次渲染后回调
// called on single tap, return true if handled, false to toggle scroll handle visibility
.onTap(onTapListener)//单击监听
.enableAnnotationRendering(false) // render annotations (such as comments, colors or forms) 是否渲染注解:评论/颜色/forms
.password(null)
.scrollHandle(null)
.enableAntialiasing(true) // improve rendering a little bit on low-res screens
// spacing between pages in dp. To define spacing color, set view background
.spacing(0) //page间隔
.linkHandler(DefaultLinkHandler) //pdf中链接处理
.pageFitPolicy(FitPolicy.WIDTH) //page适应策略,宽度优先还是高度优先 3.0.0才有
.load()//加载pdf

注意处理与Activity生命周期相关比如缓存和数据清理

更多相关文章

  1. 自定义ListView中的分割线
  2. Android(安卓)View的属性
  3. android 界面布局-各个布局的属性介绍
  4. Android怎么让RadioButton图片居中显示
  5. Android实现插件化(热加载)和插件加密
  6. android:maxLines和android:ellipsize同时使用导致显示异常
  7. EditText属性大全
  8. 使用ProgressBar实现加载进度条
  9. 关于progressbar进度条的显示风格及一些属性的应用

随机推荐

  1. Android(安卓)实现点击按钮获取验证码 60
  2. ListView滚动黑屏问题
  3. Android(安卓)链接https出现 javax.net.s
  4. Android采用Fragment+ViewPager+动画实现
  5. Error:(16, 0) Gradle DSL method not fo
  6. android 获取IP地址
  7. Android(安卓)AppWidget组件
  8. android: check network status 检查网络
  9. Android访问服务器地址是10.0.2.2的原因
  10. Android中缓存目录问题及缓存的过程