我本质上是在尝试使用itext将tiff文件转换为pdf,这非常简单.

但是从我可以看到TiffImage.getTiffImage花费大量时间来执行较大的文件.

我的要求是使用FutureTask和ExecutorService提供多线程解决方案.这是我当前的代码:

import java.util.concurrent.Callable;

import com.itextpdf.text.Image;

import com.itextpdf.text.pdf.RandomAccessFileOrArray;

import com.itextpdf.text.pdf.codec.TiffImage;

public class ProcessTiffImage implements Callable{

RandomAccessFileOrArray tiffFile;

int pageNo;

public ProcessTiffImage(RandomAccessFileOrArray tiffFile, int pageNo){

this.tiffFile = tiffFile;

this.pageNo = pageNo;

}

public Image call() throws Exception {

Image image = TiffImage.getTiffImage(tiffFile, pageNo);

return image;

}

}

而convert方法是

public boolean convert(Document document) {

int numOfThreads = Runtime.getRuntime().availableProcessors() ;

ExecutorService service = Executors.newFixedThreadPool(numOfThreads );

List> taskList = new ArrayList>();

List imageList = new ArrayList();

for (int page = 1; page <= numOfPages; page++) {

FutureTask futureTask = new FutureTask(new ProcessTiffImage(tiffFile, page));

taskList.add(futureTask);

service.execute(futureTask);

}

try {

// Wait until all results are available

for (FutureTask future : taskList) {

imageList.add(future.get());

}

} catch (InterruptedException ex) {

ex.printStackTrace();

} catch (ExecutionException ex) {

ex.printStackTrace();

}

service.shutdown();

boolean success = generatePdf(document, imageList);

return success;

}

但是我在future.get()处收到了NullPointerException.问题是执行没有等待TiffImage.getTiffImage(tiffFile,pageNo)完成.因此,我无法创建图像列表.

任何帮助将不胜感激.

堆栈跟踪

java.util.concurrent.ExecutionException: java.lang.NullPointerException

at java.util.concurrent.FutureTask.report(FutureTask.java:122)

at java.util.concurrent.FutureTask.get(FutureTask.java:188)

at com.app.convertor.TiffParser.convert(TiffParser.java:107)

at com.app.start.TiffToPdf.main(TiffToPdf.java:40)

Caused by: java.lang.NullPointerException

Caused by: java.lang.NullPointerException

at com.itextpdf.text.pdf.codec.TIFFDirectory.getFieldAsLong(TIFFDirectory.java:467)

at com.itextpdf.text.pdf.codec.TIFFDirectory.getFieldAsLong(TIFFDirectory.java:477)

at com.itextpdf.text.pdf.codec.TiffImage.getTiffImage(TiffImage.java:124)

at com.itextpdf.text.pdf.codec.TiffImage.getTiffImage(TiffImage.java:106)

at com.app.processor.ProcessTiffImage.call(ProcessTiffImage.java:20)

at com.app.processor.ProcessTiffImage.call(ProcessTiffImage.java:1)

at java.util.concurrent.FutureTask.run(FutureTask.java:262)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

at java.lang.Thread.run(Thread.java:744)

