java中利用itext 生成pdf

最近,项目中需要根据流程表单信息生成PDF文件,上传到公司的文档系统保存,并外发连接到工厂兄弟下载,在此,对生成pdf环节做如下总结.
1.为保证生成的PDF文件的规范性,需制作相应的PDF模板,这里需要用到一个制作PDF模板的工具:adobe acrobat(破解版下载链接:链接:https://pan.baidu.com/s/1Cz4rN2yZAF4k5WDdSCctzw 密码:ywlb;脱机安装版:http://userlibrary.lofter.com/post/1cb113e9_6a80ce5).该工具使用方法可自行百度,或者到官网查看文档.
2.第1步完成之后,就需要读取模板信息,并往里面填充对应数据,生成一个新的PDF文件了,具体实现代码如下:
<!-- 所需jar包 -->
	<!-- itext pdf begin -->
	<dependency>
	    <groupId>com.itextpdf</groupId>
	    <artifactId>itextpdf</artifactId>
	    <version>5.5.6</version>
	</dependency>
	<!-- itextpdf的亚洲字体支持 -->
	<dependency>
	    <groupId>com.itextpdf</groupId>
	    <artifactId>itext-asian</artifactId>
	    <version>5.2.0</version>
	</dependency>
	<!-- itext pdf end -->
package com.hill.util.pdfcreate;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

// 简单demo
public class PdfUtil {

	public static void main(String[] args) throws Exception {
        // 模板文件路径
        String modelPath = "E:cdTestModel.pdf";
        // 生成的文件路径
        String resultFielPath = "E:test.pdf";
        // 书签名[域名]
        String fieldName = "fill_3";
		// 图片路径
		String imagePath = "E:\\6d2bc967-3ae6-4eeb-96de-618f5a1bef60";
        // 读取模板文件
        InputStream input = new FileInputStream(new File(modelPath));
        PdfReader reader = new PdfReader(input);
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(resultFielPath));
        // 提取pdf中的表单
        AcroFields form = stamper.getAcroFields();
       
        // 此种方式写入文本数据
        // k为模板域名称,v为数据,每个域对应一个k,根据k传输数据.
        form.setField("k", "v");
        /**
         * 各种form.setField().................
         * 
         * */
        // 字体设置
        form.addSubstitutionFont(BaseFont.createFont("STSong-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED));
        
        // 此种方式写入图片数据.
        // 通过域名获取所在页和坐标,左下角为起点
        int pageNo = form.getFieldPositions(fieldName).get(0).page;
        Rectangle signRect = form.getFieldPositions(fieldName).get(0).position;
        float x = signRect.getLeft();
        float y = signRect.getBottom();

        // 读取图片
        Image image = Image.getInstance(imagePath);
        // 获取操作的页面
        PdfContentByte under = stamper.getOverContent(pageNo);
        // 根据域的大小缩放图片
        image.scaleToFit(signRect.getWidth(), signRect.getHeight());
        // 添加图片
        image.setAbsolutePosition(x, y);
        under.addImage(image);

        stamper.close();
        reader.close();
    }
}
项目中效果如下:前图为网页流程信息截图,后图为生成PDF文件截图




猜你喜欢

转载自blog.csdn.net/superme_1994/article/details/80756736