Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Android pdf文档API减少从图像生成的pdf文件的大小而不丢失质量?_Java_Android_Bitmap_Image Compression_Image Conversion - Fatal编程技术网

Java 如何使用Android pdf文档API减少从图像生成的pdf文件的大小而不丢失质量?

Java 如何使用Android pdf文档API减少从图像生成的pdf文件的大小而不丢失质量?,java,android,bitmap,image-compression,image-conversion,Java,Android,Bitmap,Image Compression,Image Conversion,我正在制作一个图像到pdf转换应用程序,我正在使用android pdf文档API将图像转换为pdf,但我不知道如何减小生成的pdf的大小。 我尝试使用bitmap.compress()方法来压缩图像,但无论我将其设置为0还是100,它都不起作用,生成的pdf大小始终保持不变。 有人能帮我弄清楚如何在不损失图像质量的情况下减少生成的pdf大小吗? 。注意:我尝试了许多在堆栈溢出上可用的答案,但它们对我不起作用。 尽管其中一些有效,但它们降低了图像质量。 以下是我如何将图像转换为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();

PdfDocument
设计用于打印,而不是创建PDF文件。您可能需要调查生成pdf的第三方库。您没有正确阅读我的问题。事实上,我已经使用android.graphics.pdf.PdfDocument将图像转换为pdf,但问题是生成的pdf大小非常大,即使是单个图像,所以我需要将pdf压缩为较小的大小。“但问题是生成的pdf大小非常大,即使对于单个图像也是如此”--这是因为
PdfDocument
是为打印而设计的,而不是为创建pdf文件。打印时不需要考虑文件大小。”因此,我需要将pdf压缩到较小的大小“--您可能需要调查生成PDF的第三方库,因为它们更可能考虑文件大小。iText库在那里,但我想将我的应用程序上载到playstore,因此我不知道我是否可以在我的应用程序中使用它。顺便说一句,谢谢您提供的信息。