java pdf tiff_java-使用iText将TIFF转换为PDF的多线程方法相关推荐

  1. itext实现HTML转换为PDF

    1.首先,建立一个maven工程(maven工程的建立这里不在演示) 1.1 在maven工程的pom.xml中加入itext所需的jar包 <!-- itext 生成PDF jar--> ...

  2. Java操作word文档将docx转换为pdf格式

    Java操作word文档将docx转换为pdf格式 一.整体说明 在上传 Office 课件时,格式有:doc,docx,xls,xlsx,ppt,pptx,程序需要将其 转换成 pdf 格式, 才能 ...

  3. 在Java中以编程方式将PSB转换为PDF,JPG或PSD

    PSB,Photoshop Big,文件扩展名用于存储与图形有关的大量信息.可以使用Java编程语言轻松地将PSB文件转换为PDF,JPG或PSD格式.让我们学习以下各节以探讨PSB文件转换: 使用J ...

  4. python pdf报告_python生成pdf报告、python实现html转换为pdf报告

    1.先说下html转换为pdf:其实支持直接生成,有三个函数pdfkit.f 安装python包:pip Install pdfkit 系统安装wkhtmltopdf:参考 https://githu ...

  5. java接收的文件转换成临时文件,java实现酷狗音乐临时缓存文件转换为MP3文件的方法...

    这篇文章主要介绍了java实现酷狗音乐临时缓存文件转换为MP3文件的方法,涉及java针对文件操作的相关技巧,需要的朋友可以参考下 本文实例讲述了java实现酷狗音乐临时缓存文件转换为MP3文件的方法 ...

  6. windows/linux服务器上java使用openoffice将word文档转换为PDF(亲测可用)

    一. 前言 1. 开发过程中经常会使用java将office系列文档转换为PDF, 一般都使用微软提供的openoffice+jodconverter 实现转换文档. 2. openoffice既有w ...

  7. java中doc文件转为pdf文件_java将doc文件转换为pdf文件的三种方法

    标签: http://feifei.im/archives/93 ---------------------------------------------- 项目要用到doc转pdf的功能,一番go ...

  8. Java使用Openoffice将word、ppt转换为PDF

    最近项目中要实现WORD的文件预览功能,我们可以通过将WORD转换成PDF或者HTML,然后通过浏览器预览. OpenOffice OpenOffice.org 是一套跨平台的办公室软件套件,能在 W ...

  9. 将Java中的PPT(X)转换为PDF和图像

    与PowerPoint相比,PDF(或图像)文件格式的优点是: PDF /图像文件固定在页面布局中并且难以修改,因此更适合归档.由于PDF /图像文件与大多数设备兼容,因此交付更加方便. For ab ...

最新文章

  1. 第25章 Pytorch 如何高效使用GPU
  2. php向页面中添加数据_PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码...
  3. 它来了:阿里巴巴Java开发手册泰山版解读
  4. QT的QDataStream类的使用
  5. Magento: Beginner’s Guide(书籍推荐)
  6. 每天学一点flash(75) ToolTip 提示
  7. VS2013的boost.python编译
  8. python必须下载到c盘吗_python为什么要安装到c盘
  9. 鸿蒙系统首批更新名单,鸿蒙系统首批升级名单是哪些-鸿蒙系统首批升级名单详细介绍 - 系统家园...
  10. TCP协议 状态解析和状态统计
  11. C++---list(列表)模板
  12. 【雷达通信】基于matlab GUI雷达定位模拟【含Matlab源码 304期】
  13. 计算机考研804是什么意思,北邮通信考研专业课801和804的选择
  14. linux at24测试程序,C51读写AT24C04源代码及AT24C04测试程序
  15. linux版本信息以及x86与x86_64的区别
  16. 在chrome浏览器上下载txt小说的Javascript代码
  17. TensorFlow中的小知识:tf.flags.DEFINE_xxx()
  18. CPU/显卡GPU/CUDA/内存/缓存/SDK/API/DLL【转载整理】
  19. 小型微型计算机系统加急,小型微型计算机系统杂志
  20. .env .env.development .env.production 配置说明

热门文章

  1. JavaScript Oriented[探究面向对象的JavaScript高级语言特性]
  2. pro git学习笔记 4
  3. 根据select的选项不同跳转到不同的页面
  4. pytorch 深入理解 tensor.scatter_ ()用法
  5. error LNK2001: 无法解析的外部符号 __iob_func
  6. 虚拟服务器和虚拟主机(空间)的区别
  7. Mac上安装fastboot等工具与烧写images
  8. android:Read-only file system解决
  9. Linux目录/usr/bin和 /usr/local/bin区别
  10. 移动互联网时代的创业生存法则:快速试错,廉价失败