pdf转tiff

概述

基于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中心仓库中找不到,现提供统一的压缩文件:依赖下载。

实现

类图

class-diagram

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

转载于:https://www.cnblogs.com/ywjy/p/5045710.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS之提示Interface type cannot be statically allocated

1、问题 command R运行提示如下错误 Interface type cannot be statically allocated 2、解决办法 是代码写错了 User user [[User alloc] init]; 改成如下 User *user [[User alloc] init];

配置PHP启动Apache服务报错

为什么80%的码农都做不了架构师&#xff1f;>>> 在新的服务器&#xff08;centos 6.3&#xff09;编译安装完php-5.4.8&#xff0c;再配置好php.ini和httpd.conf后&#xff0c;启动apache-2.4.3的时候&#xff0c;命令执行/usr/local/apache2/bin/apachectl start时…

C#判断闰年函数及举例

//语法&#xff1a; public static bool IsLeapYear(int year) //用法举例&#xff1a; using System;public class IsLeapYear {public static void Main(){for (int year 1994; year < 2014; year){if (DateTime.IsLeapYear(year)){Console.WriteLine("{0} is a lea…

嵌入式WiFi芯片价格战已经打响 MCU企业该醒悟了

在物联网万物互联的驱动下&#xff0c;无可厚非&#xff0c;嵌入式WiFi芯片市场成为了“引爆点”&#xff0c;预计2016年的总出货量将达到1亿颗。面对如此巨大的“诱惑”&#xff0c;国内外WiFi芯片企业自然干劲十足&#xff0c;本想好好大干一场。万万没想到&#xff0c;WiFi芯…

linux系统下图像处理开发板,Linux系统入门教程:五大图像处理软件

发文章时&#xff0c;总免不了要用图片说话。经过长时间的磨合&#xff0c;在Linux桌面系统下有几款图片处理软件我已经用得比较顺手了。这几款软件在Linux世界使用广泛&#xff0c;各个Linux发行版的软件仓库中都有自带的安装包&#xff0c;而且这几款软件运行稳定、界面美观。…

python打开浏览器-python调用浏览器,打开一个网址

webbrowser.open(url, new0, autoraiseTrue) webbrowser.open_new(url) webbrowser.open_new_tab(url) 我们需要了解webbrowser.open()方法&#xff1a; webbrowser.open(url, new0, autoraiseTrue) 在系统的默认浏览器中访问url地址&#xff0c;如果new0,url会在同一个 浏览器…

BZOJ1001 狼抓兔子 终于过了!

时间来不及了&#xff0c;先贴代码吧&#xff01;有时间再写。 好苦逼啊&#xff0c;WA了若干次&#xff0c;还有一次RE&#xff0c;一次TLE。 虽然主要运用的算法和资料都由师兄提供了。还是太弱了&#xff0c;太天真了。 首先&#xff0c;数据范围就WA了&#xff0c;RE了&…

如何使用GeneralUpdte构建客户端自动升级功能

一、概要本篇文章将向各位小伙伴介绍GeneralUpdate组件的使用&#xff0c;帮助第一次接触开发者快速上手应用在自己或企业项目中。如果本篇文章对您有帮助&#xff0c;希望帮忙点一下star。感谢各位开发者的支持。帮助文档讲解视频&#xff1a;https://www.bilibili.com/video/…

IOS之学习笔记五(合成存取方法)

一、主要属性介绍 1、自动合成setter、getter方法 1)、接口部分property指定属性 2)、实现部分synthesize 如果 syntheszie widows _windows 这里成员变量名是_windows,而不是windows 2、atomic(nonatomic) 这里主要是指存取方法为原子操作&#xff0c;实现线程安全&a…

C# dataGridView隔行显示不同颜色

for (int i 0; i < dataGridView_expert.Rows.Count; i)if(i%20)dataGridView_expert.Rows[i].DefaultCellStyle.BackColor Color.Red;

