Java创建pdf的代码

news2024/11/18 21:52:14

一、概述

以下代码可以在指定文件夹内创建一个简历pdf。

以下代码生成pdf,主要是设置cell所占的行、列、内容。

二、代码

1.需要的jar包

itext-asian-5.2.0.jar
itextpdf-5.5.5.jar

2.个人信息类MsgUtil.java

这个类里面放了个人信息;也可以放多个人的、生成多个pdf;代码如下:


import java.util.ArrayList;
import java.util.HashMap;

/**
 * 个人信息类
 */

public class MsgUtil {


    public static final ArrayList<HashMap<String,String>> baseMsgList = new ArrayList<>();
    public static final ArrayList<ArrayList<HashMap<String,String>>> experienceList = new ArrayList<>();



    static{
        //装入第一个人的信息
        addMsg1();

    }

    /**
     * 装入1个人的信息,还有就复制下这个方法,再加,然后static里调用下装进去
     */
    private static void addMsg1(){
        //第一个人的信息

        //这个只有1行数据,是1个map
        HashMap<String, String> baseMsgListMy = new HashMap<>();
        baseMsgList.add(baseMsgListMy);



        baseMsgListMy.put("FullName","小明");
        baseMsgListMy.put("Gender","男");
        baseMsgListMy.put("Birthdate","2002-01-10");
        baseMsgListMy.put("Card","1001112002011VWXYZ");

        baseMsgListMy.put("HomeAddress","北京");
        baseMsgListMy.put("detailAdress","海淀区");
        baseMsgListMy.put("Tel","142xxxxzzzz");
        baseMsgListMy.put("E_mail","test@qq.com");
        baseMsgListMy.put("Wechat","testqq");
        baseMsgListMy.put("Linkman","大明");
        baseMsgListMy.put("Relationship","朋友");
        baseMsgListMy.put("LinkmanTel","123ddddpppp");


        //工作经历list
        ArrayList<HashMap<String, String>> experienceListMy = new ArrayList<>();
        experienceList.add(experienceListMy);

        //工作经历,第一个map(第一行数据,还有就再加)
        HashMap<String, String> experienceMap1 = new HashMap<>();
        experienceListMy.add(experienceMap1);
        experienceMap1.put("Type","2");
        experienceMap1.put("TimeFrom","2022.01.01");
        experienceMap1.put("Time","2022.02.02");
        experienceMap1.put("School","公司");
        experienceMap1.put("Degree","员工");

        //工作经历,第二个map(第二行数据,还有就再加)
        HashMap<String, String> experienceMap2 = new HashMap<>();
        experienceListMy.add(experienceMap2);
        experienceMap2.put("Type","2");
        experienceMap2.put("TimeFrom","2022.01.01");
        experienceMap2.put("Time","2023.01.01");
        experienceMap2.put("School","国企");
        experienceMap2.put("Degree","员工");

        HashMap<String, String> experienceMap3 = new HashMap<>();
        experienceListMy.add(experienceMap3);
        experienceMap3.put("Type","1");
        experienceMap3.put("TimeFrom","2122.01.01");
        experienceMap3.put("Time","2123.01.01");
        experienceMap3.put("School","大学");
        experienceMap3.put("Degree","学士");

        HashMap<String, String> experienceMap4 = new HashMap<>();
        experienceListMy.add(experienceMap4);
        experienceMap4.put("Type","1");
        experienceMap4.put("TimeFrom","2122.01.01");
        experienceMap4.put("Time","2123.01.01");
        experienceMap4.put("School","高中");
        experienceMap4.put("Degree","毕业");


    }


}

3.生成pdf工具类CreatePdfUtil.java

这个类有生成pdf的方法,如果调整pdf格式就需要修改这个类,代码如下:


import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;



import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;
import java.util.List;

/**
 * 生成PDF简历工具类
 */
public class CreatePdfUtil {


