首页 > 解决方案 > iText 5 定义关于矩形的正确位置

问题描述

我已经用 JasperSoft Studio 完成了一份报告。

在这份报告中,我添加了一个占位符(一个图像),带有一个键。

在 Java 中,我完成了这段代码来检索有关占位符的信息:

HashMap<String, InfoImmaginePerFirma> hmSign = new HashMap<String, InfoImmaginePerFirma>();
for (int currPage = 0; currPage < populatedReport.getPages().size(); currPage++) {
    for (JRPrintElement currElement : populatedReport.getPages().get(currPage).getElements()) {
        if (currElement.getKey() != null && currElement.getKey().equals("DMIMySignatureImg")) {
            InfoImmaginePerFirma currInfo = new InfoImmaginePerFirma(currElement.getX(), currElement.getY(), currElement.getWidth(), currElement.getHeight(), currPage);
                        hmSign.put("DMIMySignatureImg", currInfo);
        }
    }   
}

在我的 hmSign Hashmap 中,我为占位符添加了 X、Y、高度和宽度。

因此,在其他说明之后,我添加了此代码以在占位符上添加一个矩形,如下所示:

InfoImmaginePerFirma info = hmSign.get("DMIMySignatureImg");
float llx = info.getX();
float lly = info.getY() + (info.getHeight() + 62);
float urx = info.getX() + info.getWidth();
float ury = info.getY() + 62;

PdfFormField sig = PdfFormField.createSignature(stamper.getWriter());
sig.setWidget(new Rectangle(llx, lly, urx, ury), null);
sig.setFlags(PdfAnnotation.FLAGS_PRINT); 
sig.put(PdfName.DA, new PdfString("/Helv 0 Tf 0 g")); 
sig.setFieldName("Signature1");

等等...

我添加了 62,因为我的报告中有两个波段(标题和详细信息),而我的占位符在第二个波段中。

但是当我尝试打印我的报告时,矩形比 y 高。

所以,我已经阅读了这些信息:

检索到 x,y 是我图像的左上角

要绘制一个矩形,我需要知道左下角和右上角,所以我检索了我的角如下:

float llx = X of upper left corner (the X is the same)
float lly = Y of upper left corner + height
float urx = X of upper left corner + width
float ury = Y of upper left corner

但是,如果我尝试手动管理这些位置,我注意到关于 lly 的正确 Y 位置是

float lly = Y of upper left corner - 362

但我不明白这是可能的。

标签: javaitextjasper-reportspositionrectangles

解决方案


推荐阅读