2012-11-29 3 views
1

내 응용 프로그램에서 iText 2.1.7을 사용하려고합니다. I는 다음 코드 조각 문제 꼼짝 : 입력으로 I는 this PDF (이것은 폴란드어 과세 형태)를 사용할 때iText 2.1.7의 PdfStamper에 버그가 있습니까?

InputStream inputFile = ... 
OutputStream outputStream = ... 
PdfReader pdfReader = new PdfReader(fis); 
PdfStamper pdfStamper = new PdfStamper(pdfReader, os, '0', true); 

pdfStamper.close(); 
pdfReader.close(); 
outputStream .close(); 

이 코드는 깨진 ​​PDF (오류 118)를 산출한다. 이 문제에 대한 쉬운 해결 방법이 있는지 알고 계십니까? C#/iTextSharp에서 해당 코드가 작동한다는 것을 알고 있습니다.

편집 : 이것은 암호화에는 문제가 없습니다. 나는 이미 이걸 풀었다.

+0

해당 문서는 암호화되어 있습니다 (문서로 수행 할 수있는 작업을 제한하기 위해). 따라서,'새로운 PdfStamper (...)'는 실패합니다. – mkl

+0

2.1.7은 매우 오래된 버전입니다. IText 5는 많은 버그 수정이있어 훨씬 낫습니다. –

+0

예,하지만 2.1.7은 무료이며 법인에게는 라이센스가 필요하지 않습니다. – Ioan

답변

1

주석으로 언급했듯이 해당 문서는 권한을 제한하도록 암호화되어 있습니다. 따라서 올바른 암호가 제공되지 않았기 때문에 PdfStamper를 인스턴스화 할 때 iText 2.1.7 jar의 코드는 BadPasswordException을 던집니다. 따라서, 깨진 PDF 파일을 생성하지 않으므로 여기의 문제는 버그가 아닙니다.))

iText 2.1.7을 암호가 제공되지 않았다는 사실을 무시하도록 강요하는 것은 물론 가능하다고합니다. 이 경우 프로그램은 Adobe Acrobat이 열지 않고 오류 코드 118을 표시하는 PDF를 실제로 생성합니다.

현재 iText 5.x와 동일한 작업을 수행하는 경우, Adobe Acrobat이 이의없이 열리는 문서를 생성합니다.

두 출력을 비교하면 문제가 명확 해집니다. 이 iText의 경우 2.1.7 업데이트 정보 사전은 다음과 같습니다 동안 :

는 현재 iText를 5.x를이 모양
16 0 obj 
<< 
/Creator(ADEP Document Services … Designer 10.0) 
/Producer(Adobe LiveCycle Forms ES3; modified using iText 2.1.7 by 1T3XT) 
/schemat(http://crd.gov.pl/wzor/2011/12/19/732/) 
/Title(PIT-37) 
/wersja_schemy(1-0E) 
/ModDate(D:20121129153659+01'00') 
/Subject(þÿ Z e z n a n i e o w y s o k o[ c i o s i g n i t e g o d o c h o d u \(p o n i e s i o n e j s t r a t y \) p r z e z p o d a t n i k a p o d a t k u d o c h o d o w e g o o d o s ó b f i z y c z n y c h) 
/wariant(17) 
/Author(Ministerstwo Finansów) 
/CreationDate(D:20120816122649+02'00') 
>> 
endobj 

: 따라서

16 0 obj 
<< 
/Creator(Ìû±d\\‘0Ú¼U´N°[email protected]è4÷¤&‚ŸWŠÖsW¦ïôeå¿ê¹@aC<M¹^\t¯p; Um­…‡&U$“) 
/Producer(Ìû±d\\‘0Ú¼U´NSH<š¶CìœhMÙg6\(@+C“rxó3% èúáž#„~îí$´Ñ\rEÿ\){â®ø×ÇMõÒ”/k«'T“…Ô»6D±Šàûèq}=_]YùèM»Lõ‡!õØûÚ©'é+t#Väò¿ÃSVõñý) 
/schemat(Ìû±d\\‘0Ú¼U´N„hÙÚújñÂð\)÷Lsg—¥oÏ0<Á@õ5/•X6úJ!–nÈÒvU‚nð) 
/Title(Ìû±d\\‘0Ú¼U´NÅÎéÈ€Ã3 ÅpC„¡H) 
/wersja_schemy(Ìû±d\\‘0Ú¼U´NAÞ&·4ul‰¡b‘Œó) 
/ModDate(Ìû±d\\‘0Ú¼U´NÏbZk£&"!õH³Î¨l\f6\)¥+¥ûcoûÒ\rÕ8˜Í) 
/Subject(Ìû±d\\‘0Ú¼U´N:¡Ž”"ؘí¹~KŸpS†ÑŽäQ%”ýãtõÌt\t‚Ý3t\r9Ñ}#M …O¦\nqWóm: íÑ;A“GÝ.mÐÔéÔ]Ùn“Ƽä°'0%±@ \rÞªeé¶T<“¾./ýÂA"ÆRvoo€‚—Ý{?Ü“Nö\r¼¨]üv•¯y©Tˆ aŸ?"y°à¡ÀaÂÛ”ÄR’rèŽêKD•M6{Ä£t´é¾ù|%¬ƒÒˆM….’Ëð½˜B‡lƳ¤+¦Š¹ôTÝ^å¤=‹BAO‚Ø€°ú̱æj9_!#÷h‡5) 
/wariant(Ìû±d\\‘0Ú¼U´N6©BÛâ`Ì¡k‹Ô <½`) 
/Author(Ìû±d\\‘0Ú¼U´NŒ’×,ïZ2ä¡Åöw윭?bjÃô‚w|éUÆб) 
/CreationDate(Ìû±d\\‘0Ú¼U´N'·¬‡jHÎâÃë&šZ¦Ñ.U©ü«s¾½Ý;2¸Q) 
>> 
endobj 

,했던 iText를 2.1.7 업데이트 된 정보 사전의 항목을 암호화하지 않으며, 해독하려고 시도하는 동안 Adobe Acrobat이 hickuped. 파일을로드 할 때

편집

불행하게도, 심지어는 암호화되지 않은 정보 사전을 멀리 간격 후 (118)이있다. 따라서 파일을 다시 보면 또 다른 차이점이 있습니다. iText 2.1.7로 만든 버전은 작은 객체 스트림을 포함하고 다른 버전은 포함하지 않습니다. 해당 개체 스트림을 읽으려고 할 때 iText 자체가 넘어집니다.

+0

이것은 인상적인 대답입니다! :) 아직도, iText 2.1.7에서이 비 버그를 수정하는 방법을 알고 있습니까? 나는 iText 5의 출처를 조사 할 수 있었다. * 그러나 내 솔루션이 2.1.7을 기반으로하고 싶기 때문에 이것이 윤리적이라고 생각하지 않는다. (나는 라이센스를 사용하고 싶다). –

+0

필자는 코드가 아닌 PDF 만 분석했습니다. 필자는이 경우 (암호화 된 PDF를 추가 모드로 스탬핑하는 경우, 비밀번호가 제공되지 않았는지 여부는 여기에 중요하지 않은지 여부는 알 수 없음), PdfStamperImp의 암호화 지원을 검토해야합니다. 그러나 iText 5를 보지 않고서는 위업이라고 생각할 수 있습니다. iText 5는 LGPL에서 수정 사항을 사용하려는 경우 의심 스럽습니다. – mkl

관련 문제