iText操作pdf
最近有个任务是动态的创建pdf根据获取到的内容,百度到的知识点都比较零散,官方文档想必大家也不容易看懂。下文是我做出的汇总``
public class CreatePdfUtils {public static void create(){//准备File file = new File("C:\\code\\base-project-backend\\pdf\\"+"1.pdf");Document document = new Document();PdfWriter.getInstance(document,new FileOutputStream(file));document.open();document.setPageSize(PageSize.A4); //这是第一页的尺寸大小document.add(new Paragraph("hello")); //这是第一页的内容Rectangle rectangle = new Rectangle(1111, 1111); //这是第二页的尺寸大小rectangle.setBackgroundColor(new BaseColor(11,11,11));//这是第二页的背景颜色document.setPageSize(rectangle); //在这里设置第二页document.newPage(); //这里是真正创建第二页document.add(new Paragraph("wordld"));//第二页增加内容//结束document.close();}
}
接下来还会继续完善
public static void createPdf(){File file = new File("C:\\code\\base-project-backend\\shiting-module-system\\shiting-module-system-biz\\src\\main\\java\\com\\shiting\\basic\\module\\system\\controller\\admin\\pdf1.pdf");Document document = new Document(PageSize.B4.rotate());try {//引入中文字体,一般从c:\\windows\\Fonts下找到BaseFont bfChinese = BaseFont.createFont("shiting-module-system/shiting-module-system-biz/src/main/java/com/shiting/basic/module/system/util/simfang.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);Font fontH1 = new Font(bfChinese, 25, Font.BOLD);//字体1Font fontH2 = new Font(bfChinese, 12, Font.NORMAL);//字体2PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));document.open();Paragraph p3 = new Paragraph("黄河流域历史遗留矿山调查送检样品交接表单",fontH1);p3.setAlignment(Element.ALIGN_CENTER);p3.setSpacingAfter(25);document.add(p3);PdfPTable pdfPTable = new PdfPTable(4);pdfPTable.setHorizontalAlignment(Element.ALIGN_CENTER);pdfPTable.setWidthPercentage(100);pdfPTable.setTotalWidth(new float[]{200,200,240,240});pdfPTable.setLockedWidth(true);//开始填充表格PdfPCell pdfPCell1 = new PdfPCell(new Phrase("批次编号:" + "20231019172338", fontH2));pdfPCell1.setBorderColor(new BaseColor(255,255,255));pdfPTable.addCell(pdfPCell1);PdfPCell pdfPCell2 = new PdfPCell(new Phrase("样品总数:" + "12", fontH2));pdfPCell2.setBorderColor(new BaseColor(255,255,255));pdfPTable.addCell(pdfPCell2 );PdfPCell pdfPCell3 = new PdfPCell(new Phrase("开始采样开始时间:" + "2023-10-10 13:31:12", fontH2));pdfPCell3.setBorderColor(new BaseColor(255,255,255));pdfPTable.addCell( pdfPCell3);PdfPCell pdfPCell4 = new PdfPCell(new Phrase("收样完成时间:" + "2024-10-10 13:31:12", fontH2));pdfPCell4.setBorderColor(new BaseColor(255,255,255));pdfPTable.addCell( pdfPCell4);PdfPCell pdfPCell5 = new PdfPCell(new Phrase("固体废物样品总数:" + "10", fontH2));pdfPCell5.setBorderColor(new BaseColor(255,255,255));pdfPTable.addCell( pdfPCell5);PdfPCell pdfPCell6 = new PdfPCell(new Phrase("酸性废水样品总数:" + "1", fontH2));pdfPCell6.setBorderColor(new BaseColor(255,255,255));pdfPTable.addCell( pdfPCell6);PdfPCell pdfPCell7 = new PdfPCell(new Phrase("灌溉水总样:" + "0", fontH2));pdfPCell7.setBorderColor(new BaseColor(255,255,255));pdfPTable.addCell(pdfPCell7);PdfPCell pdfPCell8 = new PdfPCell(new Phrase("底泥样总数:" + "0", fontH2));pdfPCell8.setBorderColor(new BaseColor(255,255,255));pdfPTable.addCell(pdfPCell8);PdfPCell pdfPCell9 = new PdfPCell(new Phrase("土壤样总数:" + "0", fontH2));pdfPCell9.setBorderColor(new BaseColor(255,255,255));pdfPTable.addCell( pdfPCell9);PdfPCell pdfPCell10 = new PdfPCell(new Phrase("收样退回重新采样数量:" + "0", fontH2));pdfPCell10.setBorderColor(new BaseColor(255,255,255));pdfPTable.addCell( pdfPCell10);PdfPCell pdfPCell11 = new PdfPCell(new Phrase("承运单位:" + "", fontH2));pdfPCell11.setBorderColor(new BaseColor(255,255,255));pdfPTable.addCell(pdfPCell11);PdfPCell pdfPCell12 = new PdfPCell(new Phrase("运输方式:" + "汽车运输", fontH2));pdfPCell12.setBorderColor(new BaseColor(255,255,255));pdfPTable.addCell(pdfPCell12);pdfPTable.setSpacingAfter(10);document.add(pdfPTable);PdfPTable pdfPTable2 = new PdfPTable(10);pdfPTable2.setHorizontalAlignment(Element.ALIGN_CENTER);pdfPTable2.setWidthPercentage(100);pdfPTable2.setTotalWidth(new float[]{20,120,70,40,95,95,95,95,50,200});pdfPTable2.setLockedWidth(true);PdfPCell pCell1 = new PdfPCell(new Phrase("序号", fontH2));pCell1.setVerticalAlignment(Element.ALIGN_CENTER);pCell1.setHorizontalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell(pCell1 );PdfPCell pCell2 = new PdfPCell(new Phrase("字样编号", fontH2));pCell2.setVerticalAlignment(Element.ALIGN_CENTER);pCell2.setHorizontalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell(pCell2 );PdfPCell pCell3 = new PdfPCell(new Phrase("样品类型", fontH2));pCell3.setVerticalAlignment(Element.ALIGN_CENTER);pCell3.setHorizontalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell( pCell3);PdfPCell pCell4 = new PdfPCell(new Phrase("容器与保护剂", fontH2));pCell4.setHorizontalAlignment(Element.ALIGN_CENTER);pCell4.setVerticalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell(pCell4 );PdfPCell pCell5 = new PdfPCell(new Phrase("测试项目分类", fontH2));pCell5.setVerticalAlignment(Element.ALIGN_CENTER);pCell5.setHorizontalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell( pCell5);PdfPCell pCell6 = new PdfPCell(new Phrase("取样时间", fontH2));pCell6.setVerticalAlignment(Element.ALIGN_CENTER);pCell6.setHorizontalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell( pCell6);PdfPCell pCell7 = new PdfPCell(new Phrase("收样时间", fontH2));pCell7.setHorizontalAlignment(Element.ALIGN_CENTER);pCell7.setVerticalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell(pCell7);PdfPCell pCell8 = new PdfPCell(new Phrase("有效保存时间", fontH2));pCell8.setVerticalAlignment(Element.ALIGN_CENTER);pCell8.setHorizontalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell( pCell8);PdfPCell pCell9 = new PdfPCell(new Phrase("是否合格样品", fontH2));pCell9.setHorizontalAlignment(Element.ALIGN_CENTER);pCell9.setVerticalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell( pCell9);PdfPCell pCell10 = new PdfPCell(new Phrase("不合格情况说明", fontH2));pCell10.setVerticalAlignment(Element.ALIGN_CENTER);pCell10.setHorizontalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell( pCell10);ArrayList<jiaojiebiao> jiaojiebiaos = new ArrayList<>();for (int i = 0; i <12 ; i++) {jiaojiebiao jiaojiebiao = new jiaojiebiao();jiaojiebiao.setId(String.valueOf(i));jiaojiebiao.setChildNum("522023z4G2j8Zjx"+i);jiaojiebiao.setType("酸性废水");jiaojiebiao.setCategory("酸性废水pH和重金属八项"+i);jiaojiebiao.setDate1("2023-10-10 14:12:48");jiaojiebiao.setDate2("2023-11-10 14:12:48");jiaojiebiao.setDate3("2023-12-10 14:12:48");jiaojiebiao.setPass("是");if(i==6){jiaojiebiao.setPass("否");jiaojiebiao.setDetail("这个不合格!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");}jiaojiebiaos.add(jiaojiebiao);}for (jiaojiebiao jiaojiebiao : jiaojiebiaos) {PdfPCell cell1 = new PdfPCell(new Phrase(jiaojiebiao.getId(), fontH2));cell1.setHorizontalAlignment(Element.ALIGN_CENTER);cell1.setVerticalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell(cell1);PdfPCell cell2 = new PdfPCell(new Phrase(jiaojiebiao.getChildNum(), fontH2));cell2.setHorizontalAlignment(Element.ALIGN_CENTER);cell2.setVerticalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell(cell2);PdfPCell cell3 = new PdfPCell(new Phrase(jiaojiebiao.getType(), fontH2));cell3.setHorizontalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell(cell3);pdfPTable2.addCell(new Phrase(jiaojiebiao.getContainer(),fontH2));pdfPTable2.addCell(new Phrase(jiaojiebiao.getCategory(),fontH2));PdfPCell cell6 = new PdfPCell(new Phrase(String.valueOf(jiaojiebiao.getDate1()), fontH2));cell6.setHorizontalAlignment(Element.ALIGN_CENTER);cell6.setVerticalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell(cell6);PdfPCell cell7 = new PdfPCell(new Phrase(String.valueOf(jiaojiebiao.getDate2()), fontH2));cell7.setHorizontalAlignment(Element.ALIGN_CENTER);cell7.setVerticalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell(cell7);PdfPCell cell8 = new PdfPCell(new Phrase(String.valueOf(jiaojiebiao.getDate3()), fontH2));cell8.setHorizontalAlignment(Element.ALIGN_CENTER);cell8.setVerticalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell(cell8);PdfPCell cell9= new PdfPCell(new Phrase(jiaojiebiao.getPass(), fontH2));cell9.setVerticalAlignment(Element.ALIGN_CENTER);cell9.setHorizontalAlignment(Element.ALIGN_CENTER);pdfPTable2.addCell(cell9);pdfPTable2.addCell(new Phrase(jiaojiebiao.getDetail(),fontH2));}pdfPTable2.setSpacingAfter(10);document.add(pdfPTable2);PdfPTable pdfPTable3 = new PdfPTable(4);pdfPTable3.setHorizontalAlignment(Element.ALIGN_CENTER);pdfPTable3.setWidthPercentage(100);pdfPTable3.setTotalWidth(new float[]{70,470,200,140});pdfPTable3.setLockedWidth(true);PdfPCell bCell1 = new PdfPCell(new Phrase("收样单位:",fontH2));bCell1.setBorderColor(new BaseColor(255,255,255));pdfPTable3.addCell(bCell1);PdfPCell bCell2 = new PdfPCell(new Phrase("贵州绿环科技检测有限公司",fontH2));bCell2.setBorderColor(new BaseColor(255,255,255));pdfPTable3.addCell(bCell2);PdfPCell bCell3 = new PdfPCell(new Phrase("收样人(签字):",fontH2));bCell3.setBorderColor(new BaseColor(255,255,255));pdfPTable3.addCell(bCell3);PdfPCell bCell4 = new PdfPCell(new Phrase(""));bCell4.setBorderColor(new BaseColor(255,255,255));pdfPTable3.addCell(bCell4);PdfPCell bCell5 = new PdfPCell(new Phrase("送样单位:",fontH2));bCell5.setBorderColor(new BaseColor(255,255,255));pdfPTable3.addCell(bCell5);PdfPCell bCell6 = new PdfPCell(new Phrase("贵州黔大生态环境与健康研究院有限公司",fontH2));bCell6.setBorderColor(new BaseColor(255,255,255));pdfPTable3.addCell(bCell6);PdfPCell bCell7 = new PdfPCell(new Phrase("送样人(签字):",fontH2));bCell7.setBorderColor(new BaseColor(255,255,255));pdfPTable3.addCell(bCell7);PdfPCell bCell8= new PdfPCell(new Phrase(""));bCell8.setBorderColor(new BaseColor(255,255,255));pdfPTable3.addCell(bCell8);document.add(pdfPTable3);document.close();} catch (DocumentException e) {throw new RuntimeException(e);} catch (FileNotFoundException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}
}

相关文章:
iText操作pdf
最近有个任务是动态的创建pdf根据获取到的内容,百度到的知识点都比较零散,官方文档想必大家也不容易看懂。下文是我做出的汇总 public class CreatePdfUtils {public static void create(){//准备File file new File("C:\\code\\base-project-back…...
关于SQLite 的下载与使用。配合python
win系统下: SQLite Download Page Precompiled Binaries for Windows sqlite-tools-win-x64-3450000.zip (4.77 MiB) 解压后,找个位置。然后设置环境变量指定位置。 可以手动建立.db文件。 也可以通过代码建立: 如下代码就是建立一个db文件。…...
java面向对象基础(面试)
一、面向对象基础 1. 面向对象和面向过程的区别 面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。面向对象会先抽象出对象,然后用对象执行方法的方式解决问题。 2.创建一个对象用什么运算符?对象实体与对象引用有何不同? n…...
【C++修行之道】STL(初识list、stack)
目录 一、list 1.1list的定义和结构 以下是一个示例,展示如何使用list容器: 1.2list的常用函数 1.3list代码示例 二、stack 2.1stack的定义和结构 stack的常用定义 2.2常用函数 2.3stack代码示例 一、list 1.1list的定义和结构 list的使用频率不高&#…...
【环境配置】安装了pytorch但是报错torch.cuda.is_availabel()=Flase
解决思路:import torch正常,说明torch包安装正常,但是不能和gpu正常互动,猜测还是pytroch和cuda的配合问题 1.查看torch包所需的cuda版本 我的torch是2.0.1,在现在是比较新的包,需要12以上的cuda支持&…...
什么是模板方法模式?它的实现方式有哪些?
什么是模板方法模式?它的实现方式有哪些? 模板方法模式是一种行为型模式,它定义了一个操作中的算法骨架,而将算法的一些步骤延迟到子类中实现,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 模…...
java:实现查询MySQL数据库中的数据,并导出excel、pdf类型文档(超详细)
查询MySQL数据库中数据,导出excel、pdf类型文档 1.数据库表格 CREATE TABLE user (id int NOT NULL AUTO_INCREMENT COMMENT 编号,name varchar(255) DEFAULT NULL COMMENT 姓名,age int DEFAULT NULL COMMENT 年龄,addr varchar(255) DEFAULT NULL COMMENT 住址1…...
Java后端须知的前端知识
Java后端须知的前端知识 HTML (超文本标记语言) W3C标准 结构:HTML表现:CSS行为:JavaScript 快速入门 <html><head><title></title></head><body><font color"red&q…...
Servlet基础之URL匹配规则
文章目录 URL 匹配规则几个容易混淆的规则精确匹配路径匹配扩展名匹配缺省匹配注意事项 1:匹配规则不能混用注意事项 2:"\/\*" 和 "/" 含义并不相同 URL 匹配规则 几个容易混淆的规则 servlet 容器中的匹配规则既不是简单的通配&am…...
【面试真题】Javascript 实现多条件过滤数组
场景: 有这么一个数组 [{a,123,b:345,c:456,d:t12},{a,234,b:345,c:thf2,d:t12}], 现在希望能够通过逗号分隔搜索值的输入方式,从数组中过滤出模糊匹配的数组元素。 解析: 可以使用 JavaScript 的 filter 函数和 indexOf 函数来实现这个功…...
spark广播变量
2024-1-24 广播变量特点 Broadcast Variable会将使用到的变量,只会为每个节点拷贝一份,不会为每个task进行拷贝,能够优化性能(在task数量比较大体现更明显),减少网络传输及内存消耗通过SparkContext的bro…...
如何让wordpress首页只显示某一篇文章全部内容?在您的主页显示选择
大多数WordPress站点首页默认都是显示最新发布的文章列表,不过有些站点比较特殊,只想显示某一篇文章的全部内容,那么应该怎么设置呢? 其实,WordPress后台 >> 设置 >> 阅读 >> 在“您的主页显示”中…...
Git怎样用?(下载到本地,和在本地初始化)
全局设置: 点击第二个 输入: 例如;邮箱是随意地 git config --global user.name "名字" git config --global user.email "邮箱" 获取git仓库 本地初始化: 创建仓库 右键第二个 输入 git init 克隆&#…...
JVM基础知识汇总篇
☆* o(≧▽≦)o *☆嗨~我是小奥🍹 📄📄📄个人博客:小奥的博客 📄📄📄CSDN:个人CSDN 📙📙📙Github:传送门 📅&a…...
马哈鱼SQLFlow Lite的python版本
Gudu SQLFlow 是一款用来分析各种数据库的 SQL 语句和存储过程来获取复杂的数据血缘关系并进行可视化的工具。 Gudu SQLFlow Lite version for python 可以让 python 开发者把数据血缘分析和可视化能力快速集成到他们自己的 python 应用中。 Gudu SQLFlow Lite version for p…...
【原创】VMware创建子网,并使用软路由获得访问互联网的能力,并通过静态路由让上层网络访问位于虚拟机的子网
前言 一看标题就很离谱,确实内容也有点复杂,我的初衷是为后面搞软路由做准备,先通过VMware进行可行性验证,确定方案是否可行,再做下一步的计划。结论当然可以的,能通能访问,强的不行。 网络拓…...
华为和思科各数通设备的常用命令
本文基于华为和思科各数通设备的常用命令来对比学习,这两个命令体系是网络项目中常见的,其他一些厂家也是基于类似的命令体系.下面也会根据公司业务需求列举部分网络设备厂家,比如H3C,盛科的命令不同之处. 1. 查看命令 华为: <Quidway>dis cur …...
Qt Excel读写 - QXlsx的安装配置以及测试
Qt Excel读写 - QXlsx的安装配置以及测试 引言一、安装配置二、简单测试 引言 Qt无自带的库处理Excel 文件,但可通过QAxObject 借助COM接口进行Excel的读写1。亦可使用免费的开源第三方库:QXlsx,一个基于Qt库开发的用于读写Microsoft Excel文…...
【报错处理】ModuleNotFoundError: No module named ‘paddle.fluid‘
引言 在使用 UIE(统一信息提取)模型时,您可能会遇到错误消息 "ModuleNotFoundError: No module named paddle.fluid"。这个错误可能让人沮丧,但通常很容易解决。在本博客文章中,我将为您介绍解决此问题。 一…...
Wpf 使用 Prism 实战开发Day16
客户端使用RestSharp库调用WebApi 动态加载数据 在MyDoTo客户端中,使用NuGet 安装两个库 RestSharp Newtonsoft.Json 一. RestSharp 简单的使用测试例子 当前章节主要目的是:对RestSharp 库,根据项目需求再次进行封装。下面先做个简单的使用…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
