2014-06-17 27 views
0

我正在使用以下代碼將所有超鏈接的縮放級別更改爲繼承縮放,但無法更改。itext更改所有超鏈接的縮放級別以繼承放大現有的pdf

可能是我在PdfName.DEST和條件中犯了一些錯誤,因爲沒有第一頁的pdf格式的DEST數組(請查看屏幕快照)。

for (int count = 0; count < reader.getNumberOfPages(); count++) { 
     PdfDictionary page = reader.getPageN(count+1); 
     PdfArray annots = page.getAsArray(PdfName.ANNOTS); 
     if (annots != null) { 
      for (int i = 0; i < annots.size(); i++) { 
       PdfDictionary annotation = annots.getAsDict(i); 
       if (PdfName.LINK.equals(annotation.getAsName(PdfName.SUBTYPE))) { 
        if(annotation.get(PdfName.A)==null){ 
          continue; 
        } 
        PdfArray d = annotation.getAsArray(PdfName.DEST); 
        if (d != null && d.size() == 5 && PdfName.XYZ.equals(d.getAsName(1))) 
         d.set(4, new PdfNumber(0)); 
       } 
      } 
     } 
    } 

我已經在第一頁創建鏈接到第二頁,檢查圖像中的結構。

enter image description here

我也嘗試使用下面的代碼...我有調試和檢查d的價值每

for (int count = 0; count < reader.getNumberOfPages(); count++) { 
      PdfDictionary page = reader.getPageN(count+1); 
      PdfArray annots = page.getAsArray(PdfName.ANNOTS); 
      if (annots != null) { 
       for (int i = 0; i < annots.size(); i++) { 
        PdfDictionary annotation = annots.getAsDict(i); 
        if (PdfName.LINK.equals(annotation.getAsName(PdfName.SUBTYPE))) { 

         PdfArray d = annotation.getAsArray(PdfName.DEST); 
         // d is null every time 
        } 
       } 
      } 
     } 

回答

1

您添加一個屏幕截圖,讓您的時間爲null看看PDF裏面。在這個屏幕截圖中,你清楚地看到目的地是[5 0 R, /FitH, 795]。但是,只能更改由5個值組成的類型爲/XYZ的目標的縮放係數。

if (d != null && d.size() == 5 && PdfName.XYZ.equals(d.getAsName(1))) 
     d.set(4, new PdfNumber(0)); 

[5 0 R, /FitH, 795]有3個元素(換句話說d.size() == 5false)以及陣列中的第一個條目是PdfName.FITH(換言之PdfName.XYZ.equals(d.getAsName(1)爲假)。

你的問題應該被低估,因爲你顯示了一件事,然後做了別的事情,然後問我們爲什麼你沒有得到預期的結果。就好像有人爲你服務,你在桌子上看到一把勺子和一把叉子。儘管事實上你知道用湯匙吃湯,但是你拿叉子,然後抱怨你不能用叉子吃湯。那很奇怪。

更新在評論,你抱怨dnull,但看着你的屏幕截圖,您已經知道了d爲空。

您循環遍歷頁面,並獲得頁面1(對象4)的頁面字典。您檢查此頁面字典中是否有/Annots條目。有(對象40)。你循環播放註釋,並且遇到註釋詞典(對象30或39,屏幕截圖的分辨率對我來說太糟糕了)。您檢查/Subtype是否爲Link。它是。您檢查註釋是否有/A條目。它有。然後你會得到/Dest條目。沒有這樣的條目。因此你得到null。目的地在這裏找到:

PdfDictionary action = annotation.get(PdfName.A); 
if (action != null) { 
    PdfArray d = action.getAsArray(PdfName.D); 
    // now examine and change D 
} 

請注意,您要求SO社區在您的位置編寫您的應用程序。您爲此解決方案付費,但您希望其他人在您的地方完成您的工作。此外:您可能沒有iText的商業許可證...

+0

其實我想將所有鏈接屬性更改爲繼承縮放。對不起,但我英文不好。 –

+0

在此條件之前,我也會在d中獲得null。 –

+0

這就是我用湯比喻的意思。你在你的問題中顯示答案,你沒有看到答案!這怎麼可能?我會更新我的問題。 –