分享一个pdf转换tif的方法。转换后图片格式小!清晰度还很高!

<!-- pdf转tif --><dependency><groupId>org.icepdf.os</groupId><artifactId>icepdf-core</artifactId><version>6.2.2</version></dependency><dependency><groupId>org.icepdf.os</groupId><artifactId>jai_core</artifactId><version>1.1.3</version></dependency><dependency><groupId>org.icepdf.os</groupId><artifactId>icepdf-extra</artifactId><version>1.0</version></dependency><dependency><groupId>org.icepdf.os</groupId><artifactId>icepdf-pro</artifactId><version>1.0</version></dependency><dependency><groupId>org.icepdf.os</groupId><artifactId>icepdf-pro-intl</artifactId><version>1.0</version></dependency><dependency><groupId>org.icepdf.os</groupId><artifactId>icepdf-viewer</artifactId><version>1.0</version></dependency><dependency><groupId>com.github.jai-codec</groupId><artifactId>jai-codec</artifactId><version>1.1.3</version></dependency><dependency><groupId>com.github.jai-imageio</groupId><artifactId>jai_imageio</artifactId><version>1.1.1</version></dependency>

import com.sun.media.imageio.plugins.tiff.TIFFTag;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageEncoder;
import com.sun.media.jai.codec.TIFFEncodeParam;
import com.sun.media.jai.codec.TIFFField;
import lombok.extern.slf4j.Slf4j;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Slf4j
public class PdfUtil {public static void main(String[] args) {converPdfToTiff("F:\\xxx.pdf", "F:\\", "xxx", 300f);}
/*** 转换指定pdf文件为图片到指定的文件夹目录下** @param pdfFilePath 需要转换的pdf文件路径* @param imgPushPath 需要存放转换后的图片文件目录路径* @param name        文件名* @param imgScaling  图片缩放的比例* @return 转换后图片的文件名集合*/public static Map<String, Object> converPdfToTiff(String pdfFilePath, String imgPushPath, String name, float imgScaling) {//定义Document,用于转换图片Document document2 = new Document();//用来保存当前页码的页码Map<String, Object> map = new HashMap<String, Object>();String output036Back = "";List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();try {document2.setFile(pdfFilePath);} catch (Exception ex) {log.error(ex.getMessage(), ex);}float rotation = 0f;int maxPages = document2.getNumberOfPages();//System.out.println("maxPages: "+maxPages);// 循环把每页的数据转换成对应的图片for (int i = 0; i < document2.getNumberOfPages(); i++) {BufferedImage image2 = null;try {image2 = (BufferedImage)document2.getPageImage(i, GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, rotation, 9.0f);} catch (Exception e1) {log.error(e1.getMessage(), e1);}int w = 1664, h = 2342;image2 = setResizedByImg(image2, 2467, 3489);int j = 0;String output = "";String output036 = "";try {j = i + 1;//生成的tif图片的全路径output = imgPushPath + File.separator + name + "_" + j + ".tif";String fileName =  name + "_" + j + ".tif";Map<String,Object> map1 = new HashMap<>();map1.put("output",output);map1.put("page",j);map1.put("fileName",fileName);list.add(map1);if (!new File(imgPushPath).exists()) {new File(imgPushPath).mkdirs();}BufferedImage bufferedImage = new BufferedImage(image2.getWidth(null), image2.getHeight(null), 12);bufferedImage.getGraphics().drawImage(image2, 0, 0, null);OutputStream os = new FileOutputStream(output);TIFFEncodeParam param = new TIFFEncodeParam();param.setCompression(TIFFEncodeParam.COMPRESSION_GROUP4);// 设置压缩方式int dpi = 300;TIFFField[] extras = new TIFFField[4];extras[0] = new TIFFField(262, TIFFTag.TIFF_SHORT, 1, (Object) new short[]{0});extras[1] = new TIFFField(282, TIFFTag.TIFF_RATIONAL, 1, (Object) new long[][]{{(long) dpi, 1}, {0, 0}});extras[2] = new TIFFField(283, TIFFTag.TIFF_RATIONAL, 1, (Object) new long[][]{{(long) dpi, 1}, {0, 0}});extras[3] = new TIFFField(296, TIFFTag.TIFF_SHORT, 1, (Object) new char[]{0});param.setExtraFields(extras);ImageEncoder enc = ImageCodec.createImageEncoder("TIFF", os, param);enc.encode(bufferedImage);os.close();image2.flush();} catch (IOException e) {log.error(e.getMessage(), e);}image2.flush();}// 清理document资源document2.dispose();map.put("pageCount", maxPages);map.put("list", list);return map;}static BufferedImage setResizedByImg(Image originalImage, int scaledWidth, int scaledHeight) {BufferedImage scaledBI = new BufferedImage(scaledWidth, scaledHeight, BufferedImage.TYPE_INT_RGB);Graphics2D g = scaledBI.createGraphics();g.setComposite(AlphaComposite.Src);g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null);g.dispose();return scaledBI;}}

使用的时候出现了转换后字体乱码问题,更新jar包版本后解决。

java实现PDF转tif(图片清晰度高)相关推荐

  1. Java实现pdf文件转图片

    Java实现pdf文件转图片 文章顺序是按照测试类- -Service- -Service实现类- -工具类- - POM依赖. test测试类里 pdfPath:存放pdf源文件的地方 imgflo ...

  2. java为PDF添加水印,图片水印和文字水印

    java为PDF添加水印,文字水印和图片水印 一个需求,下载pdf.word.excel文件时要带有水印,要求铺满.先分开,先介绍为PDF文件添加文字水印和图片水印. 所需jar包:itext-2.0 ...

  3. Java 设置PDF平铺图片背景(水印)

    一.概述及环境准备 本文介绍使用免费版PDF库-Free Spire.PDF for Java加载图片来设置成PDF平铺图片背景的效果,也可以作为平铺图片水印来使用:编辑代码前,需要先导入jar文件, ...

  4. 怎么从pdf中提取图片?高清大图提取

    在网上下载的一些图片有的就是PDF格式的,而且里边还有文字,那么我们怎么从pdf中提取图片呢?别着急,慢慢来. 准备下载好的PDF文件数个.迅捷PDF转换器 步骤如下: 第一步:打开迅捷PDF转换器 ...

  5. Java实现PDF文件转图片(支持单页和多页)

    目录 一.背景 二.maven环境 2.1.依赖 2.2.插件 三.PDF工具类 四.实践 4.1.单页PDF形式的发票转为图片 4.2.多页PDF文档转为图片 结语 一.背景   很多小伙伴们不知道 ...

  6. java 获取文件大小_利用百度AI OCR图片识别,Java实现PDF中的图片转换成文字

    序言:我们在读一些PDF版书籍的时候,如果PDF中不是图片,做起读书笔记的还好:如果PDF中的是图片的话,根本无法编辑,做起笔记来,还是很痛苦的.我是遇到过了.我们搞技术的,当然得自己学着解决现在的痛 ...

  7. java获取pdf文件首页图片,用来当做封面

    目录 1.Maven依赖 2.代码 3.执行结果 4.图片效果 1.Maven依赖 <dependency><groupId>org.apache.pdfbox</gro ...

  8. java 生成pdf文件,添加图片

    所需要的包: 1.  iText    下载地址:  http://nchc.dl.sourceforge.net/sourceforge/itext/itext-2.0.3.jar 2.  iTex ...

  9. 如何用java给PDF添加一个图片水印?

    以下代码需要添加jar包: itextpdf-5.3.2.jar import java.io.File; import java.io.FileOutputStream; import com.it ...

最新文章

  1. Windows Mobile 7 梦幻之旅系列1之- What’s New?
  2. 016_循环变量内建函数
  3. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1068:与指定数字相同的数的个数
  4. idea单行注释对齐修改Settings - Editor - Code Style-Code Generation,取消comment code的勾选
  5. 23种设计模式简介_设计模式简介
  6. Qt 图形特效(Graphics Effect)介绍
  7. [再寄小读者之数学篇](2014-12-24 乘积型不等式)
  8. PHP_递归实现无限级分类
  9. vue获取input焦点事件_vue获取input焦点,弹框后自动获取input焦点
  10. 全球首个航天大模型问世,文心秒补《富春山居图》,这是百度普惠AI的恒心...
  11. 3d max 快捷键
  12. eclipse 修改为黑色主题,并且功能比默认的方便
  13. Flutter Opacity 不透明度
  14. rss opml_分享我的OPML,所有人都在做
  15. 复古冰雪传奇H5游戏详细图文架设教程
  16. 微信小程序网易云音乐获取视频列表数据(需要登录获取携带cookie)
  17. SpringBoot-短信发送
  18. 使用计算机时,突然断电,存储在下列设备中的信息将丢失的是,下列存储设备中断电后其保存的信息会丢失的是哪一项...
  19. 【Linux】你一定要知道的31种进程间信号
  20. Android 4.2官方文档chm格式下载

热门文章

  1. 【自然语言处理】【数据增强】PromDA:应用于低资源NLU任务的、基于prompt的数据增强方法
  2. 微小区版v11.2.3 小区 物业 智慧
  3. 怎么查看linux系统下数据库的进程数,如何查看sybase数据库运行情况
  4. Dialog(对话框窗口)
  5. SWMM从入门到实践教程 01 SWMM软件介绍
  6. 从学习php到可以独立做网站需要多久,第一课 前言 学PHP就是为了做网站
  7. 【QT】自定义日历弹窗
  8. Trafodion ROLLUP函数
  9. Log4j2源码解读——删除过期文件
  10. jquery用ajax提交表单