如何在绝对位置插入iTextSharp.text.Rectangle矩形?

时间:2016-07-25 13:09:31

标签: .net itext

使用下面的代码,插入的矩形位于页面的左下角。如何在绝对位置插入iTextSharp.text.Rectangle矩形?感谢。

iTextSharp.text.Rectangle rectangle = new Rectangle(10, 10, 100, 15, 0);  
// (lower-left-x, lower-left-y, upper-right-x (llx + width), upper-right-y (lly + height), rotation angle 
rectangle.BorderColor = BaseColor.WHITE;
rectangle.BackgroundColor = BaseColor.YELLOW;
overContent.Rectangle(rectangle);
//stamper.Close();
PdfAnnotation annotation = PdfAnnotation.CreateLink(
                        stamper.Writer, rectangle, PdfAnnotation.HIGHLIGHT_INVERT,
                        new PdfAction("http://itextpdf.com/"));
stamper.AddAnnotation(annotation, 1);

1 个答案:

答案 0 :(得分:1)

OP在评论中说

  

无论我如何更改x& x,都会在生成的PDF的左下角始终显示超链接矩形。 矩形参数中的y值(int x,int y,int width,int height)

这里的错误变得明显,OP假定Rectangle构造函数的第三个和第四个参数是宽度和高度。事实并非如此,参见记录的Rectangle构造函数源代码:

/// <summary>
/// Constructs a Rectangle-object.
/// </summary>
/// <param name="llx">lower left x</param>
/// <param name="lly">lower left y</param>
/// <param name="urx">upper right x</param>
/// <param name="ury">upper right y</param>
public Rectangle(float llx, float lly, float urx, float ury)

...

/**
 * Constructs a <CODE>Rectangle</CODE>-object.
 *
 * @param llx   lower left x
 * @param lly   lower left y
 * @param urx   upper right x
 * @param ury   upper right y
 * @param rotation the rotation (0, 90, 180, or 270)
 * @since iText 5.0.6
 */
public Rectangle(float llx, float lly, float urx, float ury, int rotation)

和cf.也是OP自己代码中的评论:

// (lower-left-x, lower-left-y, upper-right-x (llx + width), upper-right-y (lly + height), rotation angle 

第三和第四个参数是第二个点的坐标。矩形位置和大小由(llx, lly)(urx, ury)的对角线确定。

此外,尽管名称和描述有变量,但iTextSharp并未强制第一个点位于左下角,第二个点位于右上角;如果第二个是在右下角或左下角,那么就是它......

因此,由于OP仅更改了前两个参数,因此第二个点保持在(100, 15),这通常非常靠近页面底部并且非常接近页面左边界。

他应该尝试类似的事情:

iTextSharp.text.Rectangle rectangle = new Rectangle(510, 510, 600, 515, 0);