android,WebView应用程序/ pdf~空白显示

时间:2015-05-12 14:17:49

标签: android pdf webview

我试图在Android上使用WebView显示PDF。 PDF数据通过API下载,然后封装在intent中:

    WebView webView = (WebView) findViewById(R.id.webView);
    Log.d("DEV", bIntent.getString("Data"));
    webView.loadData(bIntent.getString("Data"), "application/pdf", "UTF-8");

我有完全相同的设置,除了在iOS上实现工作正常。 LogCat输出(见下文)确实提供了信息,但是阅读它并不会建议或提示我任何问题或错误。

D/JSENGINE﹕ qualcomm.jsengine.version:C.2-patch35-git:7b7ad6f
D/HostStatisticManager﹕ netstack: DNS Host Prioritization is: ON, Version: 5.0.1
I/﹕ netstack: LIB_MGR - Lib loaded: libdnshostprio.so
I/﹕ netstack: STAT_HUB - Succeeded to load plugin: libdnshostprio.so
E/﹕ netstack: LIB_MGR - Error loading lib spl_proc_plugin.so
E/﹕ netstack: STAT_HUB - Failed to load plugin: spl_proc_plugin.so
I/﹕ netstack: LIB_MGR - Lib loaded: pp_proc_plugin.so
I/﹕ netstack: STAT_HUB - Succeeded to load plugin: pp_proc_plugin.so
E/﹕ netstack:  STAT_HUB - App com.company.simonaddicott.controlpanel_1 isn't supported
V/chromium_net﹕ external/chromium/net/host_resolver_helper/host_resolver_helper.cc:66: [0512/144513:INFO:host_resolver_helper.cc(66)] DNSPreResolver::Init got hostprovider:0x5f7d700c
V/chromium_net﹕ external/chromium/net/base/host_resolver_impl.cc:1510: [0512/144513:INFO:host_resolver_impl.cc(1510)] HostResolverImpl::SetPreresolver preresolver:0x5f6499f0
D/﹕ external/chromium/net/socket/tcp_fin_aggregation_factory.cc: libtcpfinaggr.so successfully loaded
D/﹕ external/chromium/net/socket/tcp_fin_aggregation_factory.cc,: TCP Fin Aggregation initializing method was found in libtcpfinaggr.so
I/QCNEA﹕ |CAC| CAS is enabled
I/QCNEA﹕ |CAC| [CNE CLIENT STATE MACHINE] transition NOT_CONNECTED_NOT_ATTEMPTED -> CONNECTING
D/QCNEA﹕ |CAC| Connected to server socket: 81
I/QCNEA﹕ |CAC| [CNE CLIENT STATE MACHINE] transition CONNECTING -> CONNECTED_PENDING_PERM_RESPONSE
D/QCNEA﹕ |CAC| In monitor thread, performing select
D/TCPFinAggregation﹕ netstack: TCPFinAggregation is 1, Version 5.0.1
D/TCPFinAggregation﹕ system property net.tcp.fin.aggregation.wait was set, value: 20
D/TCPFinAggregation﹕ system property net.tcp.fin.aggregation.close was set, value: 300
D/TCPFinAggregation﹕ netstack: CloseUnusedSockets is ON, (TCPFinAggregation), Version 5.0.1
D/QCNEA﹕ |CAC| readCallback: read len:12, ret:0, errno:0
I/QCNEA﹕ |CAC| [CNE CLIENT STATE MACHINE] transition CONNECTED_PENDING_PERM_RESPONSE -> NOT_CONNECTED_ACCESS_DENIED
I/QCNEA﹕ |CAC| client permission denied.
D/QCNEA﹕ |CAC| readCallback: read len:0, ret:0, errno:0
E/QCNEA﹕ |CAC| readCallback: end of stream
V/QCNEA﹕ |CAC| Dispatching Latency Service Status Update [status:SERVICE_STOPPED]
V/QCNEA﹕ |CAC| Dispatching Bitrate Service Status Update [status:SERVICE_STOPPED] V/QCNEA﹕ |CAC| Clients reset
D/QCNEA﹕ |CAC| Monitor loop is terminating
D/TCPFinAggregation﹕ Failed to get network status! received ret: -6
D/Socket_Pool﹕ netstack: CloseUnusedSockets is ON
D/Socket_Pool﹕ netstack: system net.statistics value: 0
D/Socket_Pool﹕ netstack: CloseUnusedSockets is ON
D/Socket_Pool﹕ netstack: system net.statistics value: 0
D/﹕ external/chromium/net/http/http_getzip_factory.cc: libgetzip.so successfully loaded
D/﹕ external/chromium/net/http/http_getzip_factory.cc,: GETzip initializing method was found in libgetzip.so
D/netstack﹕ netstack: Request Priority is ON
D/﹕ netstack: Getzip is: ON, Version: 5.0.1
D/TilesManager﹕ Starting TG #0, 0x5f7d0170
D/TilesManager﹕ new EGLContext from framework: 5e7a9fd0
D/GLWebViewState﹕ Reinit shader
D/GLWebViewState﹕ Reinit transferQueue 

如果可能存在问题,我也会附加XML,但不太可能

<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" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.company.simonaddicott.controlpanel_1.PDFView">

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

</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

  

我正在尝试使用Android上的WebView显示PDF

WebView不会自行显示PDF文件。充其量,它可以在某些第三方JavaScript(pdf.js)或网站(Google Docs)的帮助下完成。还有很多用于呈现PDF的第三方库,可能会也可能不会使用WebView

此外,PDF文件不是字符串,而是二进制格式,因此loadData()在任何情况下都不起作用。

答案 1 :(得分:0)

最终解决方案

Lollipop现在提供native library用于阅读PDF文件,但这对使用&gt;的任何人都没有帮助。 API 21。

这里找到的解决方案是利用mozilla的JS pdfviewer,并将webview指向它。

http://mozilla.github.io/pdf.js

WebView webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("https://mozilla.github.io/pdf.js/web/viewer.html");

其他解决方案的Majorty将Google Docs作为查看PDF的代理。由于所讨论的PDF数据的数据保护/敏感性,此解决方案不适用于此。

使用JS pdf查看器可以安装服务器端&amp;继续直接向应用程序提供PDF。