导包

pom.xml引入jar包

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

字体

在resources文件夹下创建文件夹pdfFont,放入simhei.ttf(黑体)字体文件,备用

导出

ElectricityPlanDTO 类为导出数据对象
传入作为页面条件查询过滤数据

    /*** 导出用户信息到excel/pdf* @return*/@SuppressWarnings("unchecked")@RequestMapping(value = "/exportPDF" , method = RequestMethod.GET)@ResponseBodypublic String delWarnPdfPrint( ElectricityPlanDTO electricityPlanDTO,HttpServletRequest req, HttpServletResponse resp) throws Exception {File file = null;InputStream fin = null;ServletOutputStream out = null;/*******pdf文件内容生成开始*********/Document document = new Document(PageSize.A4, 25, 25, 25, 25);Subject subject = SecurityUtils.getSubject();SysUser sysUser = (SysUser)subject.getPrincipal();List<ElectricityPlanDTO> planList = electricityPlanService.getElectricByPlan(sysUser.getDeptid(),electricityPlanDTO);Map<String,Object> dataMap = new HashMap<String,Object>();List<String> titles = new ArrayList<String>();titles.add("序号");titles.add("客户名称");titles.add("统一社会信用代码");titles.add("计划电量");titles.add("申报年月");titles.add("更新时间");titles.add("状态");dataMap.put("titles", titles);dataMap.put("list", planList);dataMap.put("title_content", "电量申报");dataMap.put("type", "table");//创建文件夹String filePar = null;Date nowTime = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");String time = sdf.format(nowTime);//获取当前时间字符串形式filePar = "C:" + File.separator + "electricityplan"+System.nanoTime();// 文件夹路径File myPath = new File( filePar );
//        file  = File.createTempFile("temp", Long.toString(System.nanoTime()));
//        file = new File(filePar+"/"+"电量申报.pdf");if (!myPath.exists()){myPath.mkdir();}file = new File(filePar + File.separator, time+".pdf");PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));// throws FileNotFoundException,/** 设中文字体*/BaseFont bfChinese = null;// FontFactory.getFont(FontFactory.COURIER,
// 14, Font.BOLD, new CMYKColor(0, 255, 0, 0);//大小,粗细,颜色try {bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);} catch (IOException e) {e.printStackTrace();}try {//加入页码
//            setFooter(writer,PDFUtil.bfChinese,10,PageSize.A4);document.open();//图片1String CHARACTOR_FONT_CH_BLACK = Thread.currentThread().getContextClassLoader().getResource("").getPath();String realReadPath = CHARACTOR_FONT_CH_BLACK + "pdfFont/elogo.png";Image image1 = Image.getInstance(realReadPath);//设置图片位置的x轴和y周image1.setAbsolutePosition(50f, 780f);//设置图片的宽度和高度image1.scaleAbsolute(125, 40);//将图片1添加到pdf文件中document.add(image1);//            // 加入文字水印
//            PdfContentByte waterMar = writer.getDirectContentUnder();
//            // 开始设置水印
//            waterMar.beginText();
//            // 设置水印透明度
//            PdfGState gs = new PdfGState();
//            // 设置填充字体不透明度为0.4f
//            gs.setFillOpacity(0.4f);
//            try {
//                // 设置水印字体参数及大小  (字体参数,字体编码格式,是否将字体信息嵌入到pdf中(一般不需要嵌入),字体大小)
//                waterMar.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), 60);
//                // 设置透明度
//                waterMar.setGState(gs);
//                // 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
//                waterMar.showTextAligned(Element.ALIGN_RIGHT, "国网南京供电公司" , 500, 430, 45);
//                // 设置水印颜色
//                waterMar.setColorFill(BaseColor.GRAY);
//                //结束设置
//                waterMar.endText();
//                waterMar.stroke();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }finally {
//                waterMar = null;
//                gs = null;
//            }//            // 加入图片水印
//            PdfContentByte waterMar = writer.getDirectContentUnder();
//            // 开始设置水印
//            waterMar.beginText();
//            // 设置水印透明度
//            PdfGState gs = new PdfGState();
//            // 设置笔触字体不透明度为0.4f
//            gs.setStrokeOpacity(0.2f);
//            try {
//                String CHARACTOR_FONT_CH_BLACK = Thread.currentThread().getContextClassLoader().getResource("").getPath();
//                String realReadPath = CHARACTOR_FONT_CH_BLACK + "pdfFont/elogo.png";
//                Image image = Image.getInstance(realReadPath);
//                // 设置坐标 绝对位置 X Y
//                image.setAbsolutePosition(200, 500);
//                // 设置旋转弧度
//                image.setRotation(30);// 旋转 弧度
//                // 设置旋转角度
//                image.setRotationDegrees(45);// 旋转 角度
//                // 设置等比缩放
//                image.scalePercent(90);// 依照比例缩放
//                // image.scaleAbsolute(125,80);//自定义大小
//                // 设置透明度
//                waterMar.setGState(gs);
//                // 添加水印图片
//                waterMar.addImage(image);
//                // 设置透明度
//                waterMar.setGState(gs);
//                //结束设置
//                waterMar.endText();
//                waterMar.stroke();
//            } catch (IOException e) {
//                e.printStackTrace();
//            }finally {
//                waterMar = null;
//                gs = null;
//            }// 标题居中String title_content = (String) dataMap.get("title_content");Paragraph title = PDFUtil.getParagraph(new Chunk(title_content,new Font(PDFUtil.bfChinese,16,Font.BOLD)));title.setAlignment(Paragraph.ALIGN_CENTER);document.add(title);SimpleDateFormat datetimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Paragraph now = PDFUtil.getParagraph(new Chunk(DateUtils.date2Str(DateUtils.getDate(),datetimeFormat) ,new Font(PDFUtil.bfChinese,10,Font.NORMAL)));now.setAlignment(Paragraph.ALIGN_RIGHT);document.add(now);// 表格标题List<String> titless = (List<String>) dataMap.get("titles");int len = titless.size();PdfPTable table = new PdfPTable(len);table.setSpacingBefore(20);table.setSpacingAfter(30);for(int i=0; i<len; i++){ //设置标题String str = titles.get(i);table.addCell(PDFUtil.getParagraph(str));}// 表格数据String type = (String) dataMap.get("type");if ("table".equals(type)){List<ElectricityPlanDTO> logList = (List<ElectricityPlanDTO>) dataMap.get("list");table = logPdf(table, logList);}document.add(table);// 关闭document.close();} catch (DocumentException e) {e.printStackTrace();} finally {document.close();}/*******pdf文件生成结束*********/try {fin = new FileInputStream(file);resp.setCharacterEncoding("utf-8");resp.setContentType("application/pdf");String filename = time;// 设置浏览器以下载的方式处理该文件if (req.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {filename = URLEncoder.encode(filename, "UTF-8");} else {filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");}//下载使用 删除可用(js2方法)直接在页面显示不下载resp.addHeader("Content-Disposition", "attachment;filename=" + filename + ".pdf");//这里填想要的文件格式out = resp.getOutputStream();byte[] buffer = new byte[512]; // 缓冲区int bytesToRead = -1;// 通过循环将读入的Word文件的内容输出到浏览器中while ((bytesToRead = fin.read(buffer)) != -1) {out.write(buffer, 0, bytesToRead);}} finally {if (fin != null)fin.close();if (out != null)out.close();if (file != null)file.delete(); // 删除临时文件if (myPath != null)myPath.delete();}return null;}public PdfPTable logPdf(PdfPTable table, List<ElectricityPlanDTO> logList){int logCount = logList.size();//定义中文字体大小Font f10 = new Font(PDFUtil.bfChinese, 10, Font.NORMAL);Font f12 = new Font(PDFUtil.bfChinese, 12, Font.NORMAL);Font f26 = new Font(PDFUtil.bfChinese, 26, Font.NORMAL);//一号字体if (logList != null && logCount > 0){for(int i=0; i<logCount; i++){ElectricityPlanDTO plan = logList.get(i);String num=Integer.toString( i+1);table.addCell(PDFUtil.getParagraph(num,f12));String name = plan.getName();table.addCell(PDFUtil.getParagraph(name));String code = plan.getCompanyCode();table.addCell(PDFUtil.getParagraph(code));String power = plan.getScheduledPower();table.addCell(PDFUtil.getParagraph(power));SimpleDateFormat date_sdf = new SimpleDateFormat("yyyy-MM-dd");Date declareTime = plan.getDeclareTime() ;String time= DateUtils.date2Str(declareTime,date_sdf);table.addCell(PDFUtil.getParagraph(time));String updateTime = plan.getUpdateTime() ;table.addCell(PDFUtil.getParagraph(updateTime));String status="";if(plan.getStatus()==0){status="未申报";}else if(plan.getStatus()==1){status="待审核";}else if(plan.getStatus()==2){status="已申报";}table.addCell(PDFUtil.getParagraph(status));}//设置列宽float[] columnWidths = { 1f, 3f, 3f,2f,3f,3f,2f };try {table.setWidths(columnWidths);} catch (DocumentException e) {e.printStackTrace();}}return table;}

工具包PDFUtil

package com.linksaint.defence.electricity.controller;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;import com.itextpdf.text.Chunk;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;/*** @ClassName: PDFUtil* @Description:* @author yangkunpeng* @date 2020年1月7日**/
public class PDFUtil {// 对参数的封装形式比如{name}public static final String BEGIN = "{";public static final String END = "}";// 换行形式{#}public static final String NEW_LINE = "#";// 默认的行间距、首行距离等,自己添加public static final float DEFAULT_LEADING = 20;public static final float DEFAULT_LINE_INDENT = 30;// 基本字体和样式public static BaseFont bfChinese;public static Font fontChinese;public static Font UNDER_LINE = null;static{try {// SIMKAI.TTF 默认系统语言,这里没使用第三方语言包String CHARACTOR_FONT_CH_BLACK = Thread.currentThread().getContextClassLoader().getResource("").getPath();String realReadPath = CHARACTOR_FONT_CH_BLACK + "pdfFont/simhei.ttf";bfChinese = BaseFont.createFont(realReadPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
//            bfChinese = BaseFont.createFont("D:/home/java/contract/web/fonts/simsun.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);//bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);fontChinese = new Font(bfChinese, 12, Font.NORMAL);UNDER_LINE = new Font(bfChinese, 14,Font.UNDERLINE);} catch (DocumentException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}// 默认样式public static Paragraph getParagraph(String context){return getParagraph(context,fontChinese);}public static Paragraph getParagraph(Chunk chunk){return new Paragraph(chunk);}// 指定字体样式public static Paragraph getParagraph(String context,Font font){return new Paragraph(context,font);}// 获得新行,首行缩进,和行间距public static Paragraph getNewParagraph(String context,float fixedLeading,float firstLineIndent){Paragraph p = getParagraph(context);p.setLeading(fixedLeading);p.setFirstLineIndent(firstLineIndent);return p;}public static Paragraph getParagraph(String content , Font font , float fixedLeading , int alignment){Paragraph p = getParagraph(content);p.setFont(font);p.setLeading(fixedLeading);p.setAlignment(alignment);return p;}// 默认段落样式public static Paragraph getDefaultParagraph(String context){Paragraph p = getParagraph(context);// 默认行间距p.setLeading(DEFAULT_LEADING);// 默认首行空隙p.setFirstLineIndent(DEFAULT_LINE_INDENT);return p;}// 将参数和字符串内容组合成集合public static List<Paragraph> createParagraphs(String context ,Map<String,Object> map){int index = 0;List<Paragraph> list = new ArrayList<Paragraph>();Paragraph p = getDefaultParagraph(null);while((index  = context.indexOf(BEGIN)) > -1){String text = context.substring(0,index);context = context.substring(index, context.length());index = context.indexOf(END);String param =  null;if(index > 0){param = context.substring(BEGIN.length(),index);}p.add(text);if(!NEW_LINE.equals(param)){Object value = map.get(param);if(value != null){p.add(new Chunk(value.toString(),UNDER_LINE));}else{p.add(new Chunk(""));}}else{list.add(p);p = getDefaultParagraph(null);p.setSpacingBefore(0);}context = context.substring(index+END.length(),context.length());}list.add(p);list.add(getParagraph(context));return list;}
}

前端vue调用

axios请求
this.$refs.listLayout.getQueryValues()为查询过滤参数

// itextpdfexportPDF() {downFile("sys/electricityPlan/exportPDF",this.$refs.listLayout.getQueryValues() )},/*** 下载文件* @param url* @param parameter* @returns {*}export function downFile (url, parameter) {return axios({url: url,params: parameter,method: 'get',responseType: 'blob'}).then(response=>{if(response != null){const disposition = response.headers["content-disposition"].split(";");const fileName = decodeURI(disposition[disposition.length - 1].split("=")[1]).replace(/^\"|\"$/g, "");const blob = new Blob([response.data])if (window.navigator.msSaveOrOpenBlob) {// 兼容IE10navigator.msSaveBlob(blob,fileName);} else {var a = document.createElement("a");a.href = URL.createObjectURL(blob);;a.download = fileName;a.dispatchEvent(new MouseEvent('click', {bubbles: true, cancelable: true, view: window}));URL.revokeObjectURL(a.href);}}})
}
*/

