2014-11-22 201 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