Android:在android中的Web视图中显示pdf从服务接收的字节

我收到的数据字节就像

JVBERi0xLjQKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0ZURlY29kZT4+CnN0cmVhbQp4nNVZyY7jNhC991foHCBOVXERBQQBJFu+D9BAfiALkEOAzGV+f15Ra2shqaQz6IFhWzJp8tX+WKIbV19e/qmo+pFw6VnwWTf6+fn36tcfqr/joL4+//nSvb44fwtVze7mq9ffqp+eXDFVr3/8TDy+hAxZcuSpxl3AXYOrFvcdrpju+H7gyuG7pydmeHL4I7OwwZdlvdHRhv0vr3+99K8vnw5BkL3JCYjpdSfPgMGBG2zm5uVbAGhx4fHucH/H+5HazEMlTdlmQG655ycTWdGBTli1AdXgApqYJZ7gbH8Xs/mfHSCKaqUVj18zuvGBb+4S3BA3rqORsOU5NBjTMa/n446SYGoqNZSEuH0nDZaGgegprW4hHcb9BGMGd5fBjIPnXNOQC/i8oKG30OgOGMvdBGg9xy+zyOssmDU5zho0Ngna1qVmlQ7msTMwEpgp6qoWw608YMhRmwIDcwcgfQyVa1o0HpmiLAZr3gf/DE8hDNuNEHrpkxuLLTWf5pLFdyAb5Fz50Grr5IYkOUnlqZZNLeIautUZ1NNrcLqV9xtYCKrrY9JSCZroeNFeuHvgOzMb0cuH8SSYC3uzSYKvm5stA7/Kt/dSUYAtqBMeh7yGeBKcz3nDBK2VbgfwLi3KFsIXvwd5cFBjQh8AltwUn6XmnHwkINQ6OGQnD9XKNQ1t/50EZ93NXAMXDdBCEWOl3moluZ0p9I2YA5+DIZILMpfiP43wC6o1m1WmmCDWYiy9MVgDCXqMJGjKWCiHYlaN/5Re556JZMOZTCkl2KbZ0Y67AoOYJqZpJHLjYvLuBqgH4xSr+izMfob+glI6ior7UaAktLrOVvW3MZewkqb7spiz3mWJ2BX30CKhxU+reBcrsxk4j8RAiGOaaHfzVo6hm8xkrcQZOJxJkhTd2V31/yjOYE2pM5TGP7hz 

这个字节与pdf有关。
和String无法存储这么多数据。 所以我使用stringbuffer来存储它。 但是stringbuffer也无法存储。 所以如何存储这些收到的数据。
如何转换此字节并在Web视图中显示。

更新:

我使用以下代码。

 byte[] decodedString = Base64.decode(ByteCode.toString()); wv.loadData(decodedString.toString(), "application/pdf", "utf-8"); 

其中ByteCode是一个类型StringBuffer,用于保存服务的响应字节码。

无论如何都无法在Android webview中预览pdf文档。 它需要第三方库。

的build.gradle

 compile 'com.github.barteksc:android-pdf-viewer:2.7.0' 

dialog_pdf_viewer

           

DailogPDFViewer.java

 public class DialogPdfViewer extends Dialog { PDFView pdfView; byte[] decodedString; public interface OnDialogPdfViewerListener { void onAgreeClick(DialogPdfViewer dialogFullEula); void onCloseClick(DialogPdfViewer dialogFullEula); } public DialogPdfViewer(Context context, String base64, final DialogPdfViewer.OnDialogPdfViewerListener onDialogPdfViewerListener) { super(context); setContentView(R.layout.dialog_pdf_viewer); findViewById(R.id.dialog_pdf_viewer_close).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onDialogPdfViewerListener.onCloseClick(DialogPdfViewer.this); } }); findViewById(R.id.dialog_pdf_viewer_button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onDialogPdfViewerListener.onAgreeClick(DialogPdfViewer.this); } }); decodedString = Base64.decode(base64.toString(), Base64.DEFAULT); pdfView = ((PDFView) findViewById(R.id.pdfView)); pdfView.fromBytes(decodedString).load(); setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { onDialogPdfViewerListener.onCloseClick(DialogPdfViewer.this); } return true; } }); } } 

根据您的评论,您的数据似乎对于字符串来说不会太长,只是为了记录显示字符串太长。 (记录的大小限制为大约4000个字符)。

你似乎正在沿着正确的方向努力

  • 您将数据读入字符串
  • 然后base64解码该数据

但是,大多数(如果不是全部)Android版本都不支持尝试将数据加载到Web视图中。

我建议你改为

  • 将数据写入文件
  • 发出指定FileProvider内容URI的Intent,以便用户首选的PDF查看器用于查看文件。

WebView不包含允许您显示PDF文档的PDF插件。

  1. 一种解决方案是使用Intent对象来启动可以处理PDF文档的第三方应用程序(例如Adobe Acrobat)。 但是,这会将控制权转移到第三方应用程序。

  2. 如果您坚持使用WebView在自己的活动中显示PDF文档,则可以使用以下技巧。 您可以使用Google文档打开PDF文档,然后使用WebView加载Google文档的url:

     @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); WebView webView=new WebView(MainActivity.this); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setPluginState(PluginState.ON); //---you need this to prevent the webview from // launching another browser when a url // redirection occurs--- webView.setWebViewClient(new Callback()); String pdfURL = "http://dl.dropboxusercontent.com/u/37098169/Course%20Brochures/AND101.pdf"; webView.loadUrl("http://docs.google.com/gview?embedded=true&url=" + pdfURL); setContentView(webView); } private class Callback extends WebViewClient { @Override public boolean shouldOverrideUrlLoading( WebView view, String url) { return(false); } }