2014-11-22 196 views
1

任何人都可以使用iTextSharp创建一个不规则形状的可点击注释。ITextShape可点击多边形或路径

我知道我可以创建一个矩形一个这样

float x1 = 100, x2 = 200, y1 = 150, y2 = 200; 

    iTextSharp.text.Rectangle r = new iTextSharp.text.Rectangle(x1, y1, x2, y2); 
    PdfName pfn = new PdfName(lnk.LinkID.ToString()); 
    PdfAction ac = new PdfAction(lnk.linkUrl, false); 
    PdfAnnotation anno = PdfAnnotation.CreateLink(stamper.Writer, r, pfn, ac); 

    int page = 1; 
    stamper.AddAnnotation(anno, page); 

没有办法做与说的图形路径,我已经看到了这个答案Draw a GraphicsPath in a PDF,但只是绘制形状就无法点击。

回答

2

你正在寻找被称为QuadPoints ;-)

允许我解释如何QuadPoints由您展示AddPolygonLink示例中使用的秘密成分。

你已经发现了如何构建和绘制路径,例如:

canvas.moveTo(36, 700); 
canvas.lineTo(72, 760); 
canvas.lineTo(144, 720); 
canvas.lineTo(72, 730); 
canvas.closePathStroke(); 

我只使用此代码段以显示不规则的形状,我们会让点击。

你已经知道如何创建一个矩形形状的可点击的链接:

Rectangle linkLocation = new Rectangle(36, 700, 144, 760); 
PdfDestination destination = new PdfDestination(PdfDestination.FIT); 
PdfAnnotation link = PdfAnnotation.createLink(stamper.getWriter(), 
    linkLocation, PdfAnnotation.HIGHLIGHT_INVERT, 
    1, destination); 

与此对应的代码片段你已经在你的问题中。

现在让我们引入一些QuadPoints:

PdfArray array = new PdfArray(new int[]{72, 730, 144, 720, 72, 760, 36, 700}); 
link.put(PdfName.QUADPOINTS, array); 

根据ISO-32000-1,QuadPoints有:

8×n个数指定n个四边形 的默认坐标的数组用户空间包括链接应该被激活的区域。 每个四边形的坐标的顺序

x1 y1 x2 y2 x3 y3 x4 y4 

指定在逆时针顺序四边形的四个顶点中给出。 出于定位的目的,如应用下划线边框样式, 四边形的底部是由(x1, y1)(x2, y2)组成的线。

如果此条目不存在或符合条件的读者不承认它, 应使用由Rect条目指定的区域。如果数组中的任何坐标位于Rect指定的区域之外,则QuadPoints应忽略 。

请注意,我定义了linkLocation参数,使不规则形状适合该矩形。

警告:你可以通过测试此例尝试此功能:link_polygon.pdf,但要注意的是,虽然这将查看在Adobe Reader文件时工作,这可能与未实施QuadPoints劣质PDF查看器工作功能。

+0

谢谢,我不知道它叫什么是我的绊脚石 – Ksliman 2014-11-26 16:25:36