ITEXT——Rectangle 坐标的概念

本贴最后更新于 2374 天前,其中的信息可能已经时过境迁

利用 Itext 在 PDF 中设置一个矩形框并绘制上去,不可避免的需要使用 Rectangle 这个类以及 Itext 中的 xy 坐标轴。

首先我们先来看代码:

Document  document = new  Document();
PdfWriter  pdfWriter = PdfWriter.getInstance(document , new  FileOutputStream(tmp_pdf));
document.open();
document.add(new  Paragraph("hello world"));
PdfFormField  pdfFormField1 = PdfFormField.createSignature(pdfWriter);
PdfFormField  pdfFormField2 = PdfFormField.createSignature(pdfWriter);
PdfFormField  pdfFormField3 = PdfFormField.createSignature(pdfWriter);
PdfFormField  pdfFormField4 = PdfFormField.createSignature(pdfWriter);

PdfAppearance  pdfAppearance = PdfAppearance.createAppearance(pdfWriter , 72 , 48);

pdfFormField1.setWidget(new  Rectangle(72 , 732 , 144 , 780) , PdfAnnotation.HIGHLIGHT_INVERT);
pdfFormField1.setFlags(PdfAnnotation.FLAGS_PRINT);
pdfFormField1.setPage();
pdfFormField1.setMKBorderColor(BaseColor.BLACK);
pdfFormField1.setMKBackgroundColor(BaseColor.WHITE);
pdfAppearance.rectangle(0.5f , 0.5f , 71.5f , 47.5f);
pdfAppearance.stroke();
pdfFormField1.setAppearance(PdfAnnotation.APPEARANCE_NORMAL , pdfAppearance);
pdfWriter.addAnnotation(pdfFormField1);

pdfFormField2.setWidget(new  Rectangle(72 , 532 , 144 , 580) , PdfAnnotation.HIGHLIGHT_INVERT);
pdfFormField2.setFlags(PdfAnnotation.FLAGS_PRINT);
pdfFormField2.setPage();
pdfFormField2.setMKBorderColor(BaseColor.BLACK);
pdfFormField2.setMKBackgroundColor(BaseColor.WHITE);
pdfAppearance.rectangle(0.5f , 0.5f , 71.5f , 47.5f);
pdfAppearance.stroke();
pdfFormField2.setAppearance(PdfAnnotation.APPEARANCE_NORMAL , pdfAppearance);
pdfWriter.addAnnotation(pdfFormField2);

pdfFormField3.setWidget(new  Rectangle(72 , 332 , 144 , 380) , PdfAnnotation.HIGHLIGHT_INVERT);
pdfFormField3.setFlags(PdfAnnotation.FLAGS_PRINT);
pdfFormField3.setPage();
pdfFormField3.setMKBorderColor(BaseColor.BLACK);
pdfFormField3.setMKBackgroundColor(BaseColor.WHITE);
pdfAppearance.rectangle(0.5f , 0.5f , 71.5f , 47.5f);
pdfAppearance.stroke();
pdfFormField3.setAppearance(PdfAnnotation.APPEARANCE_NORMAL , pdfAppearance);
pdfWriter.addAnnotation(pdfFormField3);

pdfFormField4.setWidget(new  Rectangle(72 , 132 , 144 , 180) , PdfAnnotation.HIGHLIGHT_INVERT);
pdfFormField4.setFlags(PdfAnnotation.FLAGS_PRINT);
pdfFormField4.setPage();
pdfFormField4.setMKBorderColor(BaseColor.BLACK);
pdfFormField4.setMKBackgroundColor(BaseColor.WHITE);
pdfAppearance.rectangle(0.5f , 0.5f , 71.5f , 47.5f);
pdfAppearance.stroke();
pdfFormField4.setAppearance(PdfAnnotation.APPEARANCE_NORMAL , pdfAppearance);
pdfWriter.addAnnotation(pdfFormField4);

document.close();

然后来一张效果图:

1.pic.jpg

这张效果图由上往下,依次是 pdfFormField1、pdfFormField2、pdfFormField3、pdfFormField4 绘制的矩形框。

坐标轴

在讲 Rectangle 的四个坐标参数之前,先理解一下 IText 中对于 PDF 设置的 xy 坐标的概念。

首先,Itext 按照 page 页数来对一个 PDF 文本做一个拆分,指定了第几页,那就在那一页上做操作。当我们 setPage()方法传递的是一个空值时,就表示操作第一页。

然后坐标轴的原点(0,0)位于该页面的左下角。X 轴就是左下角到右下角的那条直线,Y 轴就是左下角到左上角的那条直线。

Rectangle

在用 Rectangle 绘制一个矩形的时候,我们需要往它的构造函数里传递四个参数,前面两个参数代表第一个点的 xy 坐标,后面两个参数代表第二个点的 xy 坐标值,Itext 将以这两个点作为对角点来创建一个矩形。

用途

咋一看,绘制这么一个矩形似乎并没有什么卵用,但实际上,我们用的比较多的一个地方:PDF 数字签名就跟它密切相关。PDF 数字签名的具体实现我将在之后的博文里面进行更新。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3165 引用 • 8206 回帖
  • Itext
    5 引用 • 3 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...