# Itext Pdf 合并拆分
Posted 爱码代码的喵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了# Itext Pdf 合并拆分相关的知识,希望对你有一定的参考价值。
Itext Pdf 合并拆分
文章目录
Itext Pdf 生成
生成 Pdf 详细见:https://blog.csdn.net/qq_37248504/article/details/124224968
需求
- 将多个
Pdf
合并成一个Pdf
文件 - 将一个
Pdf
文件拆分成多个Pdf
文件
涉及知识点
-
FeignClient
流的获取 -
ItextPdf
文件合并操作 -
ItextPdf
文件拆分操作 -
相关依赖
<!-- itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.3</version>
</dependency>
<!-- pdf 中文支持 -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>layout</artifactId>
<version>7.2.3</version>
</dependency>
通过 FeignClient 获取 Response 流
- 从不同的服务拿到
Pdf
流
@PostMapping("/test")
Response getPdfResponse(@RequestBody Param param);
合并Pdf
copyPagesTo()
/**
* 使用 copyPagesTo 合并
*
* @throws IOException ioexception
*/
@Test
public void test1() throws IOException
PdfWriter pdfWriter = new PdfWriter(DEST);
// 最终合并的 dpf
PdfDocument pdfDocument = new PdfDocument(pdfWriter);
PdfReader pdfReader1 = new PdfReader(FILE_NAME1);
PdfDocument pdfDocument1 = new PdfDocument(pdfReader1);
pdfDocument1.copyPagesTo(1, pdfDocument1.getNumberOfPages(), pdfDocument);
PdfReader pdfReader2 = new PdfReader(FILE_NAME2);
PdfDocument pdfDocument2 = new PdfDocument(pdfReader2);
pdfDocument2.copyPagesTo(1, pdfDocument2.getNumberOfPages(), pdfDocument);
pdfReader1.close();
pdfDocument1.close();
pdfReader2.close();
pdfDocument2.close();
pdfDocument.close();
pdfMerger.merge()
/**
* 使用 pdfMerger.merge
*
* @throws IOException ioexception
*/
@Test
public void test2() throws IOException
PdfWriter pdfWriter = new PdfWriter(DEST);
// 最终合并的 dpf
PdfDocument pdfDocument = new PdfDocument(pdfWriter);
PdfMerger pdfMerger = new PdfMerger(pdfDocument);
PdfReader pdfReader1 = new PdfReader(FILE_NAME1);
PdfDocument pdfDocument1 = new PdfDocument(pdfReader1);
pdfMerger.merge(pdfDocument1, 1, pdfDocument1.getNumberOfPages());
PdfReader pdfReader2 = new PdfReader(FILE_NAME2);
PdfDocument pdfDocument2 = new PdfDocument(pdfReader2);
pdfMerger.merge(pdfDocument2, 1, pdfDocument2.getNumberOfPages());
pdfReader1.close();
pdfDocument1.close();
pdfReader2.close();
pdfDocument2.close();
pdfDocument.close();
拆分 Pdf
/**
* 每个文件 1 页 分割
*
* @throws IOException ioexception
*/
@Test
public void test3() throws IOException
pdfSplitter(DEST, 1, DEST_FOLDER);
/**
* 在指定目录等分pdf
*
* @param fileName 要分割的文档
* @param pageNum 分割尺寸
* @param desDir 分割后存储路径
* @throws IOException 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;
PdfDocument pdfWriterDoc;
int numberOfPages = pdf.getNumberOfPages();
for (int i = 1; i <= numberOfPages; i += pageNum)
name = desDir + "/" + i + ".pdf";
File file = new File(name);
if (!file.exists())
file.createNewFile();
pdfWriter = new PdfWriter(name);
pdfWriterDoc = new PdfDocument(pdfWriter);
int end = Math.min((i + pageNum - 1), pdf.getNumberOfPages());
//从页数第一页开始,
pdf.copyPagesTo(i, 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() + ".pdf";
//生成目标文档
PdfWriter pdfWriter = new PdfWriter(desDir);
PdfDocument outPdfDocument = new PdfDocument(pdfWriter);
//从页数第一页开始,
pdf.copyPagesTo(startPage, endPage, outPdfDocument);
//关闭
outPdfDocument.close();
pdfWriter.close();
pdf.close();
pdfReader.close();
示例源码
以上是关于# Itext Pdf 合并拆分的主要内容,如果未能解决你的问题,请参考以下文章