多个pdf合并成一个pdf文档

这篇文章介绍了如何使用iText库(com.lowagie.itext)在Java中处理PDF文件,包括读取、合并多个PDF文件并将其保存为一个新的PDF。作者展示了`PdfUtils`类中的关键方法,如`mergePdfFiles`用于合并PDF文件,以及`fileConvertToByteArray`和`mergePdfData`处理文件转换和数据合并。
摘要由CSDN通过智能技术生成

引入依赖

 <dependency>
     <groupId>com.lowagie</groupId>
     <artifactId>itext</artifactId>
     <version>2.1.7</version>
 </dependency>

实现代码

package cn.com.cptc.user.center.util;

import com.google.common.collect.Lists;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.PdfCopy;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfReader;

import java.io.*;
import java.nio.file.Files;
import java.util.List;

/**
 * @Author gxh
 * @Date 2024/2/20 15:19
 * @Description:
 */
public class PdfUtils {


    public static void main(String[] args) throws IOException, DocumentException {
        List<String> files = Lists.newArrayList();
        files.add("E:\\qqq\\420130791424022009057613.pdf");
        files.add("E:\\qqq\\2.pdf");
        files.add("E:\\qqq\\420130791424022009057613.pdf");
        files.add("E:\\qqq\\2.pdf");
        files.add("E:\\qqq\\420130791424022009057613.pdf");
        files.add("E:\\qqq\\2.pdf");
        files.add("E:\\qqq\\420130791424022009057613.pdf");
        files.add("E:\\qqq\\2.pdf");
        files.add("E:\\qqq\\420130791424022009057613.pdf");
        files.add("E:\\qqq\\2.pdf");
        files.add("E:\\qqq\\420130791424022009057613.pdf");
        files.add("E:\\qqq\\2.pdf");
        files.add("E:\\qqq\\420130791424022009057613.pdf");
        files.add("E:\\qqq\\2.pdf");
        files.add("E:\\qqq\\420130791424022009057613.pdf");
        files.add("E:\\qqq\\2.pdf");
        files.add("E:\\qqq\\420130791424022009057613.pdf");
        files.add("E:\\qqq\\2.pdf");
        files.add("E:\\qqq\\420130791424022009057613.pdf");
        files.add("E:\\qqq\\2.pdf");
        files.add("E:\\qqq\\420130791424022009057613.pdf");
        files.add("E:\\qqq\\2.pdf");


        String savepath = "E:\\final.pdf";
        mergePdfFiles(files, savepath);
    }

    /**
     * 合并原pdf为新文件
     *
     * @param files   pdf绝对路径集
     * @param url 新pdf绝对路径
     * @return
     * @throws IOException
     * @throws DocumentException
     */
    public static void mergePdfFiles(List<String> files, String url) throws IOException, DocumentException {
        Document document = new Document(new PdfReader(files.get(0)).getPageSize(1));
        PdfCopy copy = new PdfCopy(document, new FileOutputStream(url));
        document.open();
        for (int i = 0; i < files.size(); i++) {
            PdfReader reader = new PdfReader(files.get(i));
            int n = reader.getNumberOfPages();
            for (int j = 1; j <= n; j++) {
                document.newPage();
                PdfImportedPage page = copy.getImportedPage(reader, j);
                copy.addPage(page);
            }
        }
        document.close();
    }

    /**
     * 把一个文件转化为byte字节数组。
     * @return
     */
    private static byte[] fileConvertToByteArray(File file) {
        byte[] data;
        try (InputStream inputStream = Files.newInputStream(file.toPath());
             BufferedInputStream bis = new BufferedInputStream(inputStream);
             ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
            int len;
            byte[] buffer = new byte[1024];
            while ((len = bis.read(buffer)) != -1) {
                bos.write(buffer, 0, len);
            }

            data = bos.toByteArray();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

        return data;
    }

    /**
     * 将所有数据合并,
     * @param dataList
     * @return
     */
    private static byte[] mergePdfData(List<byte[]> dataList) throws DocumentException, IOException {
        // 新创建一个pdf
        Document document = new Document();
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        PdfCopy pdfCopy = new PdfCopy(document, bos);
        document.open();
        for (int i = 0; i < dataList.size(); i++) {
            byte[] bytes = dataList.get(i);
            PdfReader pdfReader = new PdfReader(bytes);
            int numberOfPages = pdfReader.getNumberOfPages();
            // 一页一页复制
            for (int j = 1; j <= numberOfPages; j++) {
                document.newPage();
                PdfImportedPage importedPage = pdfCopy.getImportedPage(pdfReader, j);
                pdfCopy.addPage(importedPage);
            }
            pdfReader.close();
        }
        document.close();
        byte[] bytes = bos.toByteArray();
        return bytes;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值