	public static void createPdf(Integer total, String filePath){



		try{

            System.out.println("生成所有开始时间:"+System.currentTimeMillis());

			if(total!=null && total>0){
				int count=0;
				
                ArrayList<HashMap<String,String>> baseMsgList = MsgUtil.baseMsgList;
                
				for(int i=0;i<total;i++){
	    		    
	    			if(baseMsgList!=null && baseMsgList.size()>0){
                        HashMap<String,String> baseMsgBean = baseMsgList.get(i);
	    				if(baseMsgBean!=null && baseMsgBean.get("Card") != null){

                            ArrayList<HashMap<String,String>> experienceListBean = MsgUtil.experienceList.get(i);
	    					List<HashMap<String,String>> educationList = new ArrayList<HashMap<String,String>>();//教育经历
	    					List<HashMap<String,String>> workList = new ArrayList<HashMap<String,String>>();//工作经历
	    					if( experienceListBean!= null && experienceListBean.size()>0){
	    						for(int j=0;j<experienceListBean.size();j++){
                                    HashMap<String,String> Bean = experienceListBean.get(j);
	    							if("1".equals(Bean.get("Type"))){//教育
	    								educationList.add(Bean);
	    							}else if("2".equals(Bean.get("Type"))){//工作
	    								workList.add(Bean);
	    							}
	    						}
	    					}

	    					try{
	    						Document document = new Document(PageSize.A4);
	    						PdfWriter.getInstance(document,new FileOutputStream(filePath+baseMsgBean.get("Card")+".pdf"));
	    						document.open();
	    						PdfPTable table = createTable(baseMsgBean,workList,educationList);
	    						document.add(table);
	    						document.close();
	    					}catch(Exception e){
                                System.out.println("生成简历异常!");
	    						e.printStackTrace();
	    						//生产简历异常后删除创建的文件
	    						String filepath = filePath+baseMsgBean.get("Card")+".pdf";
	    						File file = new File(filepath);
	    						if (file.exists()) {
	    							file.delete();
	    						}
	    					}
	    					count = count+1;
	    				}
	    			}
	    		}

                System.out.println("生成所有结束时间:"+System.currentTimeMillis());


	    	}
		}catch(Exception e){
			System.out.println("生成简历失败!");
			System.out.println(e);
		}
    }

