当前位置: 首页 > 知识库问答 >
问题:

Android itext pdf库OutOfMemoryError

袁永贞
2023-03-14

我正在使用itext库,以便创建一个图像和文本的pdf。下面的代码在4个设备中有3个可以正常工作,但在第4个设备上,我得到了OutofMemoryException。该代码在AsyncTask doinbackground方法中运行,它使用bimtmap对象检查每个jpg文件(来自sdcard的文件目录)的旋转,测量宽度和高度,并在必要时旋转itext Image对象90度。

        try {

            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream(
                    Environment.getExternalStorageDirectory()
                            + "/doc" + documentID + ".pdf"));
            document.open();
            document.setMargins(0f, 0f, 0f, 0f);
            document.add(new Paragraph(documentNameEt.getText().toString()));
            document.add(new Paragraph(makeUserDeets()));
            Bitmap b = null;
            Image image = null;
            Rectangle r = document.getPageSize();
            for (String d : paths[0]) {
                Log.d("senddataobj", d);
                image = Image.getInstance(d);
                b = BitmapFactory.decodeFile(d);
                if (b.getWidth() > b.getHeight()) {
                    image.setRotationDegrees(90);
                    Log.d(d, "rotating");
                }
                b.recycle();
                image.scaleToFit(r.getWidth(), r.getHeight());
                document.add(image);                
            }

            document.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

java.lang.runtimeException:在Android.os.asyncTask$3处执行doInBackground()时发生错误。done(asynctask.java:278)在java.util.concurrent.futureTask$sync.innerSetException(FutureTask.java:273)在java.util.concurrent.futureTask.setException(FutureTask.java:124)在在java.util.concurrent.ThreadPoolExecutor.runworker(ThreadPoolExecutor.java:1076)在java.util.concurrent.ThreadPoolExecutor.javer.run(ThreadPoolExecutor.javer.run(ThreadPoolExecutor.java:569)在java.lang.Thread.run(ThreadPoolExecutor.javer.run(ThreadPoolExecutor.java:856)在java.lang.thread.run(ThreadPoolExecutor.javer.run.java:299)在Android.graphics.bitmapfactory.decodeFile(Bitmapfactory.java:324)在com.wake.snapshot.createdocumentactivity$createandsendpdf.doinbackground(createdocumentactivity.java:315)在com.wake.up.your.wealth.snapshot.createdocumentactivity$createandsendpdf.doinbackground(createdocumentactivity.java:1)在android.os.asynctask$2.在java.util.concurrent.futuretask$sync.innerrun(futuretask.java:305).

共有1个答案

谢灵均
2023-03-14

由于您只需要位图的大小,请使用BitmapFactory with inJustDecodeBounds选项http://developer.android.com/reference/android/graphics/BitmapFactory.options.html#inJustDecodeBounds...它将返回空位图,但您将在外部和外部具有大小

 类似资料:
  • CodeIgniter 内置了速度快、功能强大的数据库类作为数据库的中间抽象层。数据库类支持传统架构以及 Active Record 架构。类中的数据库函数使用简单明了的语法。 数据库配置 入门:用法举例 连接数据库 查询 生成查询结果 查询辅助函数 Active Record 类 事务 表格元数据 字段元数据 自定义函数调用 查询缓存 数据库维护类 数据库工具类

  • 标准库 名称 摘要 archive tar tar包实现了tar格式压缩文件的存取. zip zip包提供了zip档案文件的读写服务. bufio bufio 包实现了带缓存的I/O操作. builtin builtin 包为Go的预声明标识符提供了文档. bytes bytes包实现了操作[]byte的常用函数. compress bzip2 bzip2包实现bzip2的解压缩. flate f

  • 我想用com。Android支持:设计:22.2.0在我的Android Studio(1.3)项目中,但当我添加'com'时。Android支持:设计:22.2.0'到依赖{}我有103个错误,我无法摆脱这个错误。 如果我尝试使用新版本的appcompat,也会发生同样的情况。现在我有了“com”。Android支持:appcompat-v7:19。“以我的身材。格雷德尔。 有人知道吗? 我的错

  • 页面开发省不了js和css 起码添加jquery吧 下载地址 https://jquery.com/download/ 将其存在在 WebContent/rs/js/jquery.js material-design-css(可选) nutz-book-project中使用了pangwu86编写的material-design-css 可以直接把nutz-book-project的rs目录拷贝过来

  • 主要内容:导入库,封装库,创建自定义库,库前缀编程语言中的库表示例程集合(编程指令集)。Dart有一组内置库,可用于存储经常使用的例程。Dart库包含一组类,常量,函数,typedef,属性和异常。 导入库 导入使库中的组件可用于调用者代码。关键字用于实现相同的目标。dart文件可以有多个语句。 内置Dart库URI使用来引用库。其他库可以使用文件系统路径或来指定其URI。包管理器(如pub工具)提供的库使用。 下面给出了在Dart中导入库的

  • table 库是由一些辅助函数构成的,这些函数将 table 作为数组来操作。 下标从 1 开始 在 Lua 中,数组下标从 1 开始计数。 官方解释:Lua lists have a base index of 1 because it was thought to be most friendly for non-programmers, as it makes indices corresp