当前位置:  开发笔记 > 编程语言 > 正文

如何在Android中呈现PDF

如何解决《如何在Android中呈现PDF》经验,为你挑选了4个好方法。

在我的应用程序中,我将收到一个字节流并将其转换为手机内存中的pdf文件.如何将其呈现为pdf?并在活动中展示它?



1> Tim Kryger..:

有些手机(如Nexus One)预装了Quickoffice版本,因此在将文件保存到SD卡后,可能就像发送相应的Intent一样简单.

public class OpenPdf extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button = (Button) findViewById(R.id.OpenPdfButton);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                File file = new File("/sdcard/example.pdf");

                if (file.exists()) {
                    Uri path = Uri.fromFile(file);
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(path, "application/pdf");
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                    try {
                        startActivity(intent);
                    } 
                    catch (ActivityNotFoundException e) {
                        Toast.makeText(OpenPdf.this, 
                            "No Application Available to View PDF", 
                            Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
    }
}


嗯,如果我的Android中没有安装QuickOffice怎么样?
如何直接从服务器打开PDF文件?而不是将其保存在设备上然后打开.
所以?如果您没有QuickOffice怎么办?

2> Shankar Agar..:

在webview中打开pdf文件.

public class MyPdfViewActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    WebView mWebView=new WebView(MyPdfViewActivity.this);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setPluginsEnabled(true);
    mWebView.loadUrl("https://docs.google.com/gview?embedded=true&url="+LinkTo);
    setContentView(mWebView);
  }
}


如果链接会改变怎么办?
"经过2天的持续测试后,我在Google文档上收到错误消息说您已经达到了查看或下载非Google文档格式的文件的带宽限制.....所以看起来不太可靠." http://stackoverflow.com/questions/2655972/how-can-i-display-a-pdf-document-into-a-webview#comment42182386_5296125

3> ben75..:

Android-Lollipop(api 21)引入了一个新的API:PdfRenderer

此API允许您从PDF文档中的页面创建位图.

不久:

从您的pdf文档中获取可搜索的文件描述符:

ParcelFileDescriptor fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)

创建PdfRenderer

PdfRenderer renderer = new PdfRenderer(fd);

准备位图

Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_4444);

获取PdfRenderer.Page进行渲染

PdfRenderer.Page page = renderer.openPage(pageIndex);

在准备好的位图上渲染页面

page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);

现在你可以用位图做你想做的事了.

请注意,2个空参数可能允许您剪切页面中的某些部分并执行剪辑的变换(使用矩阵)

还有另一种渲染模式:RENDER_MODE_FOR_PRINT.如果您需要此模式,可以正确使用它:这里是详细信息.

以下是有关如何使用此新API的完整示例


有没有办法在不保存手机文件的情况下实现这一目的?我将PDF作为字节流获取,我需要将其显示给用户而不将其保存在手机上.

4> Alecs..:

这个库很简单,效果很好: Android Pdf Viewer https://github.com/barteksc/AndroidPdfViewer

老回复......

我认为Joan Zapata为我们提供了更好,更简单的解决方案:

https://github.com/JoanZapata/android-pdfview

我保证你的确有效!

1:https://github.com/JoanZapata/android-pdfview

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有