	public static PdfPTable createTable(HashMap<String,String> baseMsgBean, List<HashMap<String,String>> workList, List<HashMap<String,String>> educationList)throws DocumentException, IOException {

		BaseFont bfChinese = BaseFont.createFont( "STSongStd-Light" ,"UniGB-UCS2-H",false);
        Font font = new Font(bfChinese,11, Font.NORMAL, BaseColor.BLACK);
        Font font1 = new Font(bfChinese,11, Font.BOLD, BaseColor.BLACK);
        PdfPTable table = new PdfPTable(7);
        table.setWidthPercentage(110f);
        table.setWidths(new float[]{1.1f,1.1f,1,1,1.3f,1,1});
        table.setHorizontalAlignment(1);
        PdfPCell cell;
        cell = new PdfPCell(new Phrase("我的简历",new Font(bfChinese,20, Font.BOLD, BaseColor.BLACK)));
        cell.setColspan(7);
        cell.setPaddingBottom(8);
        cell.setBorder(0);
        cell.setHorizontalAlignment(1);
        table.addCell(cell);


        cell = new PdfPCell(new Paragraph("基本信息",font1));
        cell.setRowspan(2);
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        table.addCell(cell);
        table.addCell(new Phrase("姓名",font1));
        table.addCell(new Phrase(baseMsgBean.get("FullName"),font));
        table.addCell(new Phrase("性别",font1));
        table.addCell(new Phrase(baseMsgBean.get("Gender"),font));
        table.addCell(new Phrase("出生时间",font1));
        String birthdate = baseMsgBean.get("Birthdate");

        table.addCell(new Phrase(birthdate,font));


        table.addCell(new Phrase("身份证号",font1));
        cell = new PdfPCell(new Phrase(baseMsgBean.get("Card"),font));
        cell.setColspan(5);
        table.addCell(cell);

        cell = new PdfPCell(new Phrase("通讯信息",font1));
        cell.setRowspan(3);
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        table.addCell(cell);
        table.addCell(new Phrase("常住联系地址",font1));
        cell = new PdfPCell(new Phrase(baseMsgBean.get("HomeAddress")+baseMsgBean.get("detailAdress"),font));
        cell.setColspan(5);
        table.addCell(cell);

        table.addCell(new Phrase("手机号",font1));
        String phone=baseMsgBean.get("Tel");

        table.addCell(new Phrase(phone,font));
        table.addCell(new Phrase("邮箱",font1));
        table.addCell(new Phrase(baseMsgBean.get("E_mail"),font));
        table.addCell(new Phrase("微信号",font1));
        table.addCell(new Phrase(baseMsgBean.get("Wechat"),font));

        table.addCell(new Phrase("紧急联系人",font1));
        table.addCell(new Phrase(baseMsgBean.get("Linkman"),font));
        table.addCell(new Phrase("与之关系",font1));
        table.addCell(new Phrase(baseMsgBean.get("Relationship"),font));
        table.addCell(new Phrase("手机号",font1));
        String linkManPhone=baseMsgBean.get("LinkmanTel");

        table.addCell(new Phrase(linkManPhone,font));

        cell = new PdfPCell(new Phrase("工作经历",font1));
        if(workList!=null && workList.size()>0){
        	cell.setRowspan(workList.size()+1);
        }else{
        	cell.setRowspan(1);
        }
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase("时间",font1));
        cell.setColspan(2);
        cell.setHorizontalAlignment(1);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase("单位/公司",font1));
        cell.setColspan(2);
        cell.setHorizontalAlignment(1);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase("岗位及工作内容",font1));
        cell.setColspan(2);
        cell.setHorizontalAlignment(1);
        table.addCell(cell);
        if(workList!=null && workList.size()>0){
        	for(int i=0;i<workList.size();i++){
        		HashMap<String,String> experienceBean = workList.get(i);
        		cell = new PdfPCell(new Phrase(experienceBean.get("TimeFrom")+"-"+experienceBean.get("Time"),font));
        		cell.setColspan(2);
        		cell.setHorizontalAlignment(1);
        		table.addCell(cell);
        		cell = new PdfPCell(new Phrase(experienceBean.get("School"),font));
        		cell.setColspan(2);
        		table.addCell(cell);
        		cell = new PdfPCell(new Phrase(experienceBean.get("Degree"),font));
        		cell.setColspan(2);
        		table.addCell(cell);
        	}
        }
        cell = new PdfPCell(new Phrase("教育经历",font1));
        if(educationList!=null && educationList.size()>0){
        	cell.setRowspan(educationList.size()+1);
        }else{
        	cell.setRowspan(1);
        }
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase("时间",font1));
        cell.setColspan(2);
        cell.setHorizontalAlignment(1);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase("院校/培训机构",font1));
        cell.setColspan(2);
        cell.setHorizontalAlignment(1);
        table.addCell(cell);
        cell = new PdfPCell(new Phrase("取得学位/资质",font1));
        cell.setColspan(2);
        cell.setHorizontalAlignment(1);
        table.addCell(cell);
        if(educationList!=null && educationList.size()>0){
        	for(int i=0;i<educationList.size();i++){
        		HashMap<String,String> experienceBean = educationList.get(i);
        		cell = new PdfPCell(new Phrase(experienceBean.get("Time"),font));
                cell.setColspan(2);
                cell.setHorizontalAlignment(1);
                table.addCell(cell);
                cell = new PdfPCell(new Phrase(experienceBean.get("School"),font));
                cell.setColspan(2);
                table.addCell(cell);
                cell = new PdfPCell(new Phrase(experienceBean.get("Degree"),font));
                cell.setColspan(2);
                table.addCell(cell);
        	}
        }



        return table;
	}
}

4.入口方法Main.java

这个类就是程序的入口,代码如下:

public class Main {

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

