找回密码
 会员注册
查看: 39|回复: 0

用java实现PDF的下载

[复制链接]

4

主题

0

回帖

13

积分

新手上路

积分
13
发表于 2024-9-12 19:56:31 | 显示全部楼层 |阅读模式
1.下载PDF模版2.导入依赖com.itextpdf7.2.5pom3.完整代码packagecom.by.controller;importcom.itextpdf.forms.PdfAcroForm;importcom.itextpdf.forms.fields.PdfFormField;importcom.itextpdf.kernel.font.PdfFont;importcom.itextpdf.kernel.font.PdfFontFactory;importcom.itextpdf.kernel.geom.PageSize;importcom.itextpdf.kernel.pdf.PdfDocument;importcom.itextpdf.kernel.pdf.PdfReader;importcom.itextpdf.kernel.pdf.PdfWriter;importorg.springframework.http.HttpHeaders;importorg.springframework.http.HttpStatus;importorg.springframework.http.MediaType;importorg.springframework.http.ResponseEntity;importorg.springframework.util.ResourceUtils;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;importjavax.servlet.http.HttpServletResponse;importjava.io.ByteArrayOutputStream;importjava.io.FileInputStream;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;importjava.util.Optional;/***控制器类,用于处理PDF模板填充及下载请求*/@RestControllerpublicclassPdfController{/***处理GET请求以下载填充了数据的PDF文件**@paramresponseHttpServletResponse对象,用于设置响应头和发送下载文件*@return响应实体,包含填充好数据的PDF字节流*@throwsIOException如果读取或写入PDF文件时发生异常*/@GetMapping("/download")publicResponseEntitytest(HttpServletResponseresponse)throwsIOException{//设置响应头,指示浏览器以附件形式下载文件,并设置文件名HttpHeadersheaders=newHttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);StringdownloadFileName=System.currentTimeMillis()+".pdf";response.setHeader("Content-Disposition","attachment;filename="+downloadFileName);//准备需要填充到PDF模板中的数据MapdataMap=newHashMap();dataMap.put("name","张三");dataMap.put("code","123456");//填充数据并生成带数据的PDF字节流byte[]pdfBytes=getPdf(dataMap);//创建并返回包含填充后PDF字节流的响应实体returnnewResponseEntity(pdfBytes,headers,HttpStatus.CREATED);}/***根据提供的数据填充PDF模板并返回填充后的PDF字节流**@paramdataMap需要填充到PDF模板中的键值对数据*@return填充好数据的PDF文件字节数组*@throwsIOException如果读取或写入PDF文件时发生异常*/privatebyte[]getPdf(MapdataMap)throwsIOException{//获取PDF模板文件路径StringsourcePdf=ResourceUtils.getURL("classpath:").getPath()+"/templates/1.pdf";//使用PDF阅读器加载模板文件PdfReaderpdfReader=newPdfReader(newFileInputStream(sourcePdf));//创建一个内存输出流用于存储填充好数据的PDF文件ByteArrayOutputStreamoutputStream=newByteArrayOutputStream();//创建PDF文档对象,连接读取器和输出流PdfDocumentpdf=newPdfDocument(pdfReader,newPdfWriter(outputStream));//设置默认页面大小为A4pdf.setDefaultPageSize(PageSize.A4);//获取PDF表单域对象PdfAcroFormform=PdfAcroForm.getAcroForm(pdf,true);Mapfields=form.getFormFields();//设置字体,这里使用的是"STSong-Light"字体PdfFontcurrentFont=PdfFontFactory.createFont("STSong-Light","UniGB-UCS2-H",PdfFontFactory.EmbeddingStrategy.PREFER_NOT_EMBEDDED);//遍历待填充的数据,并将其填入对应的表单域dataMap.forEach((key,value)->{Optional formFieldOptional=Optional.ofNullable(fields.get(key));formFieldOptional.ifPresent(formField->{//设置字体并替换表单域的值formField.setFont(currentFont).setValue(value);});});//锁定并合并所有表单域,使其无法再编辑form.flattenFields();//关闭PDF文档,释放资源pdf.close();//将填充好的PDF文件转换为字节数组并返回returnoutputStream.toByteArray();}}4.模版位置
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 01:58 , Processed in 0.961810 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表