30道四则运算题目---课堂作业--软件工程c++

问题&#xff1a;设计一程序&#xff0c;给二年级小学生随机产生四则运算题目。 一、设计思考问题&#xff1a; 1.四则运算需要俩个运算数和一个运算符。 2.如何产生随机数? 3.如何实现随机产生四则运算&#xff1f; 4.题目是否符合小学生学习范围&#xff1f;&#xff08;减法…

javascript 函数属性prototype(转)

在JavaScript中并没有类的概念&#xff0c;但javascript中的确可以实现重载&#xff0c;多态&#xff0c;继承。这些实现其实方法都可以用JavaScript中的引用和变量作用域结合prototype来解释。 1、prototype 在JavaScript中并没有类的概念&#xff0c;但JavaScript中的确可以实…

linux下python版本升级,linux下升级python版本

linux下升级python版本下载python最新版本2.7.13并编译安装wget https://www.python.org/ftp/python/2.7.12/Python-2.7.13.tar.xzxz -d Python-2.7.13.tar.xztar xf Python-2.7.13.tarcd Python-2.7.13./configure --prefix/usr/local/python-2.7.13makemake installPython-2.…

java离职交接文档_财务人员工作交接你知道么?没处理好不止将来风险大还可能违法...

今天给大家分享一下在工作中&#xff0c;财务人员应该怎么保护自己&#xff1f;1.虚假报销那些事儿在企业内部报销程序中&#xff0c;部分管理人员往往安排下属或助理经办报销程序&#xff0c;所有的费用申请、报销单据的填写均系下属完成&#xff0c;而一旦虚假报销案件浮出水…

iOS方法类:CGAffineTransform

iOS方法类&#xff1a;CGAffineTransform的使用大概 CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性&#xff0c;控制视图的缩放、旋转和平移操作&#xff1a; 另称放射变换矩阵&#xff0c;可参照线性代数的矩阵实现方式0.0 这里附上的CGAffineTran…

SQL Server 数据库没有有效所有者的三种解决办法

问题描述: 开发的过程中,操作系统出了问题,决定重装系统。但是没有将SQL Server中的数据库文件分离出来,直接将系统格了。在新系统数据库中附加了数据库文件,一切还算正常,但当打开数据库关系图的时候出现了问题,如下图所示: 针对以上问题,网上有很多解决办法,但是由…

IOS之学习笔记六(可变形参)

1、实现函数的可变形参 1)、va_list:这是一个可变类型&#xff0c;用于定义指向可变参数列表的指针变量 2)、va_start:让argList指向一个可变参数列表的第一个参数 3&#xff09;、提取argList当前指针指向的参数&#xff0c;并且将指针指向下一个参数 4&#xff09;、释放a…

Javascript:原型模式类继承

原型模式每个函数&#xff08;准确说不是类、对象&#xff09;都有一个prototype属性&#xff0c;这个属性是一个指针&#xff0c;指向一个对象。使用原型对象的好处是可以让所有对象实例共享它包含的属性和方法。1.原型对象&#xff08;1&#xff09;当创建一个新函数&#xf…

C# 学习经验分享

NET 20 周年的学习挑战赛刚结束了第⼀阶段&#xff0c;不知道各位⼩伙伴参加了没有&#xff1f;有⼈问现在学习 C# 是不是有点过时&#xff1f;也有⼈问现在C# 能做什么&#xff1f;更有⼈问学习 C# 能否找到⼯作 &#xff1f;或者你从不同的专家&#xff0c;不同的从业者可以有…

ARM再出手,软银攀登新高山

当下秋意渐浓&#xff0c;那场贯穿整个夏季&#xff0c;引起舆论热潮的软银收购英国芯片巨头ARM案&#xff0c;总算于本月初尘埃落定。 然而时过未半月&#xff0c;易主后的ARM 9月20日宣布推出最新处理器Cortex-R52&#xff0c;官方强调这款具备先进安全特性的实时处理器将主要…