我在客户端应用程序中内置了文档扫描功能。该应用程序将文档存储为图像存档 - 文档可以包含1到n页。显示一个菜单项,允许用户将文档导出为PDF格式。
问题是生成的PDF太大(6页的文档为13.5 Mb)。这会导致许多电子邮件服务出现问题,这些服务不允许通过电子邮件发送PDF。
因此,在将位图绘制到PDF之前,我已经在压缩和调整位图大小。但无论我对位图做了什么(将JPEG压缩改为2对25比100或矩阵的比例),生成的PDF的文件大小始终是相同的。
如何正确压缩位图以实际影响生成的PDF文件大小?
File[] images = getImages();
PdfDocument doc = new PdfDocument();
for (int i = 0; i < images.length; i++) {
// Get bitmap from file
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap original = BitmapFactory.decodeFile(images[i].getAbsolutePath(), options);
// Compress bitmap
ByteArrayOutputStream stream = new ByteArrayOutputStream();
original.compress(Bitmap.CompressFormat.JPEG, 25, stream);
byte[] bitmapData = stream.toByteArray();
Bitmap compressed = BitmapFactory.decodeByteArray(bitmapData, 0, bitmapData.length);
// Calculate page size and bitmap scale
int width = 768;
int height = (int) (((float) width / (float) original.getWidth()) * (float) original.getHeight());
float scaleWidth = ((float) width) / original.getWidth();
float scaleHeight = ((float) height) / original.getHeight();
// Create a scale matrix for the bitmap
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
// Draw scaled and compressed bitmap to page
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(width, height, i + 1).create();
PdfDocument.Page page = doc.startPage(pageInfo);
page.getCanvas().drawBitmap(compressed, matrix, null);
doc.finishPage(page);
}