android 原生 bitmap 生成pdf文件

  写这篇文章,是因为我编写这块功能时,公司要求能用android原生代码就不要用第三方,所以,我找了好久都没找到谁在用原生代码生成pdf文件,尤其是把bitmap写入pdf中,所以,在这里,我把原生 生成pdf文件的代码写下来了 ,与大家共享,但是,目测,这个原生的代码只适用于android 6.0以上应该,因为我们毕竟没有作什么特殊处理,bitmap本身文本就很大,如果把bitmap转成png,就可以适用于所有版本了,否则,在android 5.0上生成的pdf还是很大的,所以,请大家知晓,费话不多说,代码如下:

public static File saveBitmapForPdf(List<Bitmap> bitmaps, String appDir, String name) {
        PdfDocument doc = new PdfDocument();
        int pageWidth = PrintAttributes.MediaSize.ISO_A4.getWidthMils() * 72 / 1000;

        float scale = (float) pageWidth / (float) bitmaps.get(0).getWidth();
        int pageHeight = (int) (bitmaps.get(0).getHeight() * scale);

        Matrix matrix = new Matrix();
        matrix.postScale(scale, scale);
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        for (int i = 0; i < bitmaps.size(); i++) {
            PdfDocument.PageInfo newPage = new PdfDocument.PageInfo.Builder(pageWidth, pageHeight, i).create();
            PdfDocument.Page page = doc.startPage(newPage);
            Canvas canvas = page.getCanvas();
            canvas.drawBitmap(bitmaps.get(i), matrix, paint);
            doc.finishPage(page);
        }
        File file = new File(appDir, name);
        FileOutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(file);
            doc.writeTo(outputStream);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            doc.close();
            try {
                if (outputStream != null) {
                    outputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return file;
    }

猜你喜欢

转载自blog.csdn.net/u011228868/article/details/89707198