        //生成pdf的个数,生成pdf存放的文件夹
        CreatePdfUtil.createPdf(1,"f:/jl/");
    }

}

三、运行结果

上方代码执行后,可以生成一份个人简历pdf,如下:
在这里插入图片描述

如果需要增加内容、调整内容,自行修改代码即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python量化投资——股票择时到底能否赚钱?TA-Lib中33种技术指标有效性回测研究

TA-Lib中33种技术指标回测研究Python量化投资——TA-Lib中33种股票择时技术指标的有效性研究为什么要做这个评测技术指标清单评测方法评测工具期待你的意见Python量化投资——TA-Lib中33种股票择时技术指标的有效性研究 为什么要做这个评测 技术指标是股票交易中最常用的技术…

CSS 常见布局

文章目录CSS 常见布局单列布局单列布局&#xff08;不通栏&#xff09;单列布局&#xff08;通栏&#xff09;双列布局floatoverflow:hiddenflexgridCSS 常见布局 单列布局 单列布局&#xff08;不通栏&#xff09; <!DOCTYPE html> <html><head><meta …

推荐系统之推荐中心逻辑

5.5 推荐中心逻辑 学习目标 目标 无应用 无 5.5.1 推荐中心作用 推荐中一般作为整体召回结果读取与排序模型进行排序过程的作用&#xff0c;主要是产生推荐结果的部分。 5.5.2 推荐目录 server目录为整个推荐中心建立的目录 recall_service.:召回数据读取目录reco_centor:推…

如何利用 Selenium 对已打开的浏览器进行爬虫!

大家好&#xff0c;我是安果&#xff01;在对某些网站进行爬虫时&#xff0c;如果该网站做了限制&#xff0c;必须完成登录才能展示数据&#xff0c;而且只能通过短信验证码才能登录这时候&#xff0c;我们可以通过一个已经开启的浏览器完成登录&#xff0c;然后利用程序继续操…

STM32—超声波测距

超声波简介 超声波测距模块是用来测量距离的一种产品&#xff0c;通过发送和收超声波&#xff0c;利用时间差和声音传播速度&#xff0c; 计算出模块到前方障碍物的距离。 型号&#xff1a;HC-SR04 时序图 怎么让它发送波 Trig触发信号&#xff0c;给Trig端口至少10us的高电平…

“华为杯”研究生数学建模竞赛2005年-【华为杯】A题:城市交通管理中的出租车规划(附获奖论文)

赛题描述 A: Highway Traveling time Estimate and Optimal Routing Ⅰ Highway traveling time estimate is crucial to travelers. Hence, detectors are mounted on some of the US highways. For instance, detectors are mounted on every two-way six-lane highways o…

Postman使用详解

一、常见类型的接口请求查询参数接口接口地址中&#xff0c;&#xff1f;问号后面的部分&#xff0c;即查询参数&#xff1b;该部分内容由键值对组成&#xff0c;有多个时&#xff0c;用&符号分隔。请求方法&#xff1a;GET表单类型接口1&#xff09;HTTP请求&#xff0c;一…

电脑如何重装系统?Win10系统安装只需这两招!

电脑在日常生活和工作中是使用的比较多的。随着时间的推移&#xff0c;电脑越来越卡&#xff0c;系统越来越慢&#xff0c;或者是由于其他情况&#xff0c;有些人会选择对电脑进行重新安装。 但是很多人不知道系统安装前要注意什么&#xff0c;以及安装有哪些方法&#xff0c;…

论文笔记:Modeling Kinect Sensor Noise for Improved 3D Reconstruction and Tracking

文章目录概述效果如何&#xff1f;take home messagelateral noise 模型axial noise 模型实验实验设定lateral noise与axial noise的定义axial noise与lateral noise的提取噪声分布的结果和建模最终拟合得到的lateral noise模型最终拟合得到的axial noise模型应用噪声模型至Kin…

【Spring源码】插播一个创建代理对象的wrapIfNecessary()方法

