Java PDF 相关 1、拷贝多个PDF到一个PDF,并且文件大小变小,文本等信息保留

简介: 1、合并多个PDF,并且文件变小,后面添加的文本信息保留

公共部分:
需要引用的架包

     <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13</version>
        </dependency>

        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

一、合并多个PDF到一个PDF,主要使用PdfCopy
1、业务反馈系统打印的PDF文本不见了,要修复。
2、查看代码发现,只是简单地将PDF合并,并没有作任务处理
直接看代码示例:
/合并多个PDF/

public static void pdfCopyDemo() {
   
        List<String> fileurls = new ArrayList<>();
        fileurls.add("C:\\Users\\Administrator\\Desktop\\print\\wms\\20240123OUTBOUND_A4.pdf");
        //fileurls.add("C:\\Users\\Administrator\\Desktop\\print\\wms\\20240123OUTBOUND_A4.pdf");
        Document document = new Document();

        try(ByteArrayOutputStream fos = new ByteArrayOutputStream()){
   
            // 创建新的pdf
            //这里如果直接New PdfCopy来处理,生成的PDF会变大,所以改用PdfSmartCopy。有兴趣的同学自己研究
            PdfCopy copy = new PdfSmartCopy(document,fos);
            //PdfWriter writer = PdfWriter.getInstance(document, fos);
            document.open();
            //PdfContentByte cb = writer.getDirectContent();
            int numberOfPages = 0;
            PdfReader reader = null;
            PdfImportedPage pageTemplate = null;
            for(String url : fileurls) {
   
                PdfReader.debugmode = true; //忽略有问题的PDF 不影响正常打印
                reader = new PdfReader(url);
                numberOfPages = reader.getNumberOfPages();
                for (int i = 0; i < numberOfPages; i++) {
   
                    //pageTemplate = writer.getImportedPage(reader, i + 1);
                    pageTemplate = copy.getImportedPage(reader, i + 1);
                    document.setPageSize(pageTemplate.getBoundingBox());
                    document.newPage();
                    //cb.addTemplate(pageTemplate, 0, 0);// 设置x,y坐标
                    copy.addPage(pageTemplate);
                }
                reader.close();
            }
            document.close();
            //databyte = fos.toByteArray();

            FileOutputStream fot = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\print\\wms\\copy.pdf");
            fot.write(fos.toByteArray());
        } catch (Exception e) {
   
            throw new WMSException(GlobalExceptionMessage.DEFAULT_CODE, "Failed to download files."+WMSExceptionUtil.getExceptionInfo(e));
        }
    }
相关文章
|
1月前
|
Java
有关Java发送邮件信息(支持附件、html文件模板发送)
有关Java发送邮件信息(支持附件、html文件模板发送)
31 1
|
1月前
|
数据挖掘 数据安全/隐私保护 开发者
使用Spire.PDF for Python插件从PDF文件提取文字和图片信息
使用Spire.PDF for Python插件从PDF文件提取文字和图片信息
84 0
|
1月前
|
监控 Java
Java如何获取堆栈信息
【2月更文挑战第19天】
|
2月前
|
Java
|
2月前
|
Java
java Itext创建pdf
java Itext创建pdf
33 0
|
2月前
|
Java 流计算
这个错误信息来自于Java的ScheduledThreadPoolExecutor类,具体的原因是RejectedExecutionException,也就是任务被拒绝执行
【2月更文挑战第3天】这个错误信息来自于Java的ScheduledThreadPoolExecutor类,具体的原因是RejectedExecutionException,也就是任务被拒绝执行
34 2
|
1月前
|
Java
【Java】数组中的拷贝方法与初步理解深浅拷贝
【Java】数组中的拷贝方法与初步理解深浅拷贝
13 0
|
1月前
|
存储 机器学习/深度学习 搜索推荐
用Java代码打造信息推荐系统
用Java代码打造信息推荐系统
27 2
|
1月前
|
Java API Apache
java的实体拷贝方式与实战
Java 中的实体拷贝,通常指的是将一个对象的属性值复制到另一个对象的过程。实体拷贝可以是浅拷贝(Shallow Copy)或深拷贝(Deep Copy)。浅拷贝仅复制对象的引用,而不复制引用的对象本身;深拷贝则会复制对象以及对象内部引用的所有对象。实现实体拷贝的方法有多种,包括直接赋值、使用克隆方法、通过序列化/反序列化,以及利用反射或第三方库。下面详细介绍这些实现原理:
45 1
|
1月前
|
传感器 人工智能 监控
智慧工地云信息平台源码(微服务+java+springcloud+uniapp+mysql)
智慧工地云信息平台源码(微服务+java+springcloud+uniapp+mysql)
31 0