代码先锋网 代码片段及技术文章聚合

ITEXT7 实现 PDF文档的合并与拆分

技术标签: 工具类  PDF  itext7  java

1. 将2个pdf 文档合并成一个

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-core</artifactId>
    <version>7.1.16</version>
    <type>pom</type>
</dependency>
public class CE06E04Combine {
    private static final String FILE_NAME1 = "src/main/resources/pdf/A.pdf";
    private static final String FILE_NAME2 = "src/main/resources/pdf/B.pdf";
    private static final String DEST = "results/chapter06/AB.pdf";

    public static void main(String[] args) throws IOException {
        CE06E04Combine ce06E04Combine = new CE06E04Combine();
        ce06E04Combine.combinePDF(FILE_NAME1, FILE_NAME2,DEST);
        //ce06E04Combine.combinePDF(FILE_NAME1, FILE_NAME2);
    }

    /**
     * 合并2个文档
     * @param fileName1
     * @param fileName2
     * @return
     */
    private void combinePDF(String fileName1,String fileName2){
        String desFileName = new File(fileName1).getParentFile().getAbsolutePath()+"/" + UUID.randomUUID()+".pdf";
        combinePDF(fileName1,fileName2,desFileName);
    }
    private void combinePDF(String fileName1, String fileName2, String desFileName)  {
        PdfDocument pdf = null;
        try {
            pdf = new PdfDocument(new PdfWriter(desFileName));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        //定义合并文档
        PdfMerger merger = new PdfMerger(pdf);
        //添加第一个文档
        PdfDocument firstSourcePdf = null;
        try {
            firstSourcePdf = new PdfDocument(new PdfReader(fileName1));
        } catch (IOException e) {
            e.printStackTrace();
        }
        merger.merge(firstSourcePdf, 1, firstSourcePdf.getNumberOfPages());
        //添加第二个文档
        PdfDocument secondSourcePdf = null;
        try {
            secondSourcePdf = new PdfDocument(new PdfReader(fileName2));
        } catch (IOException e) {
            e.printStackTrace();
        }

        merger.merge(secondSourcePdf, 1, secondSourcePdf.getNumberOfPages());

        // 合并并关闭
        merger.close();
        firstSourcePdf.close();
        secondSourcePdf.close();
        pdf.close();
    }
}

2. 分割文件

public class CE06E04Spliter {
    //要分割的文件
    private static final String FILE_NAME = "src/main/resources/pdf/A.pdf";
    //分割文件存放的位置
    private static final String DEST = "results/chapter06/";

    public static void main(String[] args) throws IOException {
        CE06E04Spliter ce06E04Spliter = new CE06E04Spliter();
       // ce06E04Spliter.pdfSplitter(FILE_NAME1,10,DEST);
        //ce06E04Spliter.pdfSplitter(FILE_NAME,10);
        ce06E04Spliter.pdfSplitter(FILE_NAME,1,8);
    }

    /**
     * 在指定目录等分pdf
     * @param fileName  要分割的文档
     * @param pageNum   分割尺寸
     * @param desDir    分割后存储路径
     * @throws IOException
     */
    private void pdfSplitter(String fileName,Integer pageNum,String desDir) throws IOException {
        PdfReader pdfReader = new PdfReader(fileName);
        PdfDocument pdf = new PdfDocument(pdfReader);
        String name;
        PdfWriter pdfWriter=null;
        PdfDocument pdfWriterDoc = null;
        for (int i = 1; i <= pdf.getNumberOfPages() ; i +=  pageNum) {
            name = desDir+"/"+i+".pdf";
            pdfWriter = new PdfWriter(name);
            pdfWriterDoc = new PdfDocument(pdfWriter);
            int start = i;
            int end = Math.min((start + pageNum-1), pdf.getNumberOfPages());
            //从页数第一页开始,
            pdf.copyPagesTo(start,end,pdfWriterDoc);
        }
        //关闭
        pdfWriterDoc.close();
        pdfWriter.close();
        pdf.close();
        pdfReader.close();
    }

