java实现截取PDF指定页并进行图片格式转换功能

 更新时间:2019年09月05日 11:19:46   作者:消失的太阳  
这篇文章主要介绍了java实现截取PDF指定页并进行图片格式转换功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

1、引入依赖

<dependency>
  <groupId>org.apache.pdfbox</groupId>
  <artifactId>pdfbox</artifactId>
  <version>2.0.16</version>
</dependency>
<dependency>
  <groupId>org.apache.pdfbox</groupId>
  <artifactId>fontbox</artifactId>
  <version>2.0.16</version>
</dependency>

jar包下载地址:

https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox
https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox

2、实现DEMO

package com.dddpeter.app;
import org.apache.pdfbox.multipdf.Splitter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.List;
import java.util.ListIterator;
public class PDFUtils {
  public static String splitPdf(int pageNum, String source, String dest) {
    File indexFile = new File(source);
    File outFile = new File(dest);
    PDDocument document = null;
    try {
      document = PDDocument.load(indexFile);
      // document.getNumberOfPages();
      Splitter splitter = new Splitter();
      splitter.setStartPage(pageNum);
      splitter.setEndPage(pageNum);
      List<PDDocument> pages = splitter.split(document);
      ListIterator<PDDocument> iterator = pages.listIterator();
      while (iterator.hasNext()) {
        PDDocument pd = iterator.next();
        if (outFile.exists()) {
          outFile.delete();
        }
        pd.save(outFile);
        pd.close();
        if (outFile.exists()) {
          return outFile.getPath();
        }
      }
      document.close();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return null;
  }
  public static void pdfFileToImage(File pdffile,String targetPath){
    try {
      FileInputStream instream = new FileInputStream(pdffile);
      InputStream byteInputStream=null;
      try {
        PDDocument doc = PDDocument.load(instream);
        PDFRenderer renderer = new PDFRenderer(doc);
        int pageCount = doc.getNumberOfPages();
        if (pageCount > 0) {
          BufferedImage image = renderer.renderImage(0, 4.0f);
          image.flush();
          ByteArrayOutputStream bs = new ByteArrayOutputStream();
          ImageOutputStream imOut;
          imOut = ImageIO.createImageOutputStream(bs);
          ImageIO.write(image, "png", imOut);
          byteInputStream = new ByteArrayInputStream(bs.toByteArray());
          byteInputStream.close();
        }
        doc.close();
      }
      catch (IOException e) {
        e.printStackTrace();
      }
      File uploadFile = new File(targetPath);
      FileOutputStream fops;
      fops = new FileOutputStream(uploadFile);
      fops.write(readInputStream(byteInputStream));
      fops.flush();
      fops.close();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
  public static byte[] readInputStream(InputStream inStream) throws Exception {
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len = 0;
    while ((len = inStream.read(buffer)) != -1) {
      outStream.write(buffer, 0, len);
    }
    inStream.close();
    return outStream.toByteArray();
  }
  public static void main(String[] args) {
    String path = splitPdf(4,"D:\\data\\11.pdf","D:\\data\\out11.pdf");
    File file =new File(path);
    //上传的是png格式的图片结尾
    String targetfile="D:\\data\\out11.png";
    pdfFileToImage(file,targetfile);
  }
}

总结

以上所述是小编给大家介绍的java实现截取PDF指定页并进行图片格式转换功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • Java中文件的操作与输入输出流举例详解

    Java中文件的操作与输入输出流举例详解

    Java语言的输入输出功能是十分强大而灵活的,下面这篇文章主要给大家介绍了关于Java中文件的操作与输入输出流的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • 解析Java图形化编程中的文本框和文本区

    解析Java图形化编程中的文本框和文本区

    这篇文章主要介绍了Java图形化编程中的文本框和文本区,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • JAVA如何调用Shell脚本

    JAVA如何调用Shell脚本

    本篇文章主要介绍了JAVA如何调用Shell脚本,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java通过正则表达式获取字符串中数字的方法示例

    Java通过正则表达式获取字符串中数字的方法示例

    最近工作中遇到了一个需求,需要利用java获取字符串中的数字,尝试几种方法后发现利用正则表达式实现最为方法,下面这篇文章就主要介绍了Java通过正则表达式获取字符串中数字的方法,文中给出了详细的示例代码,需要的朋友可以参考下。
    2017-03-03
  • Java Servlet3.0异步处理问题

    Java Servlet3.0异步处理问题

    这篇文章主要介绍了Java中Servlet3.0异步处理的原理以及遇到的问题分析,需要的朋友参考一下。
    2017-12-12
  • Maven一键部署Springboot到Docker仓库为自动化做准备(推荐)

    Maven一键部署Springboot到Docker仓库为自动化做准备(推荐)

    这篇文章主要介绍了Maven一键部署Springboot到Docker仓库,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • springboot 定时任务@Scheduled实现解析

    springboot 定时任务@Scheduled实现解析

    这篇文章主要介绍了springboot 定时任务@Scheduled实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Java绘制迷宫动画并显示的示例代码

    Java绘制迷宫动画并显示的示例代码

    这篇文章主要为大家详细介绍了如何利用Java语言实现绘制迷宫动画并显示,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以参考一下
    2022-08-08
  • Java的HashMap源码解析

    Java的HashMap源码解析

    这篇文章主要介绍了Java的HashMap源码解析,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对是一个Node,后台是用一个Node数组来存放数据,这个Node数组就是HashMap的主干,需要的朋友可以参考下
    2023-11-11
  • spring cloud config分布式配置中心的高可用问题

    spring cloud config分布式配置中心的高可用问题

    本文给大家介绍spring cloud config分布式配置中心的高可用问题,通过整合Eureka来实现配置中心的高可用,需要的朋友参考下本文
    2018-01-01

最新评论