通过itext合并PDF工具类

news/2024/7/16 8:20:15

maven坐标:

<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.5</version>
		</dependency>
		<dependency>
			<groupId>com.lowagie</groupId>
			<artifactId>itext</artifactId>
			<version>2.1.7</version>
		</dependency>
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itextpdf</artifactId>
			<version>5.5.9</version>
		</dependency>
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itext-asian</artifactId>
			<version>5.2.0</version>
		</dependency>

 

实现:

public static byte[] mergePdfFiles(List<byte[]> files) throws IOException {
        Document document = new Document(PageSize.A4);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            PdfCopy copy = new PdfCopy(document, bos);
            document.open();

            for (int i = 0; i < files.size(); i++) {
                byte[] bytesArray = files.get(i);
                PdfReader reader = new PdfReader(bytesArray);
                int n = reader.getNumberOfPages();
                for (int j = 1; j <= n; j++) {
                    document.newPage();
                    PdfImportedPage page = copy.getImportedPage(reader, j);
                    copy.addPage(page);
                }
            }



        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            bos.flush();
            bos.close();
            document.close();
        }

        return bos.toByteArray();
    }

 

 

 

 

 

 


http://www.niftyadmin.cn/n/3656434.html

相关文章

软件设计七大原则实战(二)-开闭原则

1 开闭原则的定义 开闭原则是Java世界里最基础的设计原则&#xff0c;它指导我们如何建立一个稳定的、灵活的系统&#xff0c;先来看开闭原则的定义&#xff1a;Software entities like classes,modules and functions should be open for extension but closed for modifica…

表格排序技巧

表格排序的方法<script>function Table (tBody, tHead) { this.tBody tBody; this.tHead tHead.constructor Array ? tHead : new Array(); this.view null;}function Table_sort (compFun, col) { compFun compFun || compRows; compFun.col col ? col : 0; thi…

ThreadLocal弱引用与内存泄漏分析

本文对ThreadLocal弱引用进行一些解析&#xff0c;以及ThreadLocal使用注意事项。 ThreadLocal 首先&#xff0c;简单回顾一下&#xff0c;ThreadLocal是一个线程本地变量&#xff0c;每个线程维护自己的变量副本&#xff0c;多个线程互相不可见&#xff0c;因此多线程操作该…

在ASP.NET访问Excel文件 (VB.NET and C#)

在ASP.NET访问Excel文件 (VB and C#) C# Code---------------------------------------------<% Page Language"C#" %><% Import Namespace"System.Data" %><% Import Namespace"System.Data.ADO" %>&amp;lt;script langu…

打印对象的所有属性或方法

打印对象的所有属性或方法例如,下面的例子打印出DOCUMENT对象的所有属性和方法&#xff0c;代码如下&#xff1a;<SCRIPT>functionpopUpProperties(inobj) { op window.open(); op.document.open(text/html); for(objprop ininobj) { op.document.write(objprop 的属性或…

使用Guava RateLimiter限流以及源码解析

前言 在开发高并发系统时有三把利器用来保护系统&#xff1a;缓存、降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量降级 降级是当服务出现问题或者影响到核心流程时&#xff0c;需要暂时屏蔽掉&#xff0c;待高峰或者问题解决后再打开限流 限流的目的是通过…