无法使用JAVA android创建和打开PDF

时间:2017-08-20 20:23:18

标签: java android pdf

我想使用PdfDocument API创建PDF文档。为此,我创建了一个名为getTicketAsPdf的演示函数,它还有一个名为addText的子函数,用于向pdf文档添加文本。

所有似乎都在运行,但是当出现“选择文件”对话框并选择Adobe Reader时,我收到一条错误消息

  

无法访问此文件。检查位置或网络   再试一次

我了解保存在您的应用程序中的文档需要使用我已经完成的FileProvider生成Uri,这适用于我使用StringBuilder生成的CSV文件,但不适用于PDF,所以我不认为问题出在我的FileProvider

这是代码

private void getTicketAsPdf() {
    try {
        int width = 595;
        int height = 842;

        // create a new document
        PdfDocument document = new PdfDocument();

        // crate a page description
        PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(width, height, 1).create();

        // start a page
        PdfDocument.Page page = document.startPage(pageInfo);

        // get canvas
        Canvas canvas = page.getCanvas();

        // get color
        Paint paint = new Paint();
        paint.setColor(Color.parseColor("#ff0000"));

        // draw header square
        canvas.drawRect(25, 25, width - 25, 50, paint);
        addText(canvas, "MY HEADER", "#ffffff", 100, 50, 50, 1);
        addText(canvas, "And some simple text", "#FF0000", 25, 100, 100, 1);

        // finish the page
        document.finishPage(page);

        // write the document content
        File file = new File(context.getFilesDir(), "test.pdf");
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        document.writeTo(fileOutputStream);
        document.close();
        fileOutputStream.close();

        // make file available
        Uri contentUri = FileProvider.getUriForFile(context, "com.mycompany.myapp.fileprovider", file);
        Intent target = new Intent(Intent.ACTION_VIEW);
        target.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        target.setDataAndType(contentUri, "application/pdf");

        Intent intent = Intent.createChooser(target, "Open File");
        context.startActivity(intent);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

private static void addText(Canvas canvas, String text, String color, int size, int x, int y, int align) {
    Paint paint = new Paint();
    paint.setColor(Color.parseColor(color));
    paint.setTextAlign(align == 0 ? Paint.Align.LEFT : align == 1 ? Paint.Align.CENTER : Paint.Align.RIGHT);
    //paint.setTypeface(font);
    paint.setTextSize(size);

    canvas.drawText(text, x, y, paint);
}

正如我所说,我已经设置了我的FileProvider,这适用于另一个功能,但只是包装内容不同的PDF,这里是

RES \ XML \ file_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="my_files" path="" />
</paths>

的AndroidManifest.xml

<provider android:authorities="com.mycompany.myapp.fileprovider" android:exported="false" android:grantUriPermissions="true" android:name="android.support.v4.content.FileProvider">
    <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" />
</provider>

0 个答案:

没有答案