2015-04-14 68 views
0

我使用以下代碼來設置外部超鏈接使用itext Java中的庫。Itext:在pdf中設置外部超鏈接的縮放級別

Chunk chunk = new Chunk("Click to Open File"); 

PdfAction action = new PdfAction("externalfile.pdf"); 
action.put(PdfName.NEWWINDOW, PdfBoolean.PDFTRUE); 
action.put(PdfName.ZOOM, PdfName.FIT); 
chunk.setAction(action); 

我想設置外部超鏈接的縮放級別:當我在超鏈接文件單擊應該是開放和FIT頁。

我試過使用action.put(PdfName.ZOOM, PdfName.FIT);但它不工作。

回答

2

永遠不要創建PDF對象手動沒有諮詢ISO-32000-1。

您要創建一個GoToR操作。這樣的動作表示爲一個PDF字典,可以包含如下鍵:

ISO-32000-1 Table 200

沒有名爲放大在該表中的關鍵,因此,你的代碼是錯誤的。

您需要d鍵,當你要鏈接到一個網頁,並定義縮放因子,你需要定義一個目標:

ISO-32000-1 Table 151

換句話說,目標需要是一個PdfArrayPdfName.FIT是不夠的!

(所有的屏幕截圖是從Adobe提供在其網站上ISO-32000-1的副本獲得。)

更新:

如果你想添加一個鏈接到遠程頁面,您也可以按照iText in Action - Second Edition的第197-198頁上的示例進行操作:請參閱使用gotoRemotePage()方法的LinkActions示例。

在內部,這個方法看起來是這樣的:

public static PdfAction gotoRemotePage(String filename, String dest, boolean isName, boolean newWindow) { 
    PdfAction action = new PdfAction(); 
    action.put(PdfName.F, new PdfString(filename)); 
    action.put(PdfName.S, PdfName.GOTOR); 
    if (isName) 
     action.put(PdfName.D, new PdfName(dest)); 
    else 
     action.put(PdfName.D, new PdfString(dest, PdfObject.TEXT_UNICODE)); 
    if (newWindow) 
     action.put(PdfName.NEWWINDOW, PdfBoolean.PDFTRUE); 
    return action; 
} 

注意,這個假設您有在目標文件中的命名目的地。

我認爲,你寧願要使用,需要一個頁碼的構造:

public PdfAction(String filename, int page) { 
    put(PdfName.S, PdfName.GOTOR); 
    put(PdfName.F, new PdfString(filename)); 
    put(PdfName.D, new PdfLiteral("[" + (page - 1) + " /FitH 10000]")); 
} 

當然,這不使用PdfName.FIT。如果你真的想自己定義目標,你需要一條線,看起來像這樣:

put(PdfName.D, new PdfLiteral("[" + (page - 1) + " /Fit]")); 
+0

我已經試過這chunk.setAction(PdfAction.gotoRemotePage(文件路徑,「1」,假,真)); –

+0

這確實比試圖手動構建'PdfAction' *更容易*。我將添加一個指向描述該方法的官方文檔的指針。 –

+0

使用上面的代碼(在評論中)是最好的選擇? –