2014-06-17 4 views
0

다음 코드를 사용하여 확대/축소 수준을 변경하려면을 상속하지만 변경할 수는 없습니다.itext 기존 하이퍼 링크의 확대/축소 수준을 확대 pdf

내가 첫 페이지 (체크 아웃 화면)에 대한 PDF에 DEST 배열이 없기 때문에 PdfName.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

때마다 널 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.XYZ.equals(d.getAsName(1)가 false) PdfName.FITH이다.

한 가지를 보여준 다음 다른 작업을 한 다음 왜 예상 결과를 얻지 못했는지 묻기 때문에 질문에 대한 투표를해야합니다. 그것은 마치 누군가가 당신에게 스프를 제공하는 것과 같고 테이블에 숟가락과 포크가 보입니다. 수프가 숟가락으로 먹어야한다는 것을 알고 있다는 사실에도 불구하고 포크를 들고 포크로 스프를 먹을 수 없다는 불평을합니다. 그거 이상 하네. 코멘트에서

업데이트, 당신은 dnull 것을 불평하지만 스크린 샷을보고, 당신은 이미 d가 null 인 것을 알고 있었다.

페이지를 반복하면 1 페이지 (오브젝트 4)의 페이지 사전이 생깁니다. 이 페이지 사전에 /Annots 항목이 있는지 확인합니다. 거기에 (개체 40). 당신은 주석 위로 반복하고 주석 사전 (객체 30 또는 39, 화면 샷의 해상도가 나에게 너무 나쁘다)이 발생합니다. /SubtypeLink인지 확인합니다. 그것은. 주석에 /A 항목이 있는지 확인합니다. 그것은있다. 그런 다음 /Dest 항목을 가져옵니다. 해당 항목이 없습니다. 따라서 null이됩니다. 목적지는 여기에서 찾으실 수 있습니다 :

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

귀하가 귀하의 장소에 신청서를 작성하도록 요청하는 것입니다. 당신은이 해결책을 위해 돈을 받고 있지만 다른 사람들이 당신의 일을 대신 할 것으로 기대합니다. 또한 : 당신은 아마 iText에 대한 상업 라이센스가 필요하지 않습니다 ...

+0

사실 내가 확대 속성을 모든 링크를 변경하고 싶습니다. 미안하지만 나는 영어로 나쁘다. –

+0

또한 조건 앞에 d가 null로 표시됩니다. –

+0

그것이 내가 수프 메타포로 의미했던 것입니다. 당신은 당신의 질문에 답을 보여 주지만 답은 보이지 않습니다 !!! 어떻게 가능합니까 ??? 내 질문을 업데이트 할게. –