在文章【分析向】没有三级缓存会导致什么&#xff1f; 中&#xff0c;提到过一个方法——wrapIfNecessary()&#xff0c;就是在这个方法中为Bean创建的代理对象&#xff0c;介于篇幅原因&#xff0c;当时并咩有详细&#x1f50e;分析这个方法&#xff0c;这篇文章我们进去wrapI…

第三章 ArcGIS坐标系与投影变换

文章目录第一节 坐标系的概念1.1 坐标1.2 坐标系2 基准面介绍2.1 基准面概念2.2几种基准面的说明2.3 椭球体参数的区别3 坐标系的分类3.1 两种坐标系3.2 区别3.3 度&#xff08;分、秒&#xff09;和米的转换&#xff08;高级&#xff09;4 投影坐标系4.1 两种投影方法介绍4.2 …

5、判定法

定义 判定表法&#xff1a; 分析和表述若干输入条件下&#xff0c;被测对象针对这些输入做出响应的一种工具在遇到逻辑复杂的业务时&#xff0c;可以利用判定表理清期间的逻辑关系。 重要概念 条件&#xff1a; 条件桩&#xff1a;需求规格说明书定义的被测对象的所有输入条…

图解Attention

深度学习知识点总结 专栏链接: https://blog.csdn.net/qq_39707285/article/details/124005405 此专栏主要总结深度学习中的知识点&#xff0c;从各大数据集比赛开始&#xff0c;介绍历年冠军算法&#xff1b;同时总结深度学习中重要的知识点&#xff0c;包括损失函数、优化器…

面试官:JVM是如何判定对象已死的?

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 知道的越多&#xff0c;才知知道的越少。——苏格拉底 文章目录引用计数算法可达性分析算法引用类型Dead Or Alive永久代真的"永久"吗&#xff1f;垃圾收集算法标记-清除算法标记-复制算法标记-整理…

网络编程基础

1 网络协议栈分层协议栈是指网络中各层协议的总和&#xff0c;反映了一个网络中数据传输的过程&#xff0c;由上层协议到底层协议&#xff0c;使用分层实现提高灵活性以及简化实现。OSI七层模型 和TCP/IP五层模型&#xff1a;物理层&#xff1a;考虑的是怎样才能在连接各种计算…

学长教你学C-day14-C语言文件操作

“我们的C语言学习也马上接近尾声了&#xff0c;今天我们来讲最后一个内容&#xff1a;C语言的文件夹操作。” “那么什么是文件呢&#xff1f;其实C语言里的文件是数据源的一种&#xff0c;最主要的作用是保存数据。例如txt、word、pdf等等都是不同的存储数据的形式。通过C语…

WebView与 JS 交互方式

一 前言 现在很多App里都内置了Web网页&#xff08;Hybrid App&#xff09;&#xff0c;比如说很多电商平台&#xff0c;淘宝、京东、聚划算等等&#xff0c;如下图 上述功能是由Android的WebView实现的&#xff0c;其中涉及到Android客户端与Web网页交互的实现&#xff0c;今…

Vue路由使用的几个注意点

前言 在使用vue的路由的时候&#xff0c;是有几个需要注意的点&#xff0c;下面一一说明 组件的分类 组件分为两种&#xff1a;路由组件和一般组件 路由组件是注册到路由器中&#xff0c;并且是由路由相关标签代码进行展示 一般组件是注册到组件中&#xff0c;通过组件标签…

Linux常用命令——route命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) route 显示并设置Linux中静态路由表 补充说明 route命令用来显示并设置Linux内核中的网络路由表&#xff0c;route命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信&#xff0c;需要一台连接两个…

【软件架构思想系列】从伟人《矛盾论》中悟到的软件架构思想真谛:“对象”即事物,“函数”即运动变化...

引子 形而上学和辩证法两种宇宙观是截然相反的。“所谓形而上学的或庸俗进化论的宇宙观,就是用孤立的、静止的和片面的观点去看世界。这种宇宙观把世界一切事物,一切事物的形态和种类,都看成是永远彼此孤立和永远不变化的”,“和形而上学的宇宙观相反,唯物辩证法的宇宙观主…