2012-10-30 4 views
3

미리 채워진 PDF/XFA 양식을 읽기 전용으로 만들어야합니다 (텍스트, 체크 박스, 라디오 버튼 등의 입력이 없으므로 값을 변경할 수 있음).iText로 동적 XFA 감지

일반 AcroForms PDF 및 정적 XFA 양식의 경우 PdfStamper 인스턴스에서 setFormFlattening(true)을 호출하여이 작업을 수행 할 수 있습니다. 동적 XFA 양식의 경우 XDP의 field 노드의 access 속성을 readOnly으로 설정해야합니다.

문제는 양식이 인 경우 어떻게 감지합니까? XFA입니까? isXfaPresent은 정적 또는 동적 XFA 양식을 구별하지 않으므로 유용하지 않습니다.

+0

텍스트 혼란을 @Bruno 죄송합니다, 감사합니다! CCAP에 대한 라이센스 가격 산정이 곧 완료 될 경우, 우리에게 좋은 가격을주십시오! ;) –

+0

나는 판매 요청에 대답하지 않지만 유럽의 판매원에게 메시지를 보냈습니다 (유럽에 거주하고 있다고 가정). –

+0

@ 브루노 사실, 나는 미국에있다. 다시 iText에 대한 열심히하신 것에 감사드립니다. (왜 내가 상용화했는지에 대한 이야기에 익숙합니다.) –

답변

3

iText는 무료로 말하는 것처럼 무료이며 무료 맥주처럼 무료가 아닙니다. MPL/LGPL에서 AGPL로 전환하는 것을 피하기 위해 시도한 비즈니스 모델에 대한 자세한 내용은 http://lowagie.com/bumodels을 읽어보십시오.

Q1 : 만들기 동적 XFA 양식은 iText를 최신 버전으로 생각할 필요 없다

읽기 전용,하지만 당신이 사용하고있는 오래된 버전에서 지원되지 않습니다. http://lowagie.com/itext2을 읽고 iText 4.2.0을 사용해서는 안되는 이유를 알아보십시오. 공식 릴리스가 아닌 한, 각 iText 릴리스를 담당하고 있기 때문에 알 수 있습니다. 어쩌면 iTextSharp에 대해 이야기하고있는 것일 수 있습니다.

Q2는 : 하나 어도비 라이브 사이클 (당신에게 팔 및 다리를 비용) ES, 또는 사용을 사용 : 병합 동적 XFA는

동적 XFA 양식을 평평하게하려면, 당신은 두 가지 옵션이 형성 iText의 XFA Worker (F/OSS iText 위에 구축 된 훨씬 저렴한 비공개 소스 제품). 이 제품에 들어가는 비용과 인력 시간을 감안할 때 무료 맥주처럼 무료 솔루션을 찾지 못할 것이라고 생각합니다. 나는 그런 제품을 모른다.

Q3 : ". 액션 iText를 - 두 번째 판"이 내 책에 설명되어

XFA 양식, 동적 여부를 확인하는 방법 당신은 이미 솔루션의 절반을 가지고 있습니다. 조건 1 : isXfaPresent()true을 반환해야합니다. 조건 2 : getFields()에는 빈 키 세트가 있어야합니다. 이 예제에서는 readFieldnames() 메서드를 참조하십시오.

+1

추가 정보 : ** 읽기 전용 만들기 ** = PDF는 여전히 XML 컨테이너 역할을합니다. 당신이하는 일은 설정을 바꾸는 것뿐입니다. 기술적 인 기술을 가진 사람은 그 변화를 되돌릴 수 있습니다. ** 병합 ** = PDF에서 모든 XML 구문을 제거하고 PDF 구문으로 변환합니다. 모든 상호 작용이 손실됩니다. 이 양식은 더 이상 양식이 아니라 평면 PDF입니다. –

+0

iText 버전에 대한 메모 - 실제 출시 된 버전이 아니라는 점이 맞습니다. 나는 원래 [이 답변] (http://stackoverflow.com/a/4544513/215168)을 기반으로 발견했습니다.릴리스 된 버전이 아니기 때문에 최근 iText 버전에서 수정 된 버그가있는 것으로 알고 있습니다. –

+0

iText에 추가 한 XML Worker에 익숙합니다. 우리는 프로젝트에서 그 기능에 대한 정확한 필요성을 잠시 동안 가지고 있었고 관리자가 iText에 대한 라이센스를 탐색하도록 요청한 것입니다. 그것은 굉장! 그냥 제안 - 필자는 꽤 오래전에 [베타 목록] (http://itextpdf.com/themes/betalist.php)에 가입했지만 그 기능이 iText 5.3.3에 포함되었다는 통지 이메일을받지 못했습니다. . 사람들에게 알려주는 목록에 ping을 보내고 싶지 않을까요? –

2

브루노의 대답에 추가하고 C# 예제 코드를 제공하기 : iText를 모든 당신의 노력에 대한

PdfReader reader = new PdfReader(filePath); 
XfaForm xfa = new XfaForm(reader); 

//Check if PDF file contains Dynamic XFA data 
if (xfa != null && xfa.XfaPresent && xfa.Reader.AcroFields.Fields.Keys.Count == 0) 
{ 
    MessageBox.Show("This PDF contains Dynamic XFA data."); 
} 
관련 문제