IText更改pdf模板数据并导出

1.导入maven相关依赖


			com.itextpdf
			itextpdf
			5.4.3
		
		
			com.itextpdf
			itext-asian
			5.2.0
		

注意:1.asian如果版本低于5.0的话,导入数据时会报 "STSong-Light' with 'UniGB-UCS2-H' is not recognized"

          2.所有过程中,pdf模板在项目运行的时候尽量不要同时打开,不然报file reload异常


2.直接贴代码

@RequestMapping(value = "/editPDF2")
	@ResponseBody
	public Object editPDF2(String attr, HttpServletResponse response) throws IOException {
		//
		OutputStream ouputStream = response.getOutputStream();
		//json格式的String类型参数,直接转成map方便取值
		Map data = JSON.parseObject(attr);

		// 本地模板
		String fileName = "C:\\Users\\xianyu\\Desktop\\PDF Test\\Fill the forms.pdf";

		PdfReader reader;
		// FileOutputStream out;
		ByteArrayOutputStream bos;
		PdfStamper stamper;

		try {
			// out = new FileOutputStream("C:\\Users\\xianyu\\Desktop\\PDF Test\\exportForm1.pdf");// 输出流
			reader = new PdfReader(fileName);// 读取pdf模板
			bos = new ByteArrayOutputStream();
			stamper = new PdfStamper(reader, bos);
			AcroFields form = stamper.getAcroFields();

			int i = 0;
			java.util.Iterator it = form.getFields().keySet().iterator();
			while (it.hasNext()) {
				String name = it.next().toString();
				form.setField(name, data.get(name).toString());
			}

			stamper.setFormFlattening(true);//如果为false那么生成的PDF文件还能编辑,一定要设为true
			stamper.close();
			
			//在建多一份document导出。
			Document doc = new Document();
			PdfCopy copy = new PdfCopy(doc, ouputStream);
			doc.open();
			PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
			copy.addPage(importPage);

			response.setHeader("Content-disposition", "formPDF");
			response.setHeader("Content-type", "application/pdf;charset=utf-8");
			response.setHeader("Content-disposition", "attachment;filename=formPDF.pdf");
			response.setHeader("Pragma", "No-cache");

			doc.close();

		} catch (IOException e) {
			System.out.println(1);
			e.printStackTrace();
		} catch (DocumentException e) {
			System.out.println(2);
			e.printStackTrace();
		} finally {
			if (ouputStream != null) {
				ouputStream.close();
			}
		}
		return new Message(Message.SUCCESS_CODE, "成功");
	}

模板:

IText更改pdf模板数据并导出_第1张图片

运行url:localhost:8081/pdf/editPDF

参数:attr={ "sendUnitName":"sendUnitName1", "annexFile":"annexFile1", "officerAdvice":"办公室处理", "copyUnitNames":"抄送","year":"2018","subject":"主题词", "sendUnitNames":"sendUnitNames1", "count":"10", "caption":"文件标题", "writers":"拟稿","secondSign":"会签会签","primarySign":"签发签发","officerName":"核稿", "deptMgrAdvice":"部门负责人", "checkerName":"校对", "mounth":"3", "word":"1000","day":"26","mark":"页", "order":"order2" }

运行截图:

IText更改pdf模板数据并导出_第2张图片

注:pdf空白处需先定义好标志,此处pdf所用的标志符就是各个属性的key值。


你可能感兴趣的:(IText更改pdf模板数据并导出)