itext5固定段落Paragraph,指定段落位置

前几期分析了怎么用itext生成pdf,有兴趣的可以去看看。

1,java使用itext生成pdf,超简单教学,有手就行

2,java使用itext填充pdf模板,超简单教学,有手就行

然后现在有了新的需求,需要将某个段落固定在pdf的某个位置。因为文中的一些字段不是固定的,所以文章长度是不确定的,我们右下角这个就会根据文章的长度上下移动,导致一些后续的东西不能开展,所以就提出了固定的需求。
在这里插入图片描述
话不多说,开整
在这里我们需要用得到是Rectangle 属性。先看下面的代码了解一下这个属性。

//文档对象  实现A4纸页面
Document document = new Document(PageSize.A4);
//document.setMarginMirroring(true);
//设置文档的页边距
document.setMargins(80,80,20,10);
String fileName = "C:\\Users\\admin\\Desktop\\"+System.currentTimeMillis()+".pdf";
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(fileName));p = new Paragraph();
ph = new Phrase();
ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈13", font));
p.add(ph);
p.setSpacingBefore(5);
p.setAlignment(Element.ALIGN_RIGHT);//设置对齐方式
p.setLeading(30);Rectangle rects = new Rectangle(330, 120, 500, 160);//文本框位置
rects.setBorder(Rectangle.BOX);//显示边框,默认不显示,常量值:LEFT, RIGHT, TOP, BOTTOM,BOX,
rects.setBorderWidth(1f);//边框线条粗细
rect.setBorderColor(BaseColor.GREEN);//边框颜色
rects.setBackgroundColor(BaseColor.GRAY);//背景颜色
pdfWriter.getDirectContent().rectangle(rects);
ColumnText ct = new ColumnText(pdfWriter.getDirectContent());
ct.addElement(p);
ct.setSimpleColumn(rects);
ct.go();

看看效果:
在这里插入图片描述

其实整个代码都很好理解,直接拿去就能用,最难的就是
Rectangle rects = new Rectangle(330, 120, 500, 160);//文本框位置

这个就是决定他固定的位置的代码。一共分为4个坐标,前两个代表一个点,后两个代表一个点,坐标轴的原点(0,0)位于该页面的左下角,Itext 将以这两个点作为对角点来创建一个矩形。
在这里插入图片描述
大概就是这个意思,大家明白了这个的意思,就可以愉快的来固定了。
代码中的边框,背景色,只是演示用得,大家不用的话就直接把相对应的属性删掉就行了。
最后上个完整的代码。

