首页 > 编程语言 >java pdf 表单填充

java pdf 表单填充

时间:2022-10-26 13:33:42浏览次数:52  
标签:java new 表单 itextpdf io import pdf null

  1. 对象转map
		Map<String, String> map = JSON.parseObject(JSONUtil.toJsonStr(platform), new TypeReference<Map<String, String>>() {
		});
  1. 生成pdf
		ByteArrayOutputStream byteArrayOutputStream = null;
		try {
			log.info("电签流程生成pdf成功");
			byteArrayOutputStream = PdfUtils.genPdf(map);
		}catch (Exception e) {
			log.error("电签流程生成pdf失败 {}", e.getMessage());
			throw new BusinessException(EnumBizCode.ERROR_CODE_FAILED_CREATE_PDF);
		}
  1. 工具类
package com.bison.teamwork.util;

import com.bison.common.constant.BusinessException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;

import java.io.*;
import java.util.Map;

/**
 * Description: PdfUtils <br>
 * 依赖的包:itextpdf    itext-asian
 * commons-io,commons-codec
 */
@Slf4j
public class PdfUtils {

	public static ByteArrayOutputStream genPdf(Map map) throws IOException {
		File templateFile = inputStreamToFile();
		return fillParam(map, FileUtils.readFileToByteArray(templateFile));
	}

	/**
	 * Description: 使用map中的参数填充pdf,map中的key和pdf表单中的field对应 <br>
	 */
	public static ByteArrayOutputStream fillParam(Map<String, String> fieldValueMap, byte[] file) {
		ByteArrayOutputStream byteArrayOutputStream = null;
		try {
			byteArrayOutputStream = new ByteArrayOutputStream();
			PdfReader reader = null;
			PdfStamper stamper = null;
			BaseFont base = null;
			try {
				reader = new PdfReader(file);
				stamper = new PdfStamper(reader, byteArrayOutputStream);
				stamper.setFormFlattening(true);
				base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
				AcroFields acroFields = stamper.getAcroFields();
				for (String key : acroFields.getFields().keySet()) {
					acroFields.setFieldProperty(key, "textfont", base, null);
					acroFields.setFieldProperty(key, "textsize", new Float(12), null);
				}
				if (fieldValueMap != null) {
					for (String fieldName : fieldValueMap.keySet()) {
						acroFields.setField(fieldName, fieldValueMap.get(fieldName));
					}
				}
			} catch (Exception e) {
				throw new BusinessException(e.getMessage());
			} finally {
				if (stamper != null) {
					try {
						stamper.close();
					} catch (Exception e) {
						throw new BusinessException(e.getMessage());
					}
				}
				if (reader != null) {
					reader.close();
				}
			}
		} catch (Exception e) {
			log.error("填充参数异常");
			throw new BusinessException(e.getMessage());
		} finally {
			IOUtils.closeQuietly(byteArrayOutputStream);
		}
		return byteArrayOutputStream;
	}
	
	/***
	 * linux下获取文件方式
	 * @param  
	 * @return {@link File}
	 * @date 2022/10/26 
	**/
	
	public static File inputStreamToFile(){
		try {
			//读取文件
			ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
			org.springframework.core.io.Resource[] resources = resolver.getResources("verify" + File.separator + "verify.pdf");
			org.springframework.core.io.Resource resource = resources[0];
			InputStream ins = resource.getInputStream();

			File file = new File(System.getProperty("java.io.tmpdir") + File.separator + "verify.pdf");
			if (file.exists()) {
				return file;
			}
			OutputStream os = new FileOutputStream(file);
			int bytesRead;
			int len = 8192;
			byte[] buffer = new byte[len];
			while ((bytesRead = ins.read(buffer, 0, len)) != -1) {
				os.write(buffer, 0, bytesRead);
			}
			os.close();
			ins.close();
			return file;
		} catch (IOException e) {
			log.error("获取文件异常");
			throw new BusinessException(e.getMessage());
		}
	}
}

  1. 引入的包
        <!-- pdf文件依赖包 -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.2.0</version>
        </dependency>
        <!-- pdf字体依赖包 -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.11</version>
        </dependency>

标签:java,new,表单,itextpdf,io,import,pdf,null
From: https://www.cnblogs.com/fuqian/p/16828048.html

相关文章

  • Java当中的重载和重写的区别【多测师】
    java中重写与重载的区别1.重写(Override)从字面上看,重写就是重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不......
  • java8 Optional使用总结
    原文地址:https://www.cnblogs.com/kingsonfu/p/11009574.html【前言】 java8新特性java8函数接口java8lambda表达式Java8时间日期使用 java8推出的Optional的......
  • Java知识10 变量类型【多测师】
    类变量(静态变量):独立于方法之外的变量用static修饰实例变量:独立于方法之外的变量没有static修饰//必须先创建一个对象实例化局部变量(类方法中的变量):类的方法中的变量......
  • Java知识9 基本数据类型【多测师】
    一、Java的八种基本类型六种数字类型:四个整数型俩个浮点型一个字符类型一个布尔型byteshortintlongfloatdoublebooleanchar实例:基本类型的取值范围:publicclassPr......
  • java知识8 Java基础语法【多测师】
    一、基础语法类:比如动物对象:狗狗、猫等就是具体的对象状态:狗狗的颜色、名字行为:狗狗叫、吃、摇尾巴方法:方法就是行为一个类可有很多方法逻辑运算数据修改以及所有的动......
  • Java知识7 Java方法 void关键字 构造方法【多测师】
    一、Java方法:println是一个方法System是系统类out是标准输出对象这句话的用法是调用系统类System中的标准输出对象out中的方法println()。方法定义:包含的语法修饰......
  • Java知识5 创建对象 实例化 构造方法【多测师】
    一、创建对象对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:声明:声明一个对象,包括对象名称和对象类型。实例化:使用关键字new来创建一......
  • Java知识6 局部变量、成员变量和类变量的区别【多测师】
    一、局部变量、成员变量、类变量静态变量:由static修饰的变量为静态变量本质为全局变量成员变量、类变量区别:1、成员变量随着对象创建存在对象回收而释放2、静态变量随着类......
  • java知识4 变量类型【多测师】
    类变量:用static来修饰独立于方法之外publicstaticvoidmain(String[]args){StaticintallClicks=0;———类变量}实例变量:不用static修饰符修饰、独立于方法之......
  • java知识3 修饰符【多测师】
    JAVA修饰符:分为:访问修饰符和非访问修饰符访问控制修饰符:default(即缺省,什么也不写):在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。private:在同一类......