2012-10-08 2 views
0

PDF 문서의 특정 텍스트를 바꾸려고합니다. 현재 itextSharp 라이브러리를 사용하여 PDF 문서를 재생하고 있습니다.itextSharp를 사용하여 pdf 문서의 텍스트를 바꿉니다.

pdfdocument에서 바이트를 추출한 다음 해당 바이트를 바꾸고 다시 바이트로 문서를 쓰지만 작동하지 않습니다. 아래 예제에서 나는 문자열 1234를 5678로 대체하려고 시도하고있다.

이것을 수행하는 방법에 대한 조언은 도움이 될 것이다.

PdfReader reader = new PdfReader(opf.FileNames[i]); 
byte[] pdfbytes = reader.GetPageContent(1); 

PdfString oldstring = new PdfString("1234"); 
PdfString newstring = new PdfString("5678"); 
byte[] byte1022 = oldstring.GetOriginalBytes(); 
byte[] byte1067 = newstring.GetOriginalBytes(); 
int position = 0; 
for (int j = 0; j <pdfbytes.Length ; j++) 
{ 
    if (pdfbytes[j] == byte1022[0]) 
    { 
     if (pdfbytes[j+1] == byte1022[1]) 
     { 
      if (pdfbytes[j+2] == byte1022[2]) 
      { 
       if (pdfbytes[j+3] == byte1022[3]) 
       { 
        position = j; 
        break; 
       } 
      } 
     } 

    } 

} 

pdfbytes[position] = byte1067[0]; 
pdfbytes[position + 1] = byte1067[1]; 
pdfbytes[position + 2] = byte1067[2]; 
pdfbytes[position + 3] = byte1067[3]; 
File.WriteAllBytes(opf.FileNames[i].Replace(".pdf","j.pdf"), pdfbytes); 

답변

2

1234가 1234가 페이지의 콘텐츠 스트림의 일부이며 XObject 양식이 아닌 것으로 생각합니까? 페이지의 모든 리소스를 구문 분석하지 않으면 코드가 작동하지 않습니다.

기타 : GetPageContent()이 표시되지만 어디서나 SetPageContent()을 사용하는 것을 볼 수 없습니다. 변경 사항은 어떻게 PdfReader 객체에 저장 될 것입니까?

또한 변경된 PdfReader 내용을 파일에 쓰는 데 PdfStamper을 사용하는 것을 보지 못했습니다.

마침내 필자는 Adobe의 PDF Architect Leonard Rosenthol의 말을 인용하기 위해 부끄러워하지만 묻습니다. 그러면 그는 자신이하려는 일을해서는 안된다는 것을 개인적으로 말할 것입니다. PDF는 편집을위한 형식이 아닙니다. 내가 iText에 쓴 책의 6 장 소개를 읽으십시오 : http://www.manning.com/lowagie2/samplechapter6.pdf

관련 문제