PDF合并代码,从此摆脱pdf合并付费!!!

昨天晚上想要合并几个pdf文件,首选的wps在这个小功能上收费,无奈又下了其他几个打着“免费”招牌的文档处理软件,结果打开全是要求付费。感觉被戏耍了,这玩意儿又不难,于是就随便写了个简单的pdf工具类合并文件。希望能够帮到有需要的人。

package com.liu.blog.utils;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfReader;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @Description PDFUtils
 * @Author 小草熊
 * @Date 2023/9/26 9:06
 */
public class PDFUtils {
    /**
     * 获取单个文件夹下的全部pdf文件绝对路径
     * @param folderPath
     * @return
     */
    public static List<String> getAllFilePathsInOneFolder(String folderPath) {
        File folder = new File(folderPath);
        List<String> filePaths = new ArrayList<>();

        if (folder.exists() && folder.isDirectory()) {
            File[] files = folder.listFiles();
            if (files != null) {
                //Arrays.sort(files); // 按照原本的排序对文件进行排序
                for (File file : files) {
                    if (file.isFile()&&file.getName().toLowerCase().endsWith(".pdf")){
                        filePaths.add(file.getAbsolutePath());

                    }
                }
            }
        }

        return filePaths;
    }

    /**
     * 根据文件开头魔法值判断是不是pdf文件
     * @param filePath
     * @return
     */
    public static boolean isPDFFile(String filePath) {
        try (FileInputStream inputStream = new FileInputStream(filePath)) {
            byte[] header = new byte[5]; // 读取文件的开头5个字节
            int bytesRead = inputStream.read(header);

            if (bytesRead >= 5) {
                String headerString = new String(header);
                return headerString.startsWith("%PDF-");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return false;
    }

    /**
     * 根据文件名称判断是不是pdf文件
     * @param fileName
     * @return
     */
    public static boolean isPDFFileName(String fileName) {
        // 将文件名转换为小写并检查是否以 ".pdf" 结尾
        return fileName.toLowerCase().endsWith(".pdf");
    }

    /**
     * 获得一个文件夹下全部pdf文件绝对路径
     * @param folderPath
     * @return
     */
    public static List<String> getAllFilePaths(String folderPath) {
        List<String> filePaths = new ArrayList<>();
        getAllFilesInFolder(new File(folderPath), filePaths);
        return filePaths;
    }

    private static void getAllFilesInFolder(File folder, List<String> filePaths) {
        if (folder.exists() && folder.isDirectory()) {
            File[] files = folder.listFiles();
            if (files != null) {
                Arrays.sort(files); // 按照原本的排序对文件进行排序
                for (File file : files) {
                    if (file.isFile()) {
                        filePaths.add(file.getAbsolutePath());
                    } else if (file.isDirectory()) {
                        getAllFilesInFolder(file, filePaths); // 递归处理子文件夹
                    }
                }
            }
        }
    }

    public static void mergePdfFiles(List<String> pdfFiles, String outputFilePath) {
        Document document = new Document();

        try {
            PdfCopy copy = new PdfCopy(document, new FileOutputStream(outputFilePath));
            document.open();

            for (String pdfFile : pdfFiles) {
                PdfReader reader = new PdfReader(pdfFile);
                int numPages = reader.getNumberOfPages();

                for (int i = 1; i <= numPages; i++) {
                    copy.addPage(copy.getImportedPage(reader, i));
                }

                reader.close();
            }

            copy.close();
            document.close();

            System.out.println("PDF files merged successfully!");
        } catch (IOException | DocumentException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        String input="E:\\lj\\baidudownload\\操作系统";
        List<String> allFilePaths = getAllFilePaths(input);
        String output=input+"\\merge.pdf";
        mergePdfFiles(allFilePaths,output);

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PDF合并工具是一种非常实用的工具,它可以将多个PDF文件合并成一个文件。这个工具在学习、工作和生活中都有广泛的应用。在学习中,我们可能需要将很多篇论文、资料和笔记合并成一个文件,这样便于管理和查阅。在工作中,我们可能需要将很多报表、合同、说明书和邮件合并成一个文件,这样可以方便快捷地传输和共享。在生活中,我们可能需要将很多照片、信件、账单和证件合并成一个文件,这样可以减少文件的数量和存储空间。 CSDN是一个IT技术社区,其中有很多优秀的PDF合并工具下载。这些工具都有各自的特点和功能,可以满足不同用户的需求。有些工具可以简单易用,有些工具可以支持高级操作,有些工具可以免费使用,有些工具需要付费购买。用户可以根据自己的需求选择适合自己的PDF合并工具。 下载PDF合并工具需要注意以下几点。首先,下载工具的时候应该选择正规的、可信的下载网站,以防止下载到病毒或恶意软件。其次,下载工具的时候应该了解一下软件的使用说明和注意事项,以免不必要的麻烦。最后,下载工具之后,应该及时更新版本,以获得更好的使用体验和安全保障。 总之,PDF合并工具是一种非常实用的工具,可以极大地提高工作和学习效率。CSDN提供了很多优秀的PDF合并工具下载,用户可以根据自己的需求和喜好进行选择和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值