欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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,看的多不如练习的多,不妨去尝试下吧。

相关标签: pdf