布局文件
<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文件了。
最后附上我的效果图