2013-04-19 3 views
0

다음 코드를 사용하여 이전 PDF를 삭제하고 이전 PDF를 새로운 것으로 바꾸 겠지만 결과는 없습니다. 이 작업을 PDF 파일에서 수행 할 수 있습니까? 마찬가지로, 그물 전체에 나는이 기능들이 .txt, .xls.doc ... 등의 파일 유형에 사용되는 것을 볼 수 있습니다. 내 코드에 문제가 있습니까?PDF 파일 바꾸기 및 삭제

private void ListFieldNames(string s) 
    { 
     try 
     { 
      string pdfTemplate = @"z:\TEMP\PDF\PassportApplicationForm_Main_English_V1.0.pdf"; 
      //var newFile = pdfTemplate; 
      string newFile = @"z:\TEMP\PDF\_PassportApplicationForm_Main_English_V1.0.pdf"; 
      PdfReader pdfReader = new PdfReader(pdfTemplate); 
      for (int page = 1; page <= pdfReader.NumberOfPages; page++) 
      { 
       //ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy(); 
       PdfReader reader = new PdfReader((string)pdfTemplate); 
       //PdfStamper stamper = new PdfStamper(reader, new FileStream(newFile, FileMode.Create)); 
       using (PdfStamper stamper = new PdfStamper(reader, new FileStream(newFile, FileMode.Create))) 
       { 
        AcroFields form = stamper.AcroFields; 
        var fieldKeys = form.Fields.Keys; 
        foreach (string fieldKey in fieldKeys) 
        { 
         //Replace Address Form field with my custom data 
         if (fieldKey.Contains("Surname")) 
         { 
          form.SetField(fieldKey, s); 
         }  
        } 
        // set form fields 


        //form.SetField("Address", s); 
        stamper.FormFlattening = true; 
        stamper.Close(); 

       } 

      } 
      File.Copy(newFile, pdfTemplate); 
      File.Delete(pdfTemplate); 
    } 
+0

코드를 디버그하려고했는데 코드를 분석 했습니까? –

+0

iText 또는 iTextSharp에 대한 경험이 없지만이 코드에는 다소 이상한 점이 있습니다. 왜 모든 페이지에서 반복하고 있지만 페이지 번호를 사용하지 않습니까? 루프의 각 반복에서'new FileStream (newFile, FileMode.Create)'를 실행하여 정확히 동일한 데이터 'NumberofPages - 1' 번으로 새 파일을 덮어 쓰는 것 같습니다. 또한 왜 두 개의'PdfReader'를 열고'string'을'string'으로 형 변환합니까? – jerry

답변

1

모든 것이 나에게 좋아 보인다 ... 도와주세요, 단지 변경 :

File.Copy(newFile, pdfTemplate); 
File.Delete(pdfTemplate); 

변화 : 파일이 이미 존재하는 경우

File.Delete(pdfTemplate); 
File.Copy(newFile, pdfTemplate); 

당신은 파일을 복사 할 수 없습니다 그것과 같은 이름을 가진 그 위치에. 기존 파일을 먼저 삭제하십시오.