利用 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();
然后来一张效果图:
这张效果图由上往下,依次是 pdfFormField1、pdfFormField2、pdfFormField3、pdfFormField4 绘制的矩形框。
坐标轴
在讲 Rectangle 的四个坐标参数之前,先理解一下 IText 中对于 PDF 设置的 xy 坐标的概念。
首先,Itext 按照 page 页数来对一个 PDF 文本做一个拆分,指定了第几页,那就在那一页上做操作。当我们 setPage()方法传递的是一个空值时,就表示操作第一页。
然后坐标轴的原点(0,0)位于该页面的左下角。X 轴就是左下角到右下角的那条直线,Y 轴就是左下角到左上角的那条直线。
Rectangle
在用 Rectangle 绘制一个矩形的时候,我们需要往它的构造函数里传递四个参数,前面两个参数代表第一个点的 xy 坐标,后面两个参数代表第二个点的 xy 坐标值,Itext 将以这两个点作为对角点来创建一个矩形。
用途
咋一看,绘制这么一个矩形似乎并没有什么卵用,但实际上,我们用的比较多的一个地方:PDF 数字签名就跟它密切相关。PDF 数字签名的具体实现我将在之后的博文里面进行更新。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于