先看效果

原pdf文件11页 473kb
转换后变成11个tif文件 共503kb

实现代码

maven依赖

<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>1.8.9</version><scope>compile</scope>
</dependency>
<dependency><groupId>javax.media</groupId><artifactId>jai_imageio</artifactId><version>1.1</version>
</dependency>

实现工具类

import java.awt.image.BufferedImage;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.*;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.metadata.IIOMetadataNode;
import javax.imageio.stream.ImageOutputStream;
import com.sun.media.imageioimpl.plugins.tiff.TIFFImageWriterSpi;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;/*** Pdf2Tif* @Author chenqi* @Date 15:54 2020/8/1**/
public class Pdf2TiffUtil {/** 打印精度设置 图片的像素 */public static final int DPI = 160;public static List<byte[]> pdf2tifList(InputStream inputStream) {List<byte[]> b = new ArrayList<>();try{PDDocument pdf = PDDocument.load(inputStream);BufferedImage[] images = new BufferedImage[pdf.getNumberOfPages()];ByteArrayOutputStream out = new ByteArrayOutputStream(OmsConstants.Number.ONE_MB);for (int i = 0; i < images.length; i++) {PDPage page = (PDPage) pdf.getDocumentCatalog().getAllPages().get(i);BufferedImage image;image = page.convertToImage(BufferedImage.TYPE_BYTE_BINARY, DPI);images[i] = image;TIFFImageWriterSpi tiffWriter = new TIFFImageWriterSpi();ImageWriter writer = tiffWriter.createWriterInstance();ImageWriteParam param = writer.getDefaultWriteParam();ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_ARGB);param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);param.setCompressionType("CCITT T.6");param.setCompressionQuality(1);IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, param);IIOMetadataNode hps = new IIOMetadataNode("HorizontalPixelSize");hps.setAttribute("value", Double.toString(1d / 300d * 25.4d));IIOMetadataNode vps = new IIOMetadataNode("VerticalPixelSize");vps.setAttribute("value", Double.toString(1d / 300d * 25.4d));IIOMetadataNode dim = new IIOMetadataNode("Dimension");dim.appendChild(hps);dim.appendChild(vps);IIOMetadataNode root = new IIOMetadataNode("javax_imageio_1.0");root.appendChild(dim);metadata.mergeTree("javax_imageio_1.0", root);ImageOutputStream ios = ImageIO.createImageOutputStream(out);writer.setOutput(ios);writer.write(metadata, new IIOImage(image, null, metadata), param);out.reset();ios.close();b.add(out.toByteArray());}out.close();pdf.close();return b;} catch (IOException e) {e.printStackTrace();return new ArrayList<>();}}public static void main(String[] args) {File file = new File("D:/PDF/aa.pdf");try {List<byte[]> list = pdf2tifList(new FileInputStream(file));int i = 1;for(byte[] b : list){FileOutputStream ou = new FileOutputStream(new File("D:/PDF/" + i + ".tif"));ou.write(b);ou.flush();i++;}}catch (Exception e){e.printStackTrace();}}}

参考博客:https://www.cnblogs.com/JohnsonLiu/p/11759267.html

实现不容易,也是参考了很多资料,如有帮助,就留言点个赞吧!
另外调试过程中以下这句代码执行时间有点长,如果有知道怎么优化的兄弟,欢迎留言分享讨论。

image = page.convertToImage(BufferedImage.TYPE_BYTE_BINARY, DPI);

