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));
        }
    }
相关文章
|
3天前
|
前端开发 Java
Java高手都在用的秘籍:自定义异常,让错误信息说话!
Java高手都在用的秘籍:自定义异常,让错误信息说话!
14 1
|
7天前
|
Java Windows
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
|
10天前
|
Java 索引
Java系列 之 Java复制(拷贝)数组的4种方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRan
这篇文章介绍了Java中数组复制的四种方法:`Arrays.copyOf()`、`Arrays.copyOfRange()`、`System.arraycopy()`和`clone()`方法,以及它们的使用场景和示例代码。
|
17天前
|
数据采集 机器学习/深度学习 前端开发
Java爬虫中的数据清洗:去除无效信息的技巧
Java爬虫中的数据清洗:去除无效信息的技巧
|
17天前
|
存储 Java
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储
这篇文章通过Java代码示例展示了如何实现哈希表,包括定义结点类、链表类、数组存储多条链表,并使用简单的散列函数处理冲突,以及如何利用哈希表存储和查询学生信息。
数据结构中的哈希表(java实现)利用哈希表实现学生信息的存储
|
29天前
【科研技巧】Mac 系统如何给Endnote 20添加某篇文献信息和附加PDF文件
Mac系统下使用Endnote 20添加文献信息和PDF文件的详细步骤,包括下载.enw文件和在Endnote中导入这些文件的方法。
44 6
|
2月前
|
JavaScript Java
Java 将Markdown文件转换为Word和PDF文档
【7月更文挑战第5天】Java中使用`Spire.Doc for Java`库可方便地将Markdown转换为Word或PDF。基本步骤包括导入模块,创建`Document`对象,加载Markdown文件,然后保存为目标格式(`.docx`或`.pdf`)。若遇到`Invalid UTF-8 stream`错误,需确保Markdown文件是UTF-8无BOM编码。页面设置可通过`PageSetup`类调整。注意,实际应用会依据具体需求和环境有所调整。
120 6
|
18天前
|
Java
JAVA PDF 截取N页,生成新文件,转图片,多个PDF 合并
JAVA PDF 截取N页,生成新文件,转图片,多个PDF 合并
47 0
|
18天前
|
Java
jsp和java的结合使用显示学生信息
通过JavaBean封装学生信息,并利用JSP展示。`Student`类定义了学生属性与操作方法。JSP页面通过脚本创建学生对象、填充数据至列表,并遍历输出。实现了学生基本信息的动态展示。
|
2月前
|
Java
java通过idea启动查看类加载来源信息
java通过idea启动查看类加载来源信息
35 0
下一篇
云函数