java pdf tiff_java-使用iText将TIFF转换为PDF的多线程方法
我本质上是在尝试使用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的多线程方法相关推荐
- itext实现HTML转换为PDF
1.首先,建立一个maven工程(maven工程的建立这里不在演示) 1.1 在maven工程的pom.xml中加入itext所需的jar包 <!-- itext 生成PDF jar--> ...
- Java操作word文档将docx转换为pdf格式
Java操作word文档将docx转换为pdf格式 一.整体说明 在上传 Office 课件时,格式有:doc,docx,xls,xlsx,ppt,pptx,程序需要将其 转换成 pdf 格式, 才能 ...
- 在Java中以编程方式将PSB转换为PDF,JPG或PSD
PSB,Photoshop Big,文件扩展名用于存储与图形有关的大量信息.可以使用Java编程语言轻松地将PSB文件转换为PDF,JPG或PSD格式.让我们学习以下各节以探讨PSB文件转换: 使用J ...
- python pdf报告_python生成pdf报告、python实现html转换为pdf报告
1.先说下html转换为pdf:其实支持直接生成,有三个函数pdfkit.f 安装python包:pip Install pdfkit 系统安装wkhtmltopdf:参考 https://githu ...
- java接收的文件转换成临时文件,java实现酷狗音乐临时缓存文件转换为MP3文件的方法...
这篇文章主要介绍了java实现酷狗音乐临时缓存文件转换为MP3文件的方法,涉及java针对文件操作的相关技巧,需要的朋友可以参考下 本文实例讲述了java实现酷狗音乐临时缓存文件转换为MP3文件的方法 ...
- windows/linux服务器上java使用openoffice将word文档转换为PDF(亲测可用)
一. 前言 1. 开发过程中经常会使用java将office系列文档转换为PDF, 一般都使用微软提供的openoffice+jodconverter 实现转换文档. 2. openoffice既有w ...
- java中doc文件转为pdf文件_java将doc文件转换为pdf文件的三种方法
标签: http://feifei.im/archives/93 ---------------------------------------------- 项目要用到doc转pdf的功能,一番go ...
- Java使用Openoffice将word、ppt转换为PDF
最近项目中要实现WORD的文件预览功能,我们可以通过将WORD转换成PDF或者HTML,然后通过浏览器预览. OpenOffice OpenOffice.org 是一套跨平台的办公室软件套件,能在 W ...
- 将Java中的PPT(X)转换为PDF和图像
与PowerPoint相比,PDF(或图像)文件格式的优点是: PDF /图像文件固定在页面布局中并且难以修改,因此更适合归档.由于PDF /图像文件与大多数设备兼容,因此交付更加方便. For ab ...
最新文章
- 第25章 Pytorch 如何高效使用GPU
- php向页面中添加数据_PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码...
- 它来了:阿里巴巴Java开发手册泰山版解读
- QT的QDataStream类的使用
- Magento: Beginner’s Guide(书籍推荐)
- 每天学一点flash(75) ToolTip 提示
- VS2013的boost.python编译
- python必须下载到c盘吗_python为什么要安装到c盘
- 鸿蒙系统首批更新名单,鸿蒙系统首批升级名单是哪些-鸿蒙系统首批升级名单详细介绍 - 系统家园...
- TCP协议 状态解析和状态统计
- C++---list(列表)模板
- 【雷达通信】基于matlab GUI雷达定位模拟【含Matlab源码 304期】
- 计算机考研804是什么意思,北邮通信考研专业课801和804的选择
- linux at24测试程序,C51读写AT24C04源代码及AT24C04测试程序
- linux版本信息以及x86与x86_64的区别
- 在chrome浏览器上下载txt小说的Javascript代码
- TensorFlow中的小知识:tf.flags.DEFINE_xxx()
- CPU/显卡GPU/CUDA/内存/缓存/SDK/API/DLL【转载整理】
- 小型微型计算机系统加急,小型微型计算机系统杂志
- .env .env.development .env.production 配置说明
热门文章
- JavaScript Oriented[探究面向对象的JavaScript高级语言特性]
- pro git学习笔记 4
- 根据select的选项不同跳转到不同的页面
- pytorch 深入理解 tensor.scatter_ ()用法
- error LNK2001: 无法解析的外部符号 __iob_func
- 虚拟服务器和虚拟主机(空间)的区别
- Mac上安装fastboot等工具与烧写images
- android:Read-only file system解决
- Linux目录/usr/bin和 /usr/local/bin区别
- 移动互联网时代的创业生存法则:快速试错,廉价失败