itext5生成pdf demo应用

引入依赖

    <dependencies><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version> <!-- 或者使用最新的版本 --></dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.24</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.18</version><scope>provided</scope></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.0</version></dependency><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version> <!-- 检查最新版本 --></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.13</version> <!-- 检查最新版本 --></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.6</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>LATEST</version></dependency></dependencies>
</project>

生成多页pdf不同大小的页面

import java.io.FileOutputStream;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;import javax.imageio.ImageIO;public class test01 {public static void main(String[] args) throws Exception {Document document = new Document();String fileName = "./pageSize.pdf";Document doc = new Document(PageSize.A4);PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(fileName));doc.open();PdfContentByte pdfContentByte = writer.getDirectContent();pdfContentByte.getPdfDocument().setPageSize(PageSize.A3);doc.newPage();doc.add(new Paragraph("Hello A3"));pdfContentByte.getPdfDocument().setPageSize(PageSize.A2);doc.newPage();doc.add(new Paragraph("Hello A2"));doc.close();}
}

页面添加图片

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;public class test03 {public static void main(String[] args) throws Exception {try {Image image = Image.getInstance("./files/files-pdf/images_0.png");// 获取图片的原始宽度和高度float originalWidth = image.getWidth();float originalHeight = image.getHeight();Document document = new Document(new Rectangle(originalWidth, originalHeight), 0, 0, 0, 0);PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("./hello2.pdf"));document.open();// 获取PDF页面的宽度和高度Rectangle pageSize = document.getPageSize();float pageWidth = pageSize.getWidth();// 根据页面宽度计算图片的缩放比例float scaleRatio = pageWidth / originalWidth;// 根据缩放比例计算图片的新宽度和高度float newWidth = originalWidth * scaleRatio;float newHeight = originalHeight * scaleRatio;// 设置图片的新宽度和高度,并保持纵横比不变image.scaleToFit(newWidth, newHeight);image.setAlignment(Element.ALIGN_CENTER);document.add(image);// 获取当前页面的直接内容PdfContentByte canvas = pdfWriter.getDirectContent();// 计算文字位置,这里以图片下方10pt为例float textX = 500; // 根据需要调整X坐标float textY = 800;// 设置字体和大小canvas.beginText();canvas.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED), 12);// 设置文字位置并添加文字canvas.setTextMatrix(1, 0, 0, 1, textX, textY);canvas.showText("Your Text Here");canvas.endText();canvas.beginText();canvas.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED), 18);// 设置文字位置并添加文字canvas.setTextMatrix(1, 0, 0, 1, textX+200, textY+200);canvas.showText("Your Text Here12121212121");canvas.endText();document.close();} catch (DocumentException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

或者

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import com.itextpdf.text.pdf.draw.DrawInterface;public class test02 {public static void main(String[] args) throws Exception {try {Image image = Image.getInstance("./files/files-pdf/images_0.png");// 获取图片的原始宽度和高度float originalWidth = image.getWidth();float originalHeight = image.getHeight();Document document = new Document(new Rectangle(originalWidth, originalHeight), 0, 0, 0, 0);PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("./hello2.pdf"));document.open();// 获取PDF页面的宽度和高度Rectangle pageSize = document.getPageSize();float pageWidth = pageSize.getWidth();// 根据页面宽度计算图片的缩放比例float scaleRatio = pageWidth / originalWidth;// 根据缩放比例计算图片的新宽度和高度float newWidth = originalWidth * scaleRatio;float newHeight = originalHeight * scaleRatio;// 设置图片的新宽度和高度,并保持纵横比不变image.scaleToFit(newWidth, newHeight);image.setAlignment(Element.ALIGN_CENTER);document.add(image);// 获取当前页面的直接内容PdfContentByte canvas = pdfWriter.getDirectContent();// 计算文字位置,这里以图片下方10pt为例float textX = 500; // 根据需要调整X坐标float textY = 800;// 设置字体和大小canvas.beginText();canvas.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED), 12);// 设置文字位置并添加文字canvas.setTextMatrix(1, 0, 0, 1, textX, textY);canvas.showText("Your Text Here");canvas.endText();canvas.beginText();canvas.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED), 18);// 设置文字位置并添加文字canvas.setTextMatrix(1, 0, 0, 1, textX+200, textY+200);canvas.showText("Your Text Here12121212121");canvas.endText();document.close();} catch (DocumentException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

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

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

相关文章

Java面向对象-常用类 (包装类)

常用类 – 包装类 基本数据类型的包装类 理解&#xff1a;包装类是8种基本数据类型对应的类 出现原因&#xff1a;Java是一种纯面向对象语言&#xff0c;但是java中有8种基本数据类型&#xff0c;破坏了java为纯面向对象的特征。为了承诺在java中一切皆对象&#xff0c;java…

Spring Boot 如何集成 MyBatis 进行数据库访问?

大家好&#xff0c;我是磊磊落落&#xff0c;目前我在技术上主要关注&#xff1a;Java、Golang、架构设计、云原生和自动化测试。欢迎来我的博客&#xff08;leileiluoluo.com&#xff09;获取我的最近更新&#xff01; 本文原始链接&#xff1a;https://leileiluoluo.com/post…

c/c++ 判断质数(素数)

目录 一.常规方法 二.进阶方法 三.代码示例&#xff08;运用进阶方法&#xff09; 质数是整数且仅能被自身和1整除 一.常规方法 所以我们根据质数的这个定义便可用以下思路判断&#xff1a;设需要检测的数为x。y为除1和自己的除数 逐步检测x是否可被y整除&#xff0c;如x…

Stable Diffusion详解

Stable Diffusion详解 一、Stable Diffusion简介 Stable Diffusion是一种生成对抗网络&#xff08;GAN&#xff09;的变体&#xff0c;专注于高质量图像生成。它利用扩散过程和去噪技术逐步生成图像&#xff0c;并且在各类图像生成任务中表现出色。本文将详细介绍Stable Diff…

MySQL之架构设计与历史(一)

架构设计与历史 概述 和其他数据库系统相比&#xff0c;MySQL有点与众不同&#xff0c;它的架构可以在多种不同场景中应用并发挥好的作用&#xff0c;但同时也会带来一点选择上的困难。MySQL并不完美&#xff0c;却足够灵活&#xff0c;能够适应高要求的环境&#xff0c;例如…

笔记:前端知识梳理

一、JavaScript ECMAScript&#xff1a;脚本语言的标准&#xff0c;不同版本的标准称为ESx&#xff0c;如&#xff1a;ES5、ES6。 JavaScript&#xff1a;对ES标准的一种实现&#xff0c;ES标准的其他实现还有JScript。 JavaScript引擎&#xff1a;让JavaScript能够在目标机器…

Android 逆向学习【1】——版本/体系结构/代码学习

#Android 历史版本 参考链接&#xff1a;一篇文章让你了解Android各个版本的历程 - 知乎 (zhihu.com) 三个部分&#xff1a;api等级、版本号、代号&#xff08;这三个东西都是指的同一个系统&#xff09; API等级&#xff1a;在APP开发的时候写在清单列表里面的 版本号&…

Vitis HLS 学习笔记--控制驱动TLP - Dataflow视图

目录 1. 简介 2. 功能特性 2.1 Dataflow Viewer 的功能 2.2 Dataflow 和 Pipeline 的区别 3. 具体演示 4. 总结 1. 简介 Dataflow视图&#xff0c;即数据流查看器。 DATAFLOW优化属于一种动态优化过程&#xff0c;其完整性依赖于与RTL协同仿真的完成。因此&#xff0c;…

力扣第206题-反转链表

反转链表的效果示意图 要改变链表结构时&#xff0c;通常加入一个创建的临时头结点会更容易操作 时间复杂度&#xff1a;遍历2遍&#xff0c;2n 空间复杂度&#xff1a;额外创建一个栈&#xff0c;n (空间创建一个数组长度最大为5000&#xff0c;你说这个数组是栈也可以&…

【C++】详解多态

目录 初识多态 多态的条件 接口继承和实现继承 override 和 final 多态原理 继承与虚函数表 析构函数与多态 抽象类 本篇内容关联知识的链接 【C】详解C的继承-CSDN博客 【C】详解C的模板-CSDN博客 【C】C的内存管理-CSDN博客 初识多态 父类被不同子类继承后&#…

代码随想录算法训练营Day47 | 198.打家劫舍 213.打家劫舍II 337.打家劫舍III

代码随想录算法训练营Day47 | 198.打家劫舍 213.打家劫舍II 337.打家劫舍III LeetCode 198.打家劫舍 题目链接&#xff1a;LeetCode 198.打家劫舍 思路&#xff1a; 当前打劫或者不打劫 class Solution { public:int rob(vector<int>& nums) {vector<int>…

基于时频模糊算子的数据增强方法

关键词&#xff1a;时频模糊&#xff0c;数据增强&#xff0c;机器学习&#xff0c;音频预处理 我们引入时频模糊算子&#xff0c;该算子将信号的短时傅里叶变换与指定的核进行卷积&#xff0c;在SpeechCommands V2数据集上训练了一个使用ResNet-34架构的卷积神经网络(CNN)和一…

vscode C++调试设置

cmakelist需要改成set(CMAKE_BUILD_TYPE "Debug") 如果有set(CMAKE_CXX_FLAGS "-O0 -g3 -stdliblibstdc -no-pie -pthread -Wall -D_GLIBCXX_USE_NANOSLEEP -DLINUX")//"-O0优化项目改成0&#xff0c;否者-O2/3部分编译优化后打不了断点 然后创建la…

freertos的信号量和互斥锁学习笔记

freertos的信号量和互斥锁有两个比较形象的例子可以解释两者的主要用途。 第一个是信号量&#xff1a; 使用信号量的最初目的是为了给共享 资源建立一个标志&#xff0c;该标志表示该共享资源被占用情况。这样&#xff0c;当一个任务在访问共享资源之前&#xff0c;可以先对这…

【MySQL精通之路】InnoDB(6)-磁盘结构(4)-双写缓冲区

主博客&#xff1a; 【MySQL精通之路】InnoDB(6)-磁盘上的InnoDB结构-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】磁盘上的InnoDB结构-表空间-CSDN博客 下一篇&#xff1a; 【MySQL精通之路】InnoDB(6)-磁盘上的InnoDB结构-Redolog-CSDN博客 目录 1.介绍 1.1 配置变量…

报名开启!2024 开源之夏丨Serverless Devs 课题已上线!

Serverless 是近年来云计算领域热门话题&#xff0c;凭借极致弹性、按量付费、降本提效等众多优势受到很多人的追捧&#xff0c;各云厂商也在不断地布局 Serverless 领域。 Serverless Devs 是一个由阿里巴巴发起的 Serverless 领域的开源项目&#xff0c;其目的是要和开发者们…

leetcode以及牛客网单链表相关的题、移除链表元素、链表的中间节点、合并两个有序链表、反转链表、链表分割、倒数第k个节点等的介绍

文章目录 前言一、移除链表元素二、链表的中间节点三、合并两个有序链表四、反转链表五、链表分割六、倒数第k个节点总结 前言 leetcode以及牛客网单链表相关的题、移除链表元素、链表的中间节点、合并两个有序链表、反转链表、链表分割、倒数第k个节点等的介绍 一、移除链表元…

最近最少使用缓存

题目&#xff1a;请设计实现一个最近最少使用缓存&#xff0c;要求如下两个操作的时间复杂度都是O(1)。 get(key)&#xff1a;如果缓存中存在键key&#xff0c;则返回它对应的值&#xff1b;否则返回-1.put(key,value)&#xff1a;如果缓存中之前包含键key&#xff0c;则它的值…

扫盲:如何提升医学图像分割性能-to do list

导读&#xff1a;本文主要讨论了如何改进图像分割项目中的分割性能&#xff0c;包括一般性和具体性的问题解决方案&#xff0c;以及如何通过调整模型参数、改善数据集质量、优化模型架构、调整超参数、增加训练时长、改善图像分辨率和后处理技术等方法来提高分割效果。 图像分…

【MySQL精通之路】MySQL的使用(9)-设置环境变量

可以在命令提示符下设置环境变量&#xff0c;以影响命令处理器的当前调用&#xff0c;也可以永久设置环境变量以影响未来的调用。 要永久设置变量&#xff0c;可以在启动文件中进行设置&#xff0c;也可以使用系统为此提供的接口进行设置。 有关具体细节&#xff0c;请参阅命…