首页 > 解决方案 > 如何使用 Android pdf 文档 API 在不损失质量的情况下减小从图像生成的 pdf 文件的大小?

问题描述

我正在制作一个图像到 pdf 转换器应用程序,我正在使用 android pdf 文档 API 将图像转换为 pdf,但我不知道如何减小生成的 pdf 的大小。我尝试使用 bitmap.compress() 方法压缩图像,但无论我将其设置为 0 还是 100,它都对我不起作用,生成的 pdf 的大小始终保持不变。谁能帮我弄清楚如何在不损失图像质量的情况下减小生成的 pdf 大小?.注意:我尝试了许多堆栈溢出可用的答案,但它们对我不起作用。尽管其中一些有效,但它们降低了图像质量。 这是我如何将图像转换为 pdf 的代码:

                Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor);

                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                bitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), true);
                Log.d("yhjt", "dsjahfo   " + bitmap);
                PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(bitmap.getWidth(), bitmap.getHeight(), i + 1).create();
                PdfDocument.Page page = pdfDocument.startPage(pageInfo);
                Canvas canvas = page.getCanvas();
                Paint paint = new Paint();
                paint.setColor(Color.TRANSPARENT);
                canvas.drawPaint(paint);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 0, stream);
                bitmap = bitmap.copy(Bitmap.Config.RGB_565, false);
                Log.d("yhjt", "dsjahfo   " + bitmap);
                canvas.drawBitmap(bitmap, 0f, 0f, null);
                Log.d("yhjt", "dsjahfo   " + page);
                pdfDocument.finishPage(page);
                bitmap.recycle();
                try {
                    parcelFileDescriptor.close();
                    stream.flush();
                    stream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
              file = new File(Environment.getExternalStorageDirectory(), "MY_PDF");
            if (!file.exists()) {
                file.mkdir();
            }
            String txt = editText.getText().toString();
            Log.d("edit", "how " + txt);
            file1 = new File(file, txt + ".pdf");
            try {
                fileOutputStream = new FileOutputStream(file1);
            } catch (FileNotFoundException fileNotFoundException) {
                fileNotFoundException.printStackTrace();
            }
            try {
                pdfDocument.writeTo(fileOutputStream);
            } catch (IOException ioException) {
                ioException.printStackTrace();

            }
            pdfDocument.close();

标签: javaandroidbitmapimage-compressionimage-conversion

解决方案


推荐阅读