java动态生成pdf 合并两个pdf文件功能三
程序员文章站
2022-07-13 13:35:06
...
其主要功能实现合并两个pdf:
参考文献链接:https://blog.csdn.net/TOP__ONE/article/details/65637858
java动态生成pdf含表格table和 合并两个pdf文件功能。
思路如下:
一:创建maven项目,加入依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.2</version>
</dependency>
<!--pdf itext 的jar依赖 -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
二:具体实现代码如下:写的很清楚了:2个静态方法,第一个就是生成一个pdf方法,第二个是个合并的方法
package com.demo3;
import java.io.FileOutputStream;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;
public class Test1 {
public static void test1() {// 生成pdf
BaseFont bf;
Font font = null;
try {
bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 创建字体
font = new Font(bf, 12);// 使用字体
} catch (Exception e) {
e.printStackTrace();
}
Document document = new Document();
try {
PdfWriter.getInstance(document, new FileOutputStream("D:\\pdfDemo\\66.pdf"));
document.open();
document.add(new Paragraph("就是测试下", font));// 引用字体
document.add(new Paragraph("真的测试下", font));// 引用字体
float[] widths = { 25f, 25f, 25f };// 设置表格的列宽和列数 默认是4列
PdfPTable table = new PdfPTable(widths);// 建立一个pdf表格
table.setSpacingBefore(20f);
table.setWidthPercentage(100);// 设置表格宽度为100%
PdfPCell cell = null;
cell = new PdfPCell(new Paragraph("姓名", font));//
cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(cell);
cell = new PdfPCell(new Paragraph("性别", font));//
cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(cell);
cell = new PdfPCell(new Paragraph("身份证号", font));//
cell.setBackgroundColor(BaseColor.LIGHT_GRAY);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell(cell);
// 以下代码的作用是创建100行数据,其中每行有四列,列依次为 编号 姓名 性别 备注
for (int i = 1; i <= 10; i++) {
// 设置编号单元格
PdfPCell cell11 = new PdfPCell(new Paragraph("aa名媛", font));
PdfPCell cell22 = new PdfPCell(new Paragraph("bb女", font));
PdfPCell cell33 = new PdfPCell(new Paragraph("cc花姑娘", font));
// 单元格水平对齐方式
cell11.setHorizontalAlignment(Element.ALIGN_CENTER);
// 单元格垂直对齐方式
cell11.setVerticalAlignment(Element.ALIGN_CENTER);
cell22.setHorizontalAlignment(Element.ALIGN_CENTER);
cell22.setVerticalAlignment(Element.ALIGN_CENTER);
cell33.setHorizontalAlignment(Element.ALIGN_CENTER);
cell33.setVerticalAlignment(Element.ALIGN_CENTER);
table.addCell(cell11);
table.addCell(cell22);
table.addCell(cell33);
}
document.add(table);
document.close();
} catch (Exception e) {
System.out.println("file create exception");
}
}
// *********合并 pdfFilenames为文件路径数组,targetFileName为目标pdf路径
public static void combinPdf(String[] pdfFilenames, String targetFilename) throws Exception {
PdfReader reader = null;
Document doc = new Document();
PdfCopy pdfCopy = new PdfCopy(doc, new FileOutputStream(targetFilename));
int pageCount = 0;
doc.open();
for (int i = 0; i < pdfFilenames.length; ++i) {
System.out.println(pdfFilenames[i]);
reader = new PdfReader(pdfFilenames[i]);
pageCount = reader.getNumberOfPages();
for (int j = 1; j <= pageCount; ++j) {
pdfCopy.addPage(pdfCopy.getImportedPage(reader, j));
}
}
doc.close();
}
public static void main(String[] args) throws InterruptedException {
test1();//调用test1静态方法,生成pdf D:\\pdfDemo\\66.pdf
String fillTemplate1 = "D:\\pdfDemo\\66.pdf";
String fillTemplate2 = "D:\\pdfDemo\\66.pdf";
String[] st = { fillTemplate1, fillTemplate2 };
try {
combinPdf(st, "D:\\pdfDemo\\合并2.pdf");
} catch (Exception e) {
e.printStackTrace();
}
}
}
三:最终的效果就是两个pdf全为了一个pdf,看的多不如练习的多,不妨去尝试下吧。
上一篇: java 解析PDF