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