我在我的应用程序中成功地使用android pdf writer(apw)。然而,当我尝试在pdf文档中包含高分辨率时,会出现内存不足异常。
在创建pdf文件之前,库必须将内容本身转换为字符串(表示原始pdf内容),然后将其转换为字节数组。字节数组写入文件输出流中(通过网站示例查看)。
当生成字符串时会出现内存不足异常,因为用字符串格式表示位图图像的所有像素非常占用内存。我可以使用Android API降低图像的采样率,但是必须以高分辨率(~2000 x 1000)将图像放入PDF中。
有许多扫描仪类型的应用程序似乎能够生成pdf高分辨率图像,所以肯定有一种方法可以解决这个问题。虽然它们可能使用其他库,但是鉴于该库是免费的且因此很受欢迎(?), 肯定有人已经找到了绕过此问题的方法。
我给开发者发送了电子邮件,但没有回复。
潜在的解决方案(我能想到的)包括:
在创建pdf文件之前,库必须将内容本身转换为字符串(表示原始pdf内容),然后将其转换为字节数组。字节数组写入文件输出流中(通过网站示例查看)。
当生成字符串时会出现内存不足异常,因为用字符串格式表示位图图像的所有像素非常占用内存。我可以使用Android API降低图像的采样率,但是必须以高分辨率(~2000 x 1000)将图像放入PDF中。
有许多扫描仪类型的应用程序似乎能够生成pdf高分辨率图像,所以肯定有一种方法可以解决这个问题。虽然它们可能使用其他库,但是鉴于该库是免费的且因此很受欢迎(?), 肯定有人已经找到了绕过此问题的方法。
我给开发者发送了电子邮件,但没有回复。
潜在的解决方案(我能想到的)包括:
修改库以加载表示PDF前10%的字符串,并按块写入文件。 (编辑)
修改库以将字符串输出流或其他输出流输出到临时文件(或最终文件),因为实际的pdf内容正在pdfwriter对象中编写。
然而,作为相对的Java新手(甚至更不懂PDF规范),我无法充分理解库以自行完成此操作。
有人遇到过这个问题并找到了解决方法吗? 任何人都愿意冒险提出建议,或者甚至查看库本身是否有某种修复方法。
感谢您的帮助。 nme32
编辑:
在崩溃之前,Logcat显示堆大小在40到60mb的范围内。我理解(如果不正确请纠正)Android根据其他正在运行的应用程序限制可用内存,但大约在50mb左右,具体取决于设备。
加载图像时,我认为APW基本上将其转换为位图,即以逐像素方式表示图像,然后将其放入字符串格式中,这意味着使用哪种图像格式并不重要,它可以是位图。