如何通过 Android 浏览器显示 PDF 而不必先“下载”

有没有一种方法可以让普通的 Android 浏览器自动打开一个 PDF、 Word 或其他典型的文件,而不必经过下载文件的过程,然后让用户从下载应用程序或通知栏打开文件?

我们有一个网络应用程序,有很多文件,我们希望包括,而不是转换为 HTML,但使用户下载文件和手动打开它是不容易的培训用户。

在 iOS 上,这些文件都在浏览器中内联显示。我想让浏览器自动启动文件到 Acrobat 阅读器或 QuickOffice 或任何程序的用户显示他们。

有人知道怎么做吗?我知道谷歌文档有一些 PDF 浏览支持,但是使用我们的网络应用程序的人可能在任何情况下都不能访问公共互联网,并且可能会访问本地的网络服务器。

223610 次浏览

不幸的是,Android 设备上的本地浏览器不支持这种类型的文件。让我们看看在4.0版本中我们是否能做到这一点。

  • 下载用于 Android 的 Acrobat 阅读器.apk 文件以显示 PDF 文件

  • 把你的 PDF 文件放在 SD 卡上

  • Use the snippet of code below

     File file = new File("/sdcard/test.pdf");
    Uri path = Uri.fromFile(file);
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setDataAndType(path,"application/pdf");
    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(i);
    

你可以在 Google Docs Viewer 中打开一个 PDF 文件,方法是将网址附加到:

https://docs.google.com/gview?embedded=true&url=<URL of a supported doc>

这将在默认浏览器或 WebView 中打开一个 PDF 文件。

支持的格式列表给出了 给你

I needed this too, and the links above stopped working so this is what I found to work with the New Google Drive:

谷歌有一项服务,可以为 PDF 的 Not in GDrive 创建链接: Https://docs.google.com/viewer 只要添加您的 URL,它就会创建一个链接和 IFrame 代码 (仔细看,你会看到模式和创建没有这个 Web 服务的链接)

此外,还有一种方法可以将 PDF 文件存储在 Google Drive 中: Https://docs.google.com/viewer?srcid=your_gdrive_pdf_doc_id_here&pid=explorer&efh=false&a=v&chrome=false&embedded=true (这可以是 iframe 的链接或 src URL)

我已经在 Android 上测试过了,它很好地支持了 PDF 浏览器。

具体来说,要为 Firefox 安装 pdf.js 插件,不需要使用应用程序商店。相反,从 Mozilla 内部进入 addons.Mozilla.org 并从那里安装它。

Also, to see if it's installed properly, go to the menu 工具附件 (not the "about:plugins" URL as you might think from the desktop version).

你可以用这个

webView.loadUrl("https://docs.google.com/viewer?url=" + "url of pdf file");

试试下面的方法,对我很管用。

WebView view = (WebView) findViewById(R.id.yourWebView);


view.getSettings().setJavaScriptEnabled(true);
view.getSettings().setPluginState(WebSettings.PluginState.ON);
view.loadUrl("http://docs.google.com/gview?embedded=true&url="
+"your document link(pdf,doc,docx...etc)");

你可以在2017-04-06使用这种格式。

Https://docs.google.com/viewerng/viewer?url=http://yourfile.pdf

只需用您使用的链接替换 http://yourfile.pdf

String format = "https://drive.google.com/viewerng/viewer?embedded=true&url=%s";
String fullPath = String.format(Locale.ENGLISH, format, "PDF_URL_HERE");
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(fullPath));
startActivity(browserIntent);
public class MainActivity extends AppCompatActivity {


Button button;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openURL("http://docs.google.com/viewer?url=" + " your pdf link ");
}
});
}


private void openURL(String s) {
Uri uri = Uri.parse(s);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri,"text/html");
startActivity(intent);
}
}

试试这个代码 This worked for me.

package ak.wp.meto.activity;


import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.TextView;
import android.widget.Toast;
import com.github.barteksc.pdfviewer.PDFView;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import ak.wp.meto.R;


public class PdfViewer extends Activity {
private TextView txt; // You can remove if you don't want this
private PDFView pdf;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_custom_pdf);
   

pdf = (PDFView) findViewById(R.id.pdfView); //github.barteksc
txt = findViewById(R.id.txtPdf);
String pdfUrl = "https://www.rkiinstruments.com/pdf/71-0136RK.pdf";
try{
new RetrievePdfStream().execute(pdfUrl);
}
catch (Exception e){
Toast.makeText(this, "Failed to load Url :" + e.toString(), Toast.LENGTH_SHORT).show();
}
}


class RetrievePdfStream extends AsyncTask<String, Void, InputStream> {
@Override
protected InputStream doInBackground(String... strings) {
InputStream inputStream = null;
try {
URL url = new URL(strings[0]);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
if (urlConnection.getResponseCode() == 200) {
inputStream = new BufferedInputStream(urlConnection.getInputStream());
}
} catch (IOException e) {
return null;
}
return inputStream;
}
@Override
protected void onPostExecute(InputStream inputStream) {
pdf.fromStream(inputStream).load();
}
}


}

build.gradle中添加库

 implementation 'com.github.barteksc:android-pdf-viewer:3.1.0-beta.1'
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'

创建 activity_custom_pdf.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context=".activity.PdfViewer">
    

<com.github.barteksc.pdfviewer.PDFView
android:id="@+id/pdfView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
    

<TextView
android:id="@+id/txtPdf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible"/>
</RelativeLayout>