package com.licence;import cn.hutool.core.date.DateUtil;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;import javax.imageio.ImageIO;
import java.io.*;public class Demo2 {public static void main(String[] args) {Demo2.pdf();}public static void pdf() {PdfContentByte waterMar;try {//文档对象  实现A4纸页面Document document = new Document(PageSize.A4);//document.setMarginMirroring(true);//设置文档的页边距document.setMargins(70, 70, 20, 10);String fileName = "C:\\Users\\汇美\\Desktop\\" + System.currentTimeMillis() + ".pdf";PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(fileName));//打开文档document.open();// 加载字体//创建标题字体BaseFont title = BaseFont.createFont("c://windows//fonts//simhei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//创建正文字体BaseFont bf = BaseFont.createFont("c://windows//fonts//simfang.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);Font titleFont = new Font(title, 22, Font.BOLD);//使用字体 加粗Font font = new Font(bf, 16);//使用字体Font underlineFont = new Font(bf, 16, Font.UNDERLINE); // 下划线// -------------------设置 段落 ----------------//段落Paragraph p = null;p = new Paragraph("呵呵哈哈哈或或", titleFont);p.setLeading(30);p.setAlignment(Element.ALIGN_CENTER);//设置对齐方式document.add(p);p = new Paragraph("红红火火恍恍惚惚", titleFont);p.setLeading(30);p.setAlignment(Element.ALIGN_CENTER);//设置对齐方式document.add(p);p = new Paragraph();//短语Phrase ph = new Phrase();//块ph.add(new Chunk("2022 第008 号", font));p.add(ph);p.setSpacingBefore(20);//段落与段落的间距p.setAlignment(Element.ALIGN_RIGHT);//设置对齐方式p.setLeading(20);//行间距document.add(p);p = new Paragraph();ph = new Phrase();ph.add(new Chunk("呵呵哈哈哈:", underlineFont));//机构名称p.add(ph);//设置和上行的间隔p.setSpacingBefore(10);//p.setLeading(20);document.add(p);p = new Paragraph();ph = new Phrase();ph.add(new Chunk("    哈哈哈哈哈哈哈", font));ph.add(new Chunk("哈哈哈哈哈哈哈1", underlineFont));//项目名称ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈2", font));ph.add(new Chunk("哈哈哈哈哈哈哈3", underlineFont));//医院名称ph.add(new Chunk("哈哈哈哈哈哈哈4", font));ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈5", underlineFont));//建设项目名称ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈6", font));ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈7", underlineFont));//号ph.add(new Chunk("哈哈哈哈哈哈哈8", font));//ph.setMultipliedLeading(20);p.add(ph);p.setSpacingBefore(5);p.setLeading(30);document.add(p);p = new Paragraph();ph = new Phrase();ph.add(new Chunk("    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈9", font));ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈10", underlineFont));//项目名称ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈11", font));p.add(ph);p.setSpacingBefore(5);p.setLeading(30);document.add(p);p = new Paragraph();ph = new Phrase();ph.add(new Chunk("    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈12。", font));p.add(ph);p.setSpacingBefore(5);p.setLeading(30);document.add(p);p = new Paragraph();ph = new Phrase();ph.add(new Chunk("    此复", font));p.add(ph);p.setSpacingBefore(5);p.setLeading(30);document.add(p);p = new Paragraph();ph = new Phrase();ph.add(new Chunk("哈哈哈哈哈哈哈哈哈13", font));p.add(ph);p.setSpacingBefore(5);p.setAlignment(Element.ALIGN_RIGHT);//设置对齐方式p.setLeading(30);Rectangle rects = new Rectangle(330, 120, 500, 160);//文本框位置rects.setBorder(Rectangle.BOX);//显示边框,默认不显示,常量值:LEFT, RIGHT, TOP, BOTTOM,BOX,rects.setBorderWidth(1f);//边框线条粗细rects.setBorderColor(BaseColor.GREEN);//边框颜色rects.setBackgroundColor(BaseColor.GRAY);//背景颜色pdfWriter.getDirectContent().rectangle(rects);ColumnText ct = new ColumnText(pdfWriter.getDirectContent());ct.addElement(p);ct.setSimpleColumn(rects);ct.go();//document.add(p);p = new Paragraph();ph = new Phrase();String date = DateUtil.now();ph.add(new Chunk(date.substring(0, 4) + " ", underlineFont));//年ph.add(new Chunk("年", font));ph.add(new Chunk(date.substring(5, 7) + " ", underlineFont));//月ph.add(new Chunk("月", font));ph.add(new Chunk(date.substring(8, 10) + " ", underlineFont));//日ph.add(new Chunk("日", font));p.add(ph);p.setSpacingBefore(5);p.setAlignment(Element.ALIGN_RIGHT);//设置对齐方式p.setLeading(30);rects = new Rectangle(340, 80, 500, 120);//文本框位置rects.setBorder(Rectangle.BOX);//显示边框,默认不显示,常量值:LEFT, RIGHT, TOP, BOTTOM,BOX,rects.setBorderWidth(1f);//边框线条粗细rects.setBorderColor(BaseColor.GREEN);//边框颜色rects.setBackgroundColor(BaseColor.GRAY);//背景颜色//rect.setBorderColor(BaseColor.GREEN);//边框颜色pdfWriter.getDirectContent().rectangle(rects);ct = new ColumnText(pdfWriter.getDirectContent());ct.addElement(p);ct.setSimpleColumn(rects);ct.go();//document.add(p);document.close();pdfWriter.close();System.out.println("创建成功!");} catch (Exception e) {e.printStackTrace();}}
}

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

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

相关文章

wordcount C

Gitee 代码链接&#xff1a;https://gitee.com/huangxue1111/codes/12rfs3ztj5ga8ymce7qi910 #include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#define IN 1#define OUT 0void main() {FILE *fp;int length;fp fopen("…

PS中如何使用通道计算来进行美白

打开本机的Photoshow&#xff0c;把要美白的图片添加进来。 通过快捷键ctrlj 创建一个图层副本。 然后选择通道中的蓝色&#xff0c;复制通道&#xff0c;这里说明一下为什么要选择蓝色&#xff1a;因为蓝色和绿色是较暗的&#xff0c;把暗的选出来&#xff0c;目的是为了更…

Eclipse中导入Java项目出现“No projects are found to import”

如图所示&#xff1a; &#xff0c; 这其实是你的项目中缺少了两个文件&#xff1a;.classpath文件和 .project文件 所以eclipse找不到你的项目了。 解决办法&#xff1a; 在你的Eclipse中再新建一个新的项目&#xff0c;项目的类型和项目名和你想要导入的项目名一样&am…

为什么tomcat在eclipse中启动了,访问不了

tomcat在eclipse中启动不了&#xff0c;有很多中情况。 我把这些可能出现的情况总结了起来&#xff1a; 原因1&#xff1a; 项目的发布目录没有在tomcat下的webapps文件下&#xff0c;导致项目启动不了。 解决&#xff1a;先把tomcat中的服务remove出来 然后双击test1服务…

jsp页面中出现“String cannot be resolved to a type”

右键你的项目&#xff0c;Build Path–>Configure Build Path 按照步骤1–>2 –>3。 然后就大功告成了。

1. 冒泡与选择排序及其比较

冒泡排序 1. 思想 冒泡排序&#xff08;Bubble Sort&#xff09;是一种交换排序&#xff0c;基本思路是&#xff1a;两两比较相邻记录的关键字&#xff0c;如果反序则交换&#xff0c;直到没有反序的记录为止。 2. 实现 2.1 初学常用的一种 public static <T extends Compar…

photoshop切图

1.传统切图 &#xff08;1&#xff09;打开一个psd文件&#xff0c;选择ps左边菜单栏的裁剪工具&#xff0c;选择切片工具。首先我们对这个psd文件进行分析&#xff0c;有意识的将其划分成几个选区&#xff0c;然后通过鼠标的拖拽用切片工具将我们所需要的图案切下来&#xff0…

怎么在cmd中进入D盘下的文件夹

从cmd中进入D盘&#xff0c;在光标处输入“d:”(大小写都可以)&#xff0c;按enter进入。 进入D盘根目录后&#xff0c;如果想找到work文件夹可以在光标处输入“cd work”即可。

linux文件管理 - 系统目录结构

几乎所有的计算机操作系统都是用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件, 而在子目录中又会进一步存放子目录和文件&#xff0c;以此类推形成一个树状的文件结构&#xff0c;由于其结构很像一棵树的分支, 所以该结构又被称为“目录树”。 Linux系统中也沿…

BRVAH(让RecyclerView变得更高效)(1)

本文来自网易云社区作者&#xff1a;吴思博对于RecyclerView&#xff0c; 我们重复编写着那一个又一个的列表界面&#xff0c;有的要分组&#xff0c;有的要添加广告头部、有的要不同类型item排列、等等需求&#xff0c;主要代码有大部分是重复的&#xff0c;如果有一个框架能够…

PyQt5菜单添加+事件+状态栏-7

1 from PyQt5.QtWidgets import QApplication,QMainWindow,QAction2 from PyQt5.QtGui import QIcon3 #demo_7:菜单添加action以及状态栏显示消息4 import sys5 class Example(QMainWindow):6 def __init__(self):7 self.app QApplication(sys.argv)8 sup…

git命令图片

转载于:https://www.cnblogs.com/duanwandao/p/9734074.html

解题: SDOI 2011 染色

题面 强行把序列问题通过树剖套在树上。。。算了算是回顾了一下树剖的思想。 每次树上跳的时候注意跳的同时维护当前拼出来的左右两条链的靠上的端点&#xff0c;然后拼起来的时候讨论一下拼接点&#xff0c;最后一下左右两边的端点都要考虑 1 #include<cstdio>2 #includ…

java.lang.OutOfMemoryError: PermGen space

使用Tomcat报java.lang.OutOfMemoryError: PermGen space错误时&#xff0c;这是tomcat的内存不够的原因&#xff0c;也就是tomcat的内存溢出。 这是我们只要在tomcat的配置下添加服务内存就可以了&#xff0c;添加内存方法&#xff0c;只要加入 -Xms256M -Xmx512M -XX:PermS…

怎么把jad反编译放到Eclipse中

可以在CSDN下载页上进行下载哦&#xff0c;免费的哦&#xff0c;不要积分。 http://download.csdn.net/detail/farxix/9838195 我们把下载下来的jad资源包解压出来&#xff0c;如下图&#xff1a; 首先&#xff1a; 然后&#xff1a; 打开eclipse进行设置&#xff0…

一些很有意思的JS现象

关于JS对象的 . 和 [] []除了属性名可以比 .天马行空以外(比如我们要添加一个为33-abc的属性&#xff0c;一定得用[]))&#xff0c;还有一个实际操作中的区别 Object.is的作用和两个奇特的现象 还记得isNaN的作用&#xff0c;但有时候我们就想直接比较两个数据&#xff0c;总不…

怎么查看eclipse的版本号

在电脑上找到你安装eclipse的路径&#xff0c;找到readme点击打开&#xff0c;如下图所示&#xff1a; 查看版本号&#xff1a;

Vue2.0 脚手架代码详解

参考作者&#xff1a;https://www.jianshu.com/p/2b661d01eaf8 只是为了方便个人学习。 来看一下脚手架创建后的项目目录 说明&#xff1a;在*.vue文件&#xff0c;template标签里写html代码&#xff0c;且template直接子级只能有一个标签。style标签里写样式&#xff0c;scrip…

如何使用多个端口访问tomcat

查端口号是否被占用 在cmd中使用 netstat -ano 命令&#xff1b; 处理端口号使用命令 taskkill /pid 1234 ( 8080指的是端口号对应的PID 号 ) 在使用tomcat服务器做为开发使用时&#xff0c;如果我们有多个项目要发布、启动时怎么办呢&#xff0c;在一个tomcat下添加多个项目…

win10 安装mysql 8.0.12

按照CSDN以及博客园的其他教程, 之前安装过几次都有或多或少的bug 主要安装步骤: 1.配置my.ini文件 2.管理员进入终端, 切换到.../bin目录下进行操作 3.指令操作: 1) mysqld --initialize --console              此指令正常情况下, 可以自动生成一项随机密码, 一…