需求: 最近公司要求项目中增加资料库, 能在线查看pdf格式的文件, 且只能查看不能下载 .
在网上找了不少文章, 说实话都不是很理想, 要么需要收费, 要么基本都只支持本地查看, 后来果断直接在github搜索, 找到了合适的第三方框架 :
Android PdfViewer:
项目地址: https://github.com/barteksc/AndroidPdfViewer
功能很强大, 使用也比较广, 亲测可以使用.
唯一的缺点 :添加到项目中 会使apk增加16M, 这是最不能接受的, 故弃用.
PdfViewPager:
项目地址: https://github.com/voghDev/PdfViewPager
可加载assets/SD卡/URL(在线预览) ,(ps: 我目前就是使用的此框架)
优点: 使用比较方便, 也不大
使用:
-
依赖:
compile 'es.voghdev.pdfviewpager:library:1.0.3'
-
xml布局 (可根据自己项目, 增减)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res /android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:id="@+id/rl_root" style="@style/title_style"> <ImageView android:id="@+id/iv_back" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_centerVertical="true" android:paddingLeft="@dimen/value15" android:src="@drawable/icon_back" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="资料详情" android:textColor="@color/color_white" android:textSize="16sp" /> </RelativeLayout> <RelativeLayout android:id="@+id/remote_pdf_root" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/rl_root"> <es.voghdev.pdfviewpager.library.PDFViewPager android:id="@+id/pdfViewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> <ProgressBar android:id="@+id/pb_bar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_gravity="center" /> </RelativeLayout>
-
activity (注释很详细, 慢慢看)
public class PDFDatabaseActivity extends BaseActivity implements DownloadFile.Listener { private RelativeLayout pdf_root; private ProgressBar pb_bar; private RemotePDFViewPager remotePDFViewPager; private String mUrl = "http://partners.adobe.com/public/developer/en/xml/AdobeXMLFormsSamples.pdf"; private PDFPagerAdapter adapter; private ImageView iv_back; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_database); initView(); setDownloadListener(); } protected void initView() { pdf_root = (RelativeLayout) findViewById(R.id.remote_pdf_root); pb_bar = (ProgressBar) findViewById(R.id.pb_bar); iv_back = (ImageView) findViewById(R.id.iv_back); iv_back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } /*设置监听*/ protected void setDownloadListener() { final DownloadFile.Listener listener = this; remotePDFViewPager = new RemotePDFViewPager(this, mUrl, listener); remotePDFViewPager.setId(R.id.pdfViewPager); } /*加载成功调用*/ @Override public void onSuccess(String url, String destinationPath) { pb_bar.setVisibility(View.GONE); adapter = new PDFPagerAdapter(this, FileUtil.extractFileNameFromURL(url)); remotePDFViewPager.setAdapter(adapter); updateLayout(); } /*更新视图*/ private void updateLayout() { pdf_root.removeAllViewsInLayout(); pdf_root.addView(remotePDFViewPager, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); } /*加载失败调用*/ @Override public void onFailure(Exception e) { pb_bar.setVisibility(View.GONE); ToastUitl.show(this, "数据加载错误"); } @Override public void onProgressUpdate(int progress, int total) { } }
希望对大家有所帮助 !