布局文件

<RelativeLayout 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"
    tools:context="com.example.viewonlinepdf.MainActivity" >

   
    <WebView 
        android:id="@+id/pdf_show_webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

        java核心代码

public class MainActivity extends FragmentActivity
{

	private WebView pdfShowWebView;
	
	private String docPath = "https://d11.baidupcs.com/file/ba53f41293af845addc44dc468923a9f?bkt=p3-1400ba53f41293af845addc44dc468923a9fb024210a00000f68e76c&xcode=b7b9ef9c9234679f8736717a18ba0f4712944d12b5f6eb9765d75071b4dbd0f7&fid=2334672476-250528-7836772807729&time=1499055076&sign=FDTAXGERLBHS-DCb740ccc5511e5e8fedcff06b081203-SBXLZNcKJUACUMLGJ9rXQwBN0NI%3D&to=d11&size=258533228&sta_dx=258533228&sta_cs=8726&sta_ft=pdf&sta_ct=7&sta_mt=7&fm2=MH,Yangquan,Netizen-anywhere,,jiangsu,ct&newver=1&newfm=1&secfm=1&flow_ver=3&pkey=1400ba53f41293af845addc44dc468923a9fb024210a00000f68e76c&sl=71565390&expires=8h&rt=pr&r=343614804&mlogid=4256064688440471098&vuk=2334672476&vbdid=3466206402&fin=JavaScript%E5%85%A5%E9%97%A8%E7%BB%8F%E5%85%B8%EF%BC%88%E7%AC%AC%E4%B8%89%E7%89%88%EF%BC%89.pdf&fn=JavaScript%E5%85%A5%E9%97%A8%E7%BB%8F%E5%85%B8%EF%BC%88%E7%AC%AC%E4%B8%89%E7%89%88%EF%BC%89.pdf&rtype=1&iv=0&dp-logid=4256064688440471098&dp-callid=0.1.1&hps=1&csl=155&csign=bpdsh7Zgm7NBO%2B%2FRyN7Pd9BBLTs%3D&so=0&ut=6&uter=4&serv=0&by=themis";

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		pdfShowWebView = (WebView) findViewById(R.id.pdf_show_webview);
		pdfShowWebView.setWebViewClient(new WebViewClient()
		{
			@Override
			public boolean shouldOverrideUrlLoading(WebView view, String url)
			{
				// 返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
				view.loadUrl(url);
				return true;
			}
		});
		WebSettings settings = pdfShowWebView.getSettings();
		settings.setSavePassword(false);
		settings.setJavaScriptEnabled(true);
		settings.setAllowFileAccessFromFileURLs(true);
		settings.setAllowUniversalAccessFromFileURLs(true);
		settings.setBuiltInZoomControls(true);
		pdfShowWebView.setWebChromeClient(new WebChromeClient());
		if (!"".equals(docPath))
		{
			byte[] bytes = null;
			try
			{// 获取以字符编码为utf-8的字符
				bytes = docPath.getBytes("UTF-8");
			}
			catch (UnsupportedEncodingException e1)
			{
				e1.printStackTrace();
			}
			if (bytes != null)
			{
				docPath = new BASE64Encoder().encode(bytes);// BASE64转码
			}
		}
		pdfShowWebView
				.loadUrl("file:///android_asset/pdfjs/web/viewer.html?file="
						+ docPath);
	}

        别的没什么好说的,都是最基本的配置,咱们重点关注下上面代码中if判断这一块,

if (!"".equals(docPath))
		{
			byte[] bytes = null;
			try
			{// 获取以字符编码为utf-8的字符
				bytes = docPath.getBytes("UTF-8");
			}
			catch (UnsupportedEncodingException e1)
			{
				e1.printStackTrace();
			}
			if (bytes != null)
			{
				docPath = new BASE64Encoder().encode(bytes);// BASE64转码
			}
		}

       为什么要这么写呢?是的,我原来也想直接把这个路径给拼到loadUrl中本地引用的路径后面,但是本地引用里面将这个参数解密了,而且其他地方也有加解密,所以没办法,只能这里用base64加密下,然后在本地引用的viewer.js中再去解密。

       这个功能坑比较多,一般pdf显示不出来大多都是下列原因:

1、base64文件中的字典不匹配(建议用我项目中的BASE64Encoder.java)。

2、你的链接或许有问题,确保你的链接在浏览器上可以直接下载的。

3、asset文件夹中的文件一个都不能少。

      如果想要查看PDF页面更好看的样式的话,那你就动手改下viewer.html文件了。

最后附上我的效果图

android开发 显示网络pdf文件 android webview pdf_pdf


android开发 显示网络pdf文件 android webview pdf_阅读_02