写这篇文章,是因为我编写这块功能时,公司要求能用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;
}