ITextShape可点击的多边形或路径
任何人都可以使用iTextSharp创建一个不规则形状的可点击注释。
我知道我可以创建一个像这样的矩形
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);
无论如何使用图形路径,我已经看到了这个答案在PDF中绘制一个GraphicsPath ,但这只是绘制了不可点击的形状。
您正在寻找的秘密成分称为QuadPoints 😉
请允许我通过向您展示AddPolygonLink示例来解释如何使用QuadPoints 。
您已经发现了如何构造和绘制路径,例如:
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
参数,使得不规则形状适合该矩形。
警告:您可以通过测试此示例来尝试此function: link_polygon.pdf ,但请注意,虽然在Adobe Reader中查看文件时这将起作用,但这可能不适用于未实现QuadPoints
function的劣质PDF查看器。