PDF生成

先导入依赖

<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>kernel</artifactId>
			<version>7.1.3</version>
		</dependency>

		<!-- always needed -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>io</artifactId>
			<version>7.1.3</version>
		</dependency>

		<!-- always needed -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>layout</artifactId>
			<version>7.1.3</version>
		</dependency>

		<!-- only needed for forms -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>forms</artifactId>
			<version>7.1.3</version>
		</dependency>

		<!-- only needed for PDF/A -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>pdfa</artifactId>
			<version>7.1.3</version>
		</dependency>

		<!-- only needed for digital signatures -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>sign</artifactId>
			<version>7.1.3</version>
		</dependency>

		<!-- only needed for barcodes -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>barcodes</artifactId>
			<version>7.1.3</version>
		</dependency>

		<!-- only needed for Asian fonts -->
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>font-asian</artifactId>
			<version>7.1.3</version>
		</dependency>

先把相关pdf模板文件填写好表单域。把要写入内容的地方做好标记。

这里写图片描述

相关代码

import com.aliyun.boss.api.domain.biz.PDFModel;
import com.aliyun.boss.api.domain.biz.PDFProductItem;
import com.itextpdf.forms.PdfAcroForm;
import com.itextpdf.forms.fields.PdfFormField;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

public class MyPdf2 {



    public static void main(String[] args) throws Exception{

        //removePage("D:\\tst\\111.pdf","D:\\tst\\temp.pdf");

    	PDFModel model = new PDFModel();
        model.setAuthCode("code_201923232");
        model.setCustomerName("北京那啥一个有限公司的公司");
        model.setFoundationName("阿里云计算有限公司授权用户使用"+"这几一个基座名称abc");
        model.setProjectName("项目名称有没有名");
        List<PDFProductItem> prods = new ArrayList<PDFProductItem>();
        for (int i = 0 ; i<20;i++){

        	PDFProductItem prod = new PDFProductItem();
            prod.setCount(""+i);
            prod.setDeadLine("永久有效");
            prod.setSofName("流计算Stream sofName"+i);
            prod.setProdName("分布式关系型数据库服务prodName" +i);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss");
			String starttime = sdf.format(new Date());
			String endtime = sdf.format(new Date().getTime()+1000);
			String deadLine = starttime+"至"+endtime;
			prod.setDeadLine(deadLine);
            prods.add(prod);
        }
        model.setProds(prods);
        //第一个参数是模板文件所在位置,第二个参数是临时文件,不能和第一个参数重名,第三个参数是输出流
        fillTemp("D:\\tst\\temp.pdf","D:\\tst\\tmp.pdf",new FileOutputStream("D:\\out.pdf"),model);

    }
	//删除第几页,从1开始。
    public static void removePage(String src,String dest) throws Exception{

        //Initialize PDF document
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest));
        pdfDoc.removePage(1);
        //pdfDoc.removePage(2);
        pdfDoc.close();

    }


    @SuppressWarnings("deprecation")
	public static   void fillTemp(String src, String tmp,OutputStream out, PDFModel model)
    throws Exception{
        //PdfFont font = PdfFontFactory.createFont("/Users/zhangjiajia/Downloads/NotoSansCJK-Regular.ttc",PdfEncodings.IDENTITY_H, false);
        int pageSize = 15;//每页15条记录
        int total  = model.getProds().size();
        int page = total%pageSize==0?total/pageSize:((total/pageSize)+1);//分页
        System.out.println(page);
        PdfDocument dPdf = new PdfDocument(new PdfWriter(out));
        // 填充当前页面.
        for (int i = 0;i<page;i++){
            PdfFont font = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", false);
            PdfDocument sPdf = new PdfDocument(new PdfReader(src),new PdfWriter(tmp));
            PdfAcroForm form = PdfAcroForm.getAcroForm(sPdf, false);
            Map<String, PdfFormField> fields = form.getFormFields();
			//设置字体,大小,无边框
			//fields.get("foundationName").setValue(model.getFoundationName(),font,8).setBorderWidth(0);            
            fields.get("customerName").setValue(model.getCustomerName(),font,8);
            fields.get("projectName").setValue(model.getProjectName(),font,8).setBorderWidth(0);
            fields.get("authCode").setValue(model.getProjectName(),font,8).setBorderWidth(0);

            fields.get("page").setValue(""+(i+1),font,10).setBorderWidth(0);
            fields.get("total").setValue(""+page,font,10).setBorderWidth(0);

            int start = (i)*pageSize;
            for (int j = start;(j<(start + pageSize)) && (j < model.getProds().size());j++){
                 String sofName = "sofName";
                 String prodName = "prodName";
                 String count = "count";
                 String deadLine = "deadLine";
                fields.get(sofName+(j%pageSize)).setValue(model.getProds().get(j).getSofName(),font,8).setBorderWidth(0);
                fields.get(prodName+(j%pageSize)).setValue(model.getProds().get(j).getProdName(),font,8).setBorderWidth(0);
                fields.get(count+(j%pageSize)).setValue(model.getProds().get(j).getCount(),font,8).setBorderWidth(0);
                fields.get(deadLine+(j%pageSize)).setValue(model.getProds().get(j).getDeadLine(),font,6).setBorderWidth(0);
            }
            form.flattenFields();
            sPdf.close();
            PdfDocument tmpPdf = new PdfDocument(new PdfReader(tmp));
            tmpPdf.copyPagesTo(1,1,dPdf);
            tmpPdf.close();
        }
    dPdf.close();
    }


}

