概述

基于Java,将pdf转成单一的tiff文件。

MAVEN依赖

<groupId>com.sun.media</groupId>
<artifactId>jai_codec</artifactId>
<version>1.1-mr</version>
</dependency>
<dependency>
<groupId>javax.media</groupId>
<artifactId>jai_core</artifactId>
<version>1.1-mr</version>
</dependency>
<dependency>
<groupId>com.sun.medialib</groupId>
<artifactId>mlibwrapper_jar</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.0-RC2</version>
</dependency>

部分依赖在maven中心仓库中找不到,现提供统一的压缩文件:依赖下载

实现

类图

Pdf2TiffConstant

IMG_FORMAT

默认的图片格式

DPI

默认的转换精度

Pdf2TiffUtil

public static pdf2Tiff (is: InputStream, os: OutputStream): void

将指定的pdf转成单一tiff文件,写到指定的输出流。参数is提供pdf文档的内容,参数os指定输出流。

代码

Pdf2TiffConstant

package cn.ljl.javaweb.demo.pdf2tiff;

public class Pdf2TiffConstant {
/** 图片格式 */
public static final String IMG_FORMAT = "tiff"; /** 打印精度设置 */
public static final int DPI = 160; //图片的像素
}

Pdf2TiffUtil

package cn.ljl.javaweb.demo.pdf2tiff;