    /**
     * 分割文档,分割后文仔默认存储在原来的文档路径下。
     * @param fileName
     * @param pageNum
     * @throws IOException
     */
    private void pdfSplitter(String  fileName,Integer pageNum) throws IOException {
        String desDir = new File(fileName).getParentFile().getAbsolutePath();
        pdfSplitter(fileName,pageNum,desDir);
    }

    /**
     * 返回自定义片段大小的文件,UUID名称命名。
     * @param fileName
     * @param startPage
     * @param endPage
     * @throws IOException
     */
    public void pdfSplitter(String fileName,int startPage, int endPage) throws IOException {
        //源文档
        PdfReader pdfReader = new PdfReader(fileName);
        PdfDocument pdf = new PdfDocument(pdfReader);
        //目标文档名
        String desDir = new File(fileName).getParentFile().getAbsolutePath()
                +"/"+UUID.randomUUID().toString()+".pdf";
        //生成目标文档
        PdfWriter pdfWriter = new PdfWriter(desDir);
        PdfDocument outPdfDocument = new PdfDocument(pdfWriter);
        //核心代码其实就这一行
        pdf.copyPagesTo(startPage,endPage,outPdfDocument);
        //关闭
        outPdfDocument.close();
        pdfWriter.close();
        pdf.close();
        pdfReader.close();
    }
}

下一步研究一下PDF 转word。

再也不用怕文档太大太占内存了。

版权声明:本文为qq_21344887原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21344887/article/details/120913490

智能推荐

java 使用itext7 批量修改pdf

需求:批量操作文件夹下面的所有pdf文件    在pdf文件末尾新增一行内容   1、导入依赖 2、主要代码  ...

itext7生成pdf页脚页码

itext7生成pdf页脚页码 在document.close()之前调用...

C# iText7 设置PDF背景

1、参考https://cloud.tencent.com/developer/ask/148120  ...

itext7中PDF的相关元素1(c#)

最大的是pdf文件 其次是pdf文档 PdfDocument 文档可以加一些列东西: 文字信息: new Paragraph(string) Paragraph即一段文字的意思 图片信息: new Image(ImageDataFactory.Create(path)); 列表信息: 表格:new Table() 表格填写用: table.AddHeaderCell(new Cell().Add(...

itext7 html转pdf 英文或数字不自动换行的问题

1.maven jar包依赖 2.核心代码...

猜你喜欢

itext7 java转pdf并插入图片的简单模板

itext7 java转pdf并插入图片的简单模板 我是存在f盘了 ,根据个人需求存储到相应位置就好 参考博客:https://blog.csdn.net/weixin_30243533/article/details/95257015?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-...

java通过itext生成PDF,设置单元格cell的最大高度 以及 itext7初尝

网上百度java生成pdf都是很老的代码,使用的是itext5,找遍了大江南北都找不到设置表格或单元格最大高度,或者绝对定位表格的实现,最后对table和cell的方法一个一个找,找到了满足要求的方法: cell.setMaxLines(int numberOfLines) 由于字体确定,每行字体的高度已确定,设定最大行数也就设定了最大高度,且避免了设置的高度不是每行高度的整数倍的麻烦,itext...

Java使用itext7生成pdf文件并下载

首先需要引入itext7的jar包,如果是maven项目的话,在pom中加入 Springboot接口定义 因为是提供给前端下载,所以是在输出流中写入文件,先新建一个Document对象 定义一下字体 相关字体库可以去com.itextpdf.io.font.FontConstants中查看 正文部分,新建一个段落,设置内容和样式 这里的Paragraph就是段落,add方法的参数就是内容,后面可...

使用itext7把html导出为pdf,并设置中文

导包 代码 https://gitee.com/yue126/itext7-demo.git html导出为pdf(问题:中文无法显示) html导出为pdf(解决中文无法显示的问题)...

数据集合与分组操作:数据聚合,逐列及多函数应用,返回不含行索引的聚合数据, 数据透视表与交叉表(crosstab)

2.1 数据聚合 聚合是指所有根据数组产生标量值的数据转换过程。就像mean count min sum等, 函数 描述 count 分组中的非NA 值数量 sum 非NA值的累计和 mean 非NA 值的均值 median 非NA 值的算术中位数 std,var 无偏的(n-1 分母)标准差和方差 min max 非NA 值的最大值最小值 prod 非NA 值 的乘积 first,last 非N...