我正在使用android pdf writer (apw)在我的应用程序中成功的大部分。但是,当我尝试在pdf文档中包含高分辨率时,我会遇到内存不足的异常。
在创建pdf文件之前,库必须将内容本身转换为字符串(表示原始pdf内容),然后将其转换为字节数组。字节数组在文件输出流中写入文件(参见网站示例)。
生成字符串时会发生内存不足,因为以字符串格式表示位图图像的所有像素都是内存密集型的。我可以使用android API对图像进行下采样,但是,必须将图像以高分辨率(~2000 x 1000)放入pdf中。
有许多扫描仪类型的应用程序似乎能够生成pdf高分辨率图像,因此必须有一种解决方法,当然。当然,他们可能正在使用其他图书馆,但肯定有人已经找到了解决这个库的方法,因为它是免费的,因此很受欢迎(?)
我给开发者发了电子邮件,但没有回复。
潜在的解决方案(我能想到)包括:
修改库以加载表示例如的字符串PDF的前10%,并按块写入文件块。 (编辑)
修改库以将字符串输出流或其他输出流输出到临时文件(或最终文件),因为实际的pdf内容正在pdfwriter对象中写入。
然而,作为一个相对的java noob(甚至更多的pdf规范noob),我无法很好地理解该库本身。
有没有人遇到这个问题并找到解决办法?任何人都愿意冒险提出建议,或者看看图书馆本身,看看是否有某种修复。
感谢您的帮助。 nme32
修改:
Logcat表示崩溃前堆大小在40到60mb之间。我理解(如果不是,请纠正我)Android会根据正在运行的其他内容限制应用程序的可用内存,尽管它位于50mb球场,具体取决于设备。
加载图片时,我认为APW基本上将其转换为位图,即逐像素地表示图像然后将其放入字符串格式,这意味着您使用的图像格式无关紧要,它可能与好吧是位图。
答案 0 :(得分:1)
首先,你提到的决议非常高。我已经提到了与Android in this Answer
中的图像相关的问题其次,如果第一个解决方案对你不起作用,我建议使用基于磁盘的LruCache。并将块存储到基于磁盘的缓存中,然后检索并使用它。 Here is an Example of that
希望这会有所帮助。如果它没有评论这个答案,我会添加更多的解决方案。