java - 如何使用 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();
解决方案
推荐阅读
- javascript - Moment Timezone 没有 UTC 数据
- c# - 为什么假设正确权限为一个站点初始化集合,但没有为另一个站点初始化?
- php - 使用 PCRE 从 Twig 模板中分离出前面的内容
- c++ - 如何为结构数组分配内存?
- java - 使用 lambda 将对象列表减少为不可变映射
- java - 在正整数和最大正整数之间打印倍数
- assembly - src 或 destination 中两个值的汇编语言含义
- javascript - 为什么这个 Promise.all() 即使在所有承诺都解决之后也没有解决?
- symfony - Symfony Workflow - 是否可以使用学说关系作为状态持有者?
- python-3.x - 我有一个关于我的程序的问题,它读取用户输入的 2 个句子,然后以各种方式比较它们