**

正式上线后的要修改的代码

**

@SuppressWarnings("deprecation")
	public static   void fillSoftTemp(String src,OutputStream out, PDFModel model)
			throws Exception{//删除临时文件的地址,直接在内存中生成
		int pageSize = 15;
		int total  = model.getProds().size();
		int page = total%pageSize==0?total/pageSize:((total/pageSize)+1);
		System.out.println(page);
		PdfDocument dPdf = new PdfDocument(new PdfWriter(out));
		// 填充当前页面.
		for (int i = 0;i<page;i++){
			ByteArrayOutputStream bos = new ByteArrayOutputStream();//新建对象
			PdfFont font = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", false);
			PdfDocument sPdf = new PdfDocument(new PdfReader(src),new PdfWriter(bos));
			PdfAcroForm form = PdfAcroForm.getAcroForm(sPdf, false);
			Map<String, PdfFormField> fields = form.getFormFields();
			fields.get("foundationName").setValue(model.getFoundationName(),font,8).setBorderWidth(0);
			fields.get("customerName").setValue(model.getCustomerName(),font,8).setBorderWidth(0);
			fields.get("projectName").setValue(model.getProjectName(),font,8).setBorderWidth(0);
			fields.get("authCode").setValue(model.getProjectName(),font,8).setBorderWidth(0);
			
			fields.get("page").setValue(""+(i+1),font,10).setBorderWidth(0);
			fields.get("total").setValue(""+page,font,10).setBorderWidth(0);
			
			int start = (i)*pageSize;
			for (int j = start;(j<(start + pageSize)) && (j < model.getProds().size());j++){
				String sofName = "sofName";
				String prodName = "prodName";
				String count = "count";
				String deadLine = "deadLine";
				fields.get(sofName+(j%pageSize)).setValue(model.getProds().get(j).getSofName(),font,8).setBorderWidth(0);
				fields.get(prodName+(j%pageSize)).setValue(model.getProds().get(j).getProdName(),font,8).setBorderWidth(0);
				fields.get(count+(j%pageSize)).setValue(model.getProds().get(j).getCount(),font,8).setBorderWidth(0);
				fields.get(deadLine+(j%pageSize)).setValue(model.getProds().get(j).getDeadLine(),font,8).setBorderWidth(0);
			}
			form.flattenFields();
			sPdf.close();
			bos.close();
			ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());//此处新建对象
			PdfDocument tmpPdf = new PdfDocument(new PdfReader(bis));
			tmpPdf.copyPagesTo(1,1,dPdf);
			tmpPdf.close();
		}
		dPdf.close();
		out.close();
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值