ITextSharp可点击的多边形或路径

时间:2014-11-22 22:22:05

标签: c# itextsharp

任何人都可以使用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);

任何方式都可以说图形路径,我已经看到了这个答案Draw a GraphicsPath in a PDF,但这只是绘制了不可点击的形状。

1 个答案:

答案 0 :(得分:2)

您正在寻找的秘密成分称为 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是:

  

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

给出
x1 y1 x2 y2 x3 y3 x4 y4
     

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

     

如果此条目不存在或符合本标准的读者无法识别,   应使用Rect条目指定的区域。 QuadPoints应该   如果数组中的任何坐标位于Rect指定的区域之外,则忽略。

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

警告:您可以通过测试此示例来尝试此功能:link_polygon.pdf,但请注意,虽然这在Adobe Reader中查看文件时有效,但这可能不适用于劣质PDF查看器未实现QuadPoints功能。