【发布时间】:2013-09-09 15:51:37
【问题描述】:
我正在使用android pdf writer (apw)在我的应用程序中大部分成功。但是,当我尝试在 pdf 文档中包含高分辨率时,出现内存不足异常。
在创建 pdf 文件之前,库必须将内容本身转换为字符串(表示原始 pdf 内容),然后将其转换为字节数组。字节数组以文件输出流的形式写入文件(参见网站示例)。
在生成字符串时会出现内存不足的预期,因为以字符串格式表示位图图像的所有像素非常占用内存。我可以使用 android API 对图像进行下采样,但是,必须以高分辨率(~2000 x 1000)将图像放入 pdf 中。
有许多扫描仪类型的应用程序似乎能够生成 pdf 高分辨率图像,所以肯定有办法绕过它。诚然,他们可能正在使用其他库,但鉴于它是免费的,因此很受欢迎(?)
我给开发者发了邮件,但没有回复。
可能的解决方案(我能想到的)包括:
修改库以加载表示例如的字符串PDF的前10%,并逐块写入文件。 (编辑)
修改库以将字符串输出流或其他输出流输出到临时文件(或最终文件),因为实际的 pdf 内容正在写入 pdfwriter 对象中。
然而,作为一个相对的 java 菜鸟(甚至更多是一个 pdf 规范菜鸟),我无法很好地理解这个库来自己做这件事。
有没有人遇到过这个问题并找到了解决方法?任何愿意冒险提出建议的人,或者看看图书馆本身,甚至看看是否有某种修复。
感谢您的帮助。 nme32
编辑:
Logcat 说崩溃前堆大小在 40 到 60mb 的范围内。我了解(如果不是,请纠正我)Android 会根据正在运行的其他内容限制应用程序的可用内存,尽管它在 50mb 范围内,具体取决于设备。
在加载图片的时候,我觉得APW本质上是把它转换成位图,也就是逐个像素地表示图片,然后把它变成字符串格式,意思是你使用哪种图片格式都没有关系,它可能是最好是位图。
【问题讨论】:
-
这个问题已经一年了。你成功了吗?
标签: java android pdf pdf-generation out-of-memory