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 库,根据项目需求再次进行封装。下面先做个简单的使用…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...