java 实现 PDF 转 TIF【黑白版】相关推荐

  1. java实现PDF转tif(图片清晰度高)

    分享一个pdf转换tif的方法.转换后图片格式小!清晰度还很高! <!-- pdf转tif --><dependency><groupId>org.icepdf.o ...

  2. java教程pdf文本文档版

    前言 在高并发下,Java程序的GC问题属于很典型的一类问题,带来的影响往往会被进一步放大.不管是「GC频率过快」还是「GC耗时太长」,由于GC期间都存在Stop The World问题,因此很容易导 ...

  3. kindle版java核心_深入理解java 7 核心技术与最佳实践-成富[6寸pdf mobi epub kindle版].pdf...

    深入理解java 7 核心技术与最佳实践-成富[6寸pdf mobi epub kindle版].pdf 还剩 50页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预 ...

  4. java开发的颠覆者epub,创业颠覆者-陈景畑 翟顺[6寸pdf mobi epub kindle版].pdf

    创业颠覆者-陈景畑 & 翟顺[6寸pdf mobi epub kindle版].pdf 还剩 50页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! ...

  5. Java制作PDF转图片小工具

    背景: 前几日一位朋友突然找我帮忙将PDF转换成图片,我仗义相助,建议他使用福昕阅读器,然而他说转换需要VIP会员,老贵了.我花了半天时间寻找免费会员,结果不出所料没有找到,我一怒之下,便决定亲自动手 ...

  6. java解析pdf获取pdf中内容信息

    java解析pdf获取pdf中内容信息 今日项目中需要将pdf中的数据获取到进行校验数据,于是前往百度翻来覆去找到以下几种办法,做个笔记,方便日后查询. 废话不多说,我要直接上代码装逼了 第一种 使用 ...

  7. 狂刷《Java权威面试指南(阿里版)》,助你一臂之力,事半功倍

    莫慌莫慌,"面试造火箭,工作拧螺丝" 说得不无道理,偶然从朋友那得到的这份Alibaba内部疯传<Java权威面试指南(阿里版)>堪称精品,或可能助你一臂之力,事半功倍 ...

  8. 深入理解Java虚拟机(周志明版)总结—WSYW126

    1.Java的内存区域与内存溢出异常(常见内存溢出错误解决办法): a) Java Heap 溢出:java堆用于存储对象实例,我们只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来避 ...

  9. JAVA的PDF Viewer:Big Faceless PDF Viewer Crack

    PDF Viewer是一个可以显示PDF文档的Swing组件.针对不需要完整 API 的客户,Viewer 可以作为 Applet.应用程序或通过 Java Web Start 安装,或嵌入到 Swi ...

  10. 345本关于java的pdf电子书 [索引]

    所有PDF人肉检测真实可看,都不需要一一购买,一口价9.9合适就下, 统一解压密码: 密码汇总下载链接: https://pan.baidu.com/s/1NFNSYf3Q7VOl45xhIqDtkA ...

最新文章

  1. 自学笔记——Python内置的处理字符串的函数
  2. 告别「灭霸式审稿」,IJCAI-21 的投稿者爽到家!
  3. nginx https反向代理tomcat
  4. 计算矩阵连乘积(动态规划)
  5. pc安装linux内核,PC/104平台嵌入式Linux系统核心定制方法
  6. Cortex-M3-建立堆栈
  7. Android学习之基础知识四-Activity活动7讲(活动的启动模式)
  8. 为什么年龄大了近视还增加_年龄明明一样大,为什么有人长得年轻,有人显老呢?...
  9. 了解java.nio.file.Path – 1
  10. 曦智科技发布最新光子计算处理器PACE
  11. DbHelper数据库通用类使用方法
  12. 快过年了,用JS让你的网页放烟花吧
  13. 历时 7 天,我把一万行 Scala 代码移植到了 Kotlin 上!
  14. Qt之QRoundProgressBar(圆形进度条)
  15. 微博表情 文本与图片对照表
  16. 区块链毕业设计必读论文【2020-5】
  17. 基于Stanford Parser 及OpenNLP Shallow Parser构建句子语法解析树
  18. 央央家政解读:月嫂服务内容和标准
  19. 西红柿炒鸡蛋怎么做(大厨教程 教你炒出饭店的味道)
  20. php 带http的域名,php提取URL中的域名部分

热门文章

  1. EEPROM存储电路(M24C64芯片)
  2. self.button.clicked.connect的用法
  3. echarts绘制分时图(1)-- 接收及处理股票接口数据
  4. 万用表使用心得-测量不准点的地方
  5. 【亲自实践能够下载的谷歌地图切片url地址】谷歌地图数据下载的尝试以及Python爬虫实现
  6. 2018年中国人均GDP接近1万美元,这在全球处于什么样的水平?
  7. 求取scores最近邻的方法之二开始新的实践Chorus
  8. Word插入页码和目录
  9. python自动填写网页数据并提交_python实现问卷星网站的自动填写
  10. 云计算是什么,阿里云提供哪些云服务