Itext制作PDF

  • 创建模板

下载PDFelement,新建一个pdf,依次点击 “编辑”、“表单”

然后保存就好了,key 为money

  • 代码构建

pom文件引入jar

		<dependency>
		    <groupId>com.itextpdf</groupId>
		    <artifactId>itextpdf</artifactId>
		    <version>5.5.13</version>
		</dependency>
		<dependency>
	        <groupId>com.itextpdf</groupId>
	        <artifactId>itext-asian</artifactId>
	        <version>5.2.0</version>
	    </dependency>

创建代码



import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Service;

import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PRIndirectReference;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

@Service
public class ItextService {
	
 
	public void createPDF() throws Exception{
		Map<String,String> map=new HashMap<>();
		
		map.put("money", "30,000元");
		map.put("conA", "XXX科技有限公司");
		map.put("conB","张三");
		convertTransData(map);
		System.out.println("执行完毕");
	}
	
	/**
	 * 将数据转换为输入字节流
	 * */
	protected InputStream convertTransData(Map<String,String> data)
			throws Exception {
			if (data==null || data.isEmpty())
				return null;
			String template="/Users/yongyang/Desktop/test.pdf";
			try {
//				InputStream in =
//					this.getClass().getResourceAsStream(template);
				byte[] b=FileUtils.readFileToByteArray(new File(template));
				ByteArrayOutputStream out =
					(ByteArrayOutputStream)generate(new PdfReader(b),data);
 
				ByteArrayInputStream ret =
					new ByteArrayInputStream(out.toByteArray());
				//将pdf字节流输出到文件流
				OutputStream fos = new FileOutputStream("/Users/yongyang/Desktop/test_r.pdf");
				fos.write(out.toByteArray());
				fos.close();
				out.close();
				return ret;
			} catch (Exception e) {
				throw new Exception(e);
			}
		}
	
	/**
	 *  将数据,填入pdf表单域
	 * 
	 * */
	public static OutputStream generate(PdfReader template, Map data)
			throws Exception {
		String fontPath="~/Desktop/STHeiti Light.ttc";
		//创建基础字体
//		BaseFont bfChinese = BaseFont.createFont(fontPath,BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
		BaseFont bfChinese = BaseFont.createFont( "STSong-Light" ,  "UniGB-UCS2-H" , BaseFont.EMBEDDED);
 
		try {
			ByteArrayOutputStream out = new ByteArrayOutputStream();
 
			PdfStamper stamp = new PdfStamper(template, out);
			AcroFields form = stamp.getAcroFields();
 
			// set the field values in the pdf form
			for (Iterator it = data.keySet().iterator(); it.hasNext();) {
				String key = (String) it.next();
				String value = (String) data.get(key);
				form.setFieldProperty(key, "textfont", bfChinese, null);
				form.setField(key, value);
 
			}
 
			stamp.setFormFlattening(true);
			stamp.close();
			template.close();
			
			return out;
 
		}
 
		catch (Exception e) {
 
			e.printStackTrace();
 
			return null;
		}
 
	}
 
}
  • 生成结果

发布了38 篇原创文章 · 获赞 19 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/yangyongdehao30/article/details/92838735