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

作者:消失的太阳 时间:2023-08-24 02:58:56 

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指定页并进行图片格式转换功能,希望对大家有所帮助

来源:https://www.cnblogs.com/xsdty/p/11463439.html

标签:java,截取,PDF,指定页,图片,格式,转换
0
投稿

猜你喜欢

  • 基于Android SDK-在64位Linux中使用需要注意的问题

    2022-03-26 16:49:13
  • Mybatis 开发注解快速入门

    2021-12-01 16:03:36
  • MP(MyBatis-Plus)实现乐观锁更新功能的示例代码

    2022-10-27 15:41:24
  • 浅谈java中String与StringBuffer的不同

    2021-11-24 11:54:12
  • Spring Boot 集成Mybatis实现主从(多数据源)分离方案示例

    2023-08-10 07:43:21
  • c#基础知识---委托,匿名函数,lambda

    2023-06-12 18:18:07
  • android长截屏原理及实现代码

    2021-11-13 05:55:50
  • java 面试题闰年判断详解及实例

    2023-11-27 19:09:01
  • 使用C#创建Windows服务的实例代码

    2022-07-30 05:58:48
  • Android入门之AlertDialog用法实例分析

    2023-12-16 02:27:02
  • C++中左值和右值的区别详解

    2021-09-11 00:07:42
  • Java常用流程控制语句实现原理解析

    2023-11-08 14:11:34
  • Android 如何实现动态申请权限

    2023-07-30 00:51:31
  • Maven分模块开发执行指令失败的问题

    2021-07-10 19:00:15
  • java实现图片缩放、旋转和马赛克化

    2021-07-23 03:04:54
  • 详解JAVA之运算符

    2023-09-05 13:22:46
  • java合并多个文件的实例代码

    2023-07-28 12:56:02
  • java 实现迷宫回溯算法示例详解

    2023-12-14 23:52:26
  • Kotlin数据容器深入讲解

    2022-03-28 05:19:34
  • java 对象输入输出流读写文件的操作实例

    2021-06-13 15:24:30
  • asp之家 软件编程 m.aspxhome.com