Java使用itextpdf导出数据为PDF相关推荐

  1. Java项目如何导出数据为 PDF 文件?

    文章目录 Java项目如何导出数据为 PDF 文件? 一.代码结构如下 二.代码说明 1.添加依赖 pom.xml 3.添加字体 4.PDF 导出工具类 三.效果图 结语 Java项目如何导出数据为 ...

  2. Java通过IText导出word和pdf

    最近做的项目中需要用到导出word和pdf的功能(还有图表),在网上找了很多资料,最后敲定用了IText组件,下面是我项目中的一个Demo,记录了一下,希望对需要的人有帮助. 相关jar包下载地址:h ...

  3. Java后台phantomjs导出复杂图表PDF

    当前导出PDF工具 java后端如何导出像前端用echarts那么漂亮而且还有带有图表的PDF呢,或者图片.目前后端导出word或者excel都是有县城的jar,导出简单的图表也有的简单的jfreec ...

  4. Java+Aspose.diagram,导出数据到Visio

    背景:java,家谱图导出,主要包括家庭成员图片以及有关系进行连线 项目环境请参考 https://download.csdn.net/download/weixin_49456013/2008526 ...

  5. Java使用poi导出数据到excel(包括xls和xlsx两种格式)并通过浏览器下载

    情景:将数据导出到excel是java开发常用的功能,数据量不大的时候,xls和xlsx两种格式的文件都行,但是数据量太大的时候就有区别了,xls格式的文件一个sheet页最多只能存六万多条数据,而x ...

  6. java通过poi导出excel和pdf

    [背景] 由于各户的需求,所以需要增加导出excel这个功能,其实大部分系统都需要这个导出功能的,所以这里也就不详细说明具体导出的背景了O(∩_∩)O~ 干完导出excel将现有的导出pdf也进行了独 ...

  7. java处理word插入数据转PDF及下载PDF

    欢迎使用Markdown编辑器 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.引入jar包 二.使用步骤 1.前端上传电子签名图片 2.java下载电子签名图片 ...

  8. Java实现Oracle导出数据到Excel

    1.导入相应的jar包(jxl.jar 和 数据库连接的jar包) 2.写数据库连接的工具类 import java.sql.Connection; import java.sql.DriverMan ...

  9. java用模板导出数据表格

    1.创建表格: 2.编写导出的controller; @PostMapping("/cust/report/customer/export") public void export ...

