Android:创建PDF文件并将其下载到下载目录

时间:2017-05-07 03:16:27

标签: android pdf

在我的Android应用程序中,在其中一个活动中,有一个" PDF下载"按钮。单击此按钮时,我创建一个PDF,然后将其下载到"下载"目录。以下是我在按钮的点击事件上运行的代码:

    public void createAndDownloadPDF()
    {
        try
        {
            PdfDocument document = new PdfDocument();
            View content = this.findViewById(android.R.id.content);
            PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(content.getWidth(),
                    content.getHeight() - 20, 1).create();
            PdfDocument.Page page = document.startPage(pageInfo);
            content.draw(page.getCanvas());
            document.finishPage(page);

            SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyyhhmmss");
            String pdfName = "pdfdemo"
                    + sdf.format(Calendar.getInstance().getTime()) + ".pdf";
            File outputFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), pdfName);

            try
            {
                outputFile.createNewFile();
                OutputStream out = new FileOutputStream(outputFile);
                document.writeTo(out);
                document.close();
                out.close();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
        catch(Exception e)
        {
            Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }

请注意,我向MANIFEST文件添加了所需的WRITE权限,并在运行时请求权限。所以,没有权限问题。

当我调试代码时,我注意到" outputFile"变量保持这条路径:

/storage/emulated/o/Download/pdfdemo07052017121233.pdf

我的用户永远不会在他们的手机中找到上述路径。因此,他们将不知道他们的PDF保存在哪里。当用户点击"下载"他们的手机上的图标,他们应该看到他们从应用程序下载的PDF文件。

所以,我想如果我可以理清以下几行:

File outputFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), pdfName);

我的工作将完成。我应该使用的路径是什么,以便我的PDF文件保存/下载到"下载"目录?我在互联网上进行了研究,但没有找到任何具体的解决方案。

1 个答案:

答案 0 :(得分:1)

试试这个:

    File outDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString());

如果这不起作用,请评估以前生成PDF文件并将其保存到Assets文件夹内的文件夹的可能性。如果是这种情况,请在上面的行之后插入:

    copyAssets("XXX",outDir.toString());

在哪里" XXX"是Assets文件夹中包含PDF文件的文件夹的名称。这会将XXX的内容复制到您设备上的DOWNLOADS/XXX