문제

PDF 파일을 사용하고 있습니다 버트 보고 도서관. 나중에이 파일에 디지털로 서명해야합니다. 사용 중입니다 itext 문서에 디지털로 서명합니다.

내가 직면 한 문제는 다른 보고서에 다른 장소에 서명을 배치해야한다는 것입니다. 이미 문서에 디지털로 서명 할 코드가 있습니다. 이제 모든 보고서의 마지막 페이지 하단에 서명을 배치하고 있습니다.

결국 서명을 어디에 배치 해야하는지 말하려면 각 보고서가 필요합니다. 그런 다음 itext를 사용하여 위치를 읽은 다음 해당 위치에 서명을 놓습니다.

Birt 및 ITEXT를 사용하여 달성 할 수 있습니다

감사

도움이 되었습니까?

해결책

당신이 조금 기꺼이 속이고 싶다면, 당신은 링크를 사용할 수 있습니다 ... birt가 지금 그들의 문서에 대한 내 작은 다이빙에 따라 Birt가 지원하는 링크를 사용할 수 있습니다.

링크는 주석입니다. 안타깝게도 ITEXT는 높은 수준의 주석 검사를 지원하지 않으며이를 생성하므로 저수준 객체 호출을 사용해야합니다.

추출하는 코드는 다음과 같습니다.

// getPageN is looking for a page number, not a page index
PdfDictionary lastPageDict = myReader.getPageN(myReader.getNumberOfPages());

PdfArray annotations = lastPageDict.getAsArray( PdfName.ANNOTS );
PdfArray linkRect = null;
if (annotations != null) {
  int numAnnots = annotations.size();
  for (int i = 0; i < numAnnots; ++i) {
    PdfDictionary annotDict = annotations.getAsDict( i );
    if (annotDict == null) 
      continue; // it'll never happen, unless you're dealing with a Really Messed Up PDF.

    if (PdfName.LINK.equals( annotDict.getAsName( PdfName.SUBTYPE ) )) {
      // if this isn't the only link on the last page, you'll have to check the URL, which
      // is a tad more work.
      linkRect = annotDict.getAsArray( PdfName.RECT );

      // a little sanity check here wouldn't hurt, but I have yet to come across a PDF
      // that was THAT screwed up, and I've seen some Really Messed Up PDFs over the years.

      // and kill the link, it's just there for a placeholder anyway.
      // iText doesn't maintain any extra info on links, so no need for other calls.
      annotations.remove( i ); 
      break;
    }
  }
}

if (linkRect != null) {
  // linkRect is an array, thusly: [ llx, lly, urx, ury ].
  // you could use floats instead, but I wouldn't go with integers.  
  double llx = linkRect.getAsNumber( 0 ).getDoubleValue(); 
  double lly = linkRect.getAsNumber( 1 ).getDoubleValue();
  double urx = linkRect.getAsNumber( 2 ).getDoubleValue();
  double ury = linkRect.getAsNumber( 3 ).getDoubleValue();

  // make your signature
  magic();
}

BIRT가 시각적 표현을 위해 링크 아래 페이지 내용에서 일부 텍스트를 생성하는 경우 이는 사소한 문제 일뿐입니다. 귀하의 서명은 완전히 다루어야합니다.

처음에 Birt에서 직접 서명을 생성 할 수 있는지 확실히 더 낫지 만, 문서에 대한 작은 검사는 PDF 사용자 정의 능력에 대한 자신감으로 정확하게 채우지 못했습니다. . PDF를 생산할 수있는 보고서 생성기입니다. ~도 많이. `

편집 : 특정 URL을 찾아야하는 경우 PDF 참조의 "12.5.6.5 링크 주석"섹션을 살펴 보려면 여기에서 찾을 수 있습니다.http://www.adobe.com/content/dam/adobe/en/devnet/pdf/pdfs/pdf32000.pdf

다른 팁

나는 Birt에 대해 아무것도 모르고 ITEXT에 대해 약간의 친숙 함을 가지고 있습니다. 하지만 아마도 이것은 작동합니다 ...

Birt는 주어진 필드 이름을 가진 정규 양식 필드로 서명 상자의 개요를 생성 할 수 있습니까? 그렇다면 다음을 수행 할 수 있어야합니다.

  1. getfield를 사용하여 itext의 acrofields hashmap에서 이름으로 해당 필드를 조회하십시오.
  2. PDF 스탬퍼를 사용하여 새 서명을 만들고 이전 필드 객체의 값을 기반으로 지오메트리를 설정하십시오. 그리고
  3. removefield를 사용하여 이전 필드를 삭제하십시오.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top