1. 程式人生 > >IText更改pdf模板資料並匯出

IText更改pdf模板資料並匯出

1.匯入maven相關依賴

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

注意: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<String, Object> 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<String> 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, "成功");
	}

模板:

執行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" }

執行截圖:


注:pdf空白處需先定義好標誌,此處pdf所用的標誌符就是各個屬性的key值。