import static cn.ljl.javaweb.demo.pdf2tiff.Pdf2TiffConstant.DPI;
import static cn.ljl.javaweb.demo.pdf2tiff.Pdf2TiffConstant.IMG_FORMAT; import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List; import javax.media.jai.JAI;
import javax.media.jai.PlanarImage; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer; import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageEncoder;
import com.sun.media.jai.codec.TIFFEncodeParam; public class Pdf2TiffUtil {
/**
* 从输入流读取pdf,转化为tiff后写入输出流.<br/>
* 参考列表:
* <ol>
* <li><a href=
* "http://www.coderanch.com/t/497492/java/java/Convert-PDF-files-Tiff-files"
* >Convert PDF files to Tiff files</a></li>
* <li><a href=
* "http://www.oracle.com/technetwork/cn/java/javaee/downloads/readme-1-1-2-137176.html"
* >Java(TM) Advanced Imaging API README</a></li>
* </ol>
*
* @param is
* 输入流,提供pfg内容.
* @param os
* 输出流.
*/
public static void pdf2Tiff(InputStream is, OutputStream os) {
PDDocument doc = null;
try {
doc = PDDocument.load(is);
int pageCount = doc.getNumberOfPages();
PDFRenderer renderer = new PDFRenderer(doc); // 根据PDDocument对象创建pdf渲染器 List<PlanarImage> piList = new ArrayList<PlanarImage>(pageCount - 1);
for (int i = 0 + 1; i < pageCount; i++) {
BufferedImage image = renderer.renderImageWithDPI(i, DPI,
ImageType.RGB);
PlanarImage pimg = JAI.create("mosaic", image);
piList.add(pimg);
} TIFFEncodeParam param = new TIFFEncodeParam();// 创建tiff编码参数类
param.setCompression(TIFFEncodeParam.COMPRESSION_DEFLATE);// 压缩参数
param.setExtraImages(piList.iterator());// 设置图片的迭代器 BufferedImage fimg = renderer.renderImageWithDPI(0, DPI,
ImageType.RGB);
PlanarImage fpi = JAI.create("mosaic", fimg); // 通过JAI的create()方法实例化jai的图片对象 ImageEncoder enc = ImageCodec.createImageEncoder(IMG_FORMAT, os,
param);
enc.encode(fpi);// 指定第一个进行编码的jai图片对象,并将输出写入到与此
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (doc != null)
doc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

参考索引

  1. Convert PDF files to Tiff files
  2. Java(TM) Advanced Imaging API README

pdf转tiff的更多相关文章

  1. Python操作PDF与Tiff文件

    1.PDF文件的合并与拆分 pypdf http://www.douban.com/note/455252403/ http://www.redicecn.com/html/Python/201301 ...

  2. C# 如何将PDF转为多种图像文件格式(Png/Bmp/Emf/Tiff)

    PDF是一种在我们日常工作学习中最常用到的文档格式之一,但常常也会因为文档的不易编辑的特点,在遇到需要编辑PDF文档内容或者转换文件格式的情况时让人苦恼.通常对于开发者而言,可选择通过使用组件的方式来 ...

  3. JAVA中 PDF文件转成TIFF文件的2种方式

    由于在工作中使用到了PDF->TIFF的技术,所以稍微研究了一下实现方式,通过资料查阅,暂时发现了2种方式,2种方式有所区别:第一种方式转化后的tiff文件是黑白的,第二种方式转化后的tiff文 ...

  4. c#使用word、excel、pdf ——转

    一.C# Word操作引入Word COM组件菜单=>项目=>添加引用=>COM=>Microsoft Word 11.0 Object Libraryusing Word = ...

  5. Aspose.Pdf v8.4.1 发布

    .NET v8.4.1: 修复的错误及漏洞: PDF到JPEG时,内容从最终JPEG文件中丢失. 书签缩放识别错误.  Java v4.2: 新特性: 搜索分离超过两行的文本. 修复的异常: PDF到 ...

  6. Linux常用PDF阅读软件

    1.福昕阅读器是一款PDF文档阅读器,对中文的支持度非常高.福昕阅读器作为全球最流行的PDF阅读器,能够快速打开.浏览.审阅.注释.签署及打印任何PDF文件. 2.evince是一个支持多种格式的文件 ...

  7. NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者

    NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者 作者: raindy 来源:http://bbs.hanzify.org/index.php?showtopic=30029 时间: ...

  8. Nullsoft教程 NSIS初学者图文教程一

    Nullsoft教程 NSIS初学者图文教程一 来源:互联网 作者:佚名 时间:03-29 00:34:33 [大 中 小] Nullsoft Installation System(nsis) 是一 ...

  9. Something wrong with FTK OCR

    A case about business secret the suspect took lots of photos and screenshots from BOM, RD papers... ...

随机推荐

  1. POJ 2891- Strange Way to Express Integers CRT 除数非互质

    题意:给你余数和除数求x 注意除数不一定互质 思路:不互质的CRT需要的是将两个余数方程合并,需要用到扩展GCD的性质 合并互质求余方程 m1x -+ m2y = r2 - r1 先用exgcd求出特 ...

  2. 前端表单序列化为json串,以及构造json数组、json串

    var parm={ username:"zhangsan", age:24, email:"352400260@qq.com" }; console.log( ...

  3. bzoj3940&&bzoj3942 Ac自动机||kpm算法

    方法就是维护一个动态栈 记录栈的每一位匹配到串的哪一位的编号 第一道kmp第二道ac自动机 自己理会 #include<cstdio> #include<cstring> #i ...

  4. 【BZOJ】1726 [Usaco2006 Nov]Roadblocks第二短路

    [算法]最短路(spfa) 次短路 [题解] 正反跑两次SPFA,然后枚举每一条边,如果起点到一个端点的最短路+另一个端点到终点的最短路+长度 ≠ 最短路,则和答案比较,保存最小值. #include ...

  5. python初步学习-python数据类型之number(数值)

    数据类型之 Number python number 数据类型用于存储数值. 数据类型是不容许改变的. 这就意味着如果改变 number 数据类型的值,将重新分配内存空间. python支持四种不同数 ...

  6. 爬虫--BeautifulSoup

    什么是BeautifulSoup? BeautifulSoup支持的一些解析库 基本使用 from bs4 import BeautifulSoup html =""" ...

  7. 20151024_002_C#基础知识(ArrayList,Hashtable,List,Dictionary)

    1:ArrayList 和 Hashtable(哈希表) 1.1:ArrayList ArrayList list = new ArrayList(); list.Add(); list.AddRan ...

  8. Python模块学习 - Functools

    Functools模块 Higher-order functions and operations on callable objects,看这个标题我都是懵逼的,这都是啥啥啥啊,赶紧拿出百度翻译:可 ...

  9. 采用dlopen、dlsym、dlclose加载动态链接库【转】

    转自:http://www.cnblogs.com/Anker/p/3746802.html 1.前言 为了使程序方便扩展,具备通用性,可以采用插件形式.采用异步事件驱动模型,保证主程序逻辑不变,将各 ...

  10. Go语言大神亲述:历七劫方可成为程序员!

    “历劫1”:你坚信你可以用Go来做面向对象编程? 在经历了一次Go应用之旅之后,你可能就会开始思考:“怎么样才能让这种语言更像面向对象的编程语言?”因为你已经习惯了这种编程,你想要制作健壮的代码.想要 ...