软件编程
位置:首页>> 软件编程>> java编程>> java实现截取PDF指定页并进行图片格式转换功能

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

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

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

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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com