itext7学习笔记杂谈系列3——在绝对位置添加文本

7 篇文章 45 订阅
3 篇文章 133 订阅

作者:CuteXiaoKe
微信公众号:CuteXiaoKe

    之前也是有人问过我如何使用itext7在pdf的绝对位置中插入文本呢?这几天我也是查阅了相关资料,把相关应用场景和解决方法给大家说一说。

应用场景

    其实在pdf中的绝对位置中插入文本的应用场景还是很多的,最典型的应用场景如下:

  • 合同模板采用PDF
  • 合同里面大部分文字已经写好,少部分内容由用户填写,例如姓名,身份证号等
  • 要填入的内容的绝对位置已经确定,这时候我们网页端或者其他终端接收用户填入的内容,根据内容填到PDF中相应位置

    这就是典型的应用场景,其实还有很多地方要用到这操作,让我们来怎么实现这操作。

大家是否还记得我们在itext7第二章里面提及过,最原始的坐标的原点在PDF的左下位置。

方法一:setFixedPosition-高级API

    最简单的方法,就是使用Paragraph对象的setFixedPosition方法啦,该方法是继承自com.itextpdf.layout.ElementPropertyContainer的方法,方法原型如下:

函数原型:

public T setFixedPosition(int pageNumber, float left,
float bottom,
UnitValue width)

参数:

  • pageNumber:要设置绝对位置所在的页码
  • left:添加文本的左下角相对原点的x坐标
  • bottom:添加文本的左下角相对原点的y坐标
  • width:添加文本的横向宽度

代码实例:

Text text = new Text(String.format("Page %d", pdf.getNumberOfPages() - 1));
text.setBackgroundColor(Color.WHITE); 
//前面这个text主要是设置背景色为白色,如果text的位置上面有内容就会覆盖掉内容
document.add(new Paragraph(text).setFixedPosition(
pdf.getNumberOfPages(), 549, 742, 100)); //这里面width取决于留空的宽度,这里我们尽量取大一点

运行结果:

itext-0-3-1

width参数的选取

    在这里我们要注意到width这个参数的选取,如果你的width选取的过小,那你的文字会以多行的形式展示,如下图是width=10的时候,效果下图:

itext-0-3-2

    当width=20的时候,效果如下图:

itext-0-3-3

方法二:使用Canvas-低级API

    这种方法主要是利用了RectangleCanvas相结合来在特定位置添加文本,我们直接来看如下代码:

PdfPage page = pdf.addNewPage();
PdfCanvas pdfCanvas = new PdfCanvas(page);
Rectangle[] columns = {new Rectangle(6, 650, 100, 30),
        new Rectangle(50, 500, 100, 100),};  //几个Rectangle对应几个位置
pdfCanvas.rectangle(columns[0]);
pdfCanvas.stroke();  
Canvas canvas = new Canvas(pdfCanvas, pdf, columns[0]);
Paragraph p=new Paragraph("hssssas").setFont(f3).setBold().setFontSize(10);   //Bold为设置粗体
canvas.add(p);

    步骤如下:

  1. 根据合同中留空的位置设计相应个数的Rectangle
  2. 用第一个矩形设置当前pdfCanvas画布的位置,表明要在这个矩形里面添加内容
  3. 调用stroke()函数,显示这个矩形,当然,你可以不掉用这个函数,那就不会显示这个矩形。
  4. 根据pdfCanvas来创建Canvas实例
  5. 创建一个Paragraph对象,加粗,设置字体样式,设置字体大小。
  6. Canvas中添加这个Paragraph

    结果如下图所示:

itext-0-3-4

PS:往矩形里面添加内容还会遇到其他情况,例如添加的内容超出了矩形的大小,那么添加的内容会怎么样呢,是否有解决方法呢?大家可以先行自己试一试,我会在其他章节里面提到这个问题

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CuteXiaoKe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值