JAVA实现PDF合并拆分代码工具类

Posted 洛阳泰山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA实现PDF合并拆分代码工具类相关的知识,希望对你有一定的参考价值。

前言

 网上好多操作pdf的工具大部分都收费,有时候就想简单试用下分割,更改一下文件或者图片,都要收费,于是尝试自己写代码是实现这些需求,下面的代码实现了市场上针对pdf 收费的两大功能买点 ,pdf文件的分离和合并。后续将实现更多功能。。。

 

教程

引入第三方jar依赖

	<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
		<dependency>
			<groupId>org.apache.pdfbox</groupId>
			<artifactId>pdfbox</artifactId>
			<version>3.0.0-RC1</version>
		</dependency>

 核心代码实现

    该代码实现,指定某页,两段式分离,也可以指定起始页分离,指定起始页后,按页数分类。多个pdf文件合并成一个pdf文件功能。 

package com.tarzan.reptile.demo;

import org.apache.pdfbox.Loader;
import org.apache.pdfbox.multipdf.PDFMergerUtility;
import org.apache.pdfbox.multipdf.Splitter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.assertj.core.util.Lists;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

public class PDFHelper {

    public static void main(String[] args) {
        separate(new File("C:/Users/liuya/Desktop/pdf//my_pdf.pdf"),5);
        File file1=new File("C:/Users/liuya/Desktop/pdf//my_pdf1~5.pdf");
        File file2=new File("C:/Users/liuya/Desktop/pdf//my_pdf6~770.pdf");
        List<File> files= Lists.newArrayList(file1, file2);
        merge(files,"C:/Users/liuya/Desktop/pdf//my_pdfnew.pdf");
    }



    public static boolean separate(File file, int page){
        try {
            PDDocument document = Loader.loadPDF(file);
            int pages=  document.getNumberOfPages();
            if(pages>page){
                separate(file,1,page);
                return separate(file,page+1,pages);
            }
        } catch (IOException e) {
            return false;
        }
        return false;
    }
    public static boolean separate(File file,int startPage,int endPage){
        return separate(file,endPage-startPage+1,startPage,endPage);
    }
    public static boolean separate(File file,int page,int startPage,int endPage){
        try {
            //加载pdf文件
            PDDocument document = Loader.loadPDF(file);
            //初始化分离器
            Splitter splitter = new Splitter();
            splitter.setStartPage(startPage);
            splitter.setSplitAtPage(page);
            splitter.setEndPage(endPage);
            //分离后文件列表
            List<PDDocument> Pages = splitter.split(document);
            //创建遍历器
            Iterator<PDDocument> iterator = Pages.listIterator();
            //保存分离后的文件
            int i = 1;
            while (iterator.hasNext()) {
                PDDocument pd = iterator.next();
                String folderPath= file.getParent();
                String fileName=file.getName().substring(0,file.getName().lastIndexOf("."));
                int start=startPage+(i-1)*page;
                int end=i*page>endPage?i*page:endPage;
                pd.save(folderPath+File.separator+fileName+(start+"~"+end)+".pdf");
            }
            System.out.println("pdf分离完毕");
            document.close();
            return true;
        }catch (Exception e){
            return false;
        }
    }

    public static boolean merge(List<File> files,String path){
        PDFMergerUtility merger = new PDFMergerUtility();
        //设置合并文件地址
        merger.setDestinationFileName(path);
        files.forEach(f->{
            try {
                merger.addSource(f);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        });
        try {
        //合并文件
        merger.mergeDocuments(null);
        System.out.println("合并完成");
        } catch (IOException e) {
            return  false;
        }
        return true;
    }

}

实验结果

 

以上是关于JAVA实现PDF合并拆分代码工具类的主要内容,如果未能解决你的问题,请参考以下文章

Java 合并拆分PDF文档

Java 合并拆分PDF文档

Java 合并拆分PDF文档

完整的文件切片和合并java实现代码

Java实现合并排序(归并)详细代码

[收藏]总有一天会用上的PDF合并及PDF拆分方法