最新文章

  1. Ant Design Vue中a-select组件下拉列表在局部滚动时不跟随问题解决方法
  2. DZX2无法读取会员短消息
  3. Ubuntu 18.04 更改静态IP
  4. 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等
  5. SpringBatch读文件(FlatFileItemReader)写据库(MyBatisBatchItemWriter)(四)
  6. 联想小新300加固态_就联想小新 Pro 13 固态硬盘混用一事,官方回应
  7. java嵌入groovy脚本,java-如何捕获传递给Groovy脚本的参数?
  8. conda deactivate python3_conda进行python环境隔离
  9. (大数据工程师学习路径)第二步 Vim编辑器----Vim文档编辑
  10. 【设计】1359- Umi3 如何实现插件化架构
  11. uni-app在华为应用市场上架审核无法通过,涉及个人信息:IMEI用户数据收集问题
  12. matlab rloess,R语言利用loess如何去除某个变量对数据的影响详解
  13. 吴恩达Coursera深度学习课程 deeplearning.ai (5-2) 自然语言处理与词嵌入--编程作业(二):Emojify表情包
  14. The Things Network LoRaWAN Stack V3 学习笔记 2.7.1 Web 前端开发调试
  15. APK应用程序的解包、修改、编辑、打包及应用(三)
  16. 【优化覆盖】基于matlab粒子群算法优化无人机编队布局求解车载网络通信覆盖优化问题【含Matlab源码 2021期】
  17. ajax调用第三方web服务,js调用soapWebService服务
  18. » 别了!我的大郅! 在这个雨夜仅此纪念我心目中那个追风少年!
  19. 计算机怎么安装俩个操作系统,想安装双操作系统,原来是win7,想再安装一个win10,两个系统能共用电脑里的软件吗?...
  20. 【机械】基于matlab模拟打桩机运动学仿真附matlab代码

热门文章

  1. 技术培训|RAC 宕机罪犯案情探析之子游标预告
  2. 作为软件开发人员,如何简单的推销自己
  3. BD资深员工离职总结:资质平庸的人如何做一个好员工?
  4. MySQL中的sum函数用法实例详解
  5. outlook2010点签名死机
  6. 3.手机连接电脑端热点配置host
  7. 华为笔记本没有网线口_华为笔记本电脑的网线不知道在哪接,可以看看这个可以拔出来嘛。...
  8. 谈谈如何高效学习开源项目
  9. Smali 语法解析——Hello World
  10. 真无线蓝牙耳机性价比排行榜,2022热门蓝牙耳机推荐