2013-03-18 3 views
-1

Adobe의 Active PDF Toolkit 및 FDFToolkit을 사용하는 PDF 양식 웹 응용 프로그램을 리펙토링하려고합니다. 내 목표는에 iTextSharp를 사용하는 것입니다itextsharp를 사용하여 이미지를 fdf에 첨부하십시오.

  1. 미리 채울 사용자가

FDF를 통해 서명 및/또는 바코드 이미지 와 연결할 수있는 데이터베이스

  • 의 데이터와 양식 필드를 항목 # 1은 문제가 아닙니다. 아이템 # 2는 가장 큰 도전입니다. 몇 가지 배경을 알려 드리겠습니다.

    이 양식은 번으로 렌더링하는 웹 응용 프로그램입니다. 초기로드 후에는 쿼리 문자열에 action 매개 변수가있는 URL로 PDF 양식을 제출하는 양식에 2 개의 키 버튼이 있습니다. 이 버튼을 "저장"및 "로그인"이라고합니다. 저장 단추는 FDF 필드 사전을 가져 와서 데이터베이스에 저장합니다. Sign 단추는 로그인 한 사용자의 서명을 조회하고 서명 이미지를 FDF에 첨부하고 FDF를 HTTP 응답에 씁니다.

    FDFSetAP (문자열 bstrFieldName 짧은 whichFace 문자열 bstrFileName 짧은 pageNum)

    iTextSharp가 FdfWriter 클래스에 필적하는 방법을 제공하지 않는다 :

    FDFToolkit이 방법을 사용하여 필드 화상 부착 지원 . 나는 FdfWriter 클래스를 서브 클래 싱하고 이미지를 첨부하기 위해 자신 만의 메서드를 추가하는 것을 고려했지만, 같은 문제가있는 사람이 있는지보기 위해 여기에 도달하고 싶었습니다.

    이 방법을 사용하여 필드 상단에 이미지를 오버레이 할 수 있었지만 FDF가 아닌 기본 PDF에 이미지가 있습니다.

    AcroFields.FieldPosition pos = _Stamper.AcroFields.GetFieldPositions("SIGNATUREFIELD").First(); 
    Image signature = Image.GetInstance("Signature.gif"); 
    image.SetAbsolutePosition(pos.position.Left, pos.position.Bottom); 
    image.ScaleToFit(pos.position.Width, pos.position.Height); 
    PdfContentByte pcb = _Stamper.GetOverContent(pos.page); 
    pcb.AddImage(image); 
    

    고마워요!

  • 답변

    1

    저는 PdfStamper를 사용하고 푸시 버튼 필드를 사용하여 양식에 이미지를 넣었습니다. 기존 필드를 푸시 버튼 필드로 바꾸고 푸시 버튼을 READ_ONLY로 설정하여 누를 수 없으며 정적 이미지처럼 보입니다. 이렇게하면 추가하려는 이미지가 페이지 내용에 추가되는 대신 필드 주석으로 유지됩니다.

    using (PdfStamper stamper = new PdfStamper(new PdfReader(inputFile), File.Create(outputFile))) 
    { 
        AcroFields.FieldPosition fieldPosition = stamper.AcroFields.GetFieldPositions(fieldName)[0]; 
    
        PushbuttonField imageField = new PushbuttonField(stamper.Writer, fieldPosition.position, fieldName); 
        imageField.Layout = PushbuttonField.LAYOUT_ICON_ONLY; 
        imageField.Image = iTextSharp.text.Image.GetInstance(imageFile); 
        imageField.ScaleIcon = PushbuttonField.SCALE_ICON_ALWAYS; 
        imageField.ProportionalIcon = false; 
        imageField.Options = BaseField.READ_ONLY; 
    
        stamper.AcroFields.RemoveField(fieldName); 
        stamper.AddAnnotation(imageField.Field, fieldPosition.page); 
    }