在 App 中显示 PDF 文件

Posted

技术标签:

【中文标题】在 App 中显示 PDF 文件【英文标题】:Show PDF file in App 【发布时间】:2014-09-30 00:19:40 【问题描述】:

我发现这两种显示 pdf 文件的可能性。

    使用以下命令打开 webView:

    webView.loadUrl("https://docs.google.com/gview?embedded=true&url="+uri);

    使用外部应用打开 pdf 文件:

    Intent 意图 = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(outFile),"application/pdf"); 意图.setFlags(意图.FLAG_ACTIVITY_NO_HISTORY); 开始活动(意图);

两者都有效。但我的问题是 pdf 仅供内部使用,在这两个示例中,用户都可以下载它或将其保存在另一个文件夹中。

我知道 ios 开发中的框架,我正在寻找适用于 android 的解决方案。

【问题讨论】:

当你使用搜索引擎搜索android pdf library时,你学到了什么? 【参考方案1】:

Android 现在提供了 PDF API,可以轻松地在应用程序中呈现 pdf 内容。

你可以找到详情here

下面是从 assets 文件夹中的 pdf 文件渲染的示例 sn-p。

    private void openRenderer(Context context) throws IOException 
    // In this sample, we read a PDF from the assets directory.
    File file = new File(context.getCacheDir(), FILENAME);
    if (!file.exists()) 
        // Since PdfRenderer cannot handle the compressed asset file directly, we copy it into
        // the cache directory.
        InputStream asset = context.getAssets().open(FILENAME);
        FileOutputStream output = new FileOutputStream(file);
        final byte[] buffer = new byte[1024];
        int size;
        while ((size = asset.read(buffer)) != -1) 
            output.write(buffer, 0, size);
        
        asset.close();
        output.close();
    
    mFileDescriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
    // This is the PdfRenderer we use to render the PDF.
    if (mFileDescriptor != null) 
        mPdfRenderer = new PdfRenderer(mFileDescriptor);
    

更新:此 sn-p 来自 google 开发人员提供的示例。

【讨论】:

【参考方案2】:

许多库可用于在您自己的应用中显示 pdf。

Android PDF Viewer VuDroid APDFViewer droidreader android-pdf mupdf android-pdfView

有关使用android-pdfView 的工作示例,请参阅此blog post。 它演示了库的基本用法,通过垂直和水平滑动将 pdf 显示到视图上。

pdfView = (PDFView) findViewById(R.id.pdfView);
pdfView.fromFile(new File("/storage/sdcard0/Download/pdf.pdf")).defaultPage(1).enableSwipe(true).onPageChange(this).load();

【讨论】:

Android API 19 现在提供了在应用程序中呈现 pdf 内容的可行性,因此不需要 3rd 方 SDK。【参考方案3】:

您可以在自己的查看器中显示 PDF

Tier 是您应该查看的少数开源 pdf 查看器: http://androiddeveloperspot.blogspot.com/2013/05/android-pdf-reader-open-source-code.html

您可以加密 pdf 并确保只有您的查看器才能解密它。

【讨论】:

以上是关于在 App 中显示 PDF 文件的主要内容,如果未能解决你的问题,请参考以下文章

XCODE生成的app文件不能用

在 Flutter App 中从 Firebase 存储加载 PDF 文件

Laravel - 在存储中显示 PDF 文件而不强制下载?

Laravel - 在存储中显示 PDF 文件而不强制下载?

将pdf文档保存到iOS Files App时如何指定文件名?

在 IOS App 中打开 PDF