2

기존 PDF AcroField의 단어를 다른 단어로 바꿔야합니다. 나는 iTEXTSHARP의 PDFStamper를 사용하여 동일한 작업을 수행하고 있으며 정상적으로 작동합니다. 그러나 그렇게 할 때 새로운 PDF를 작성해야하며 기존 PDF 자체에 변경 사항을 반영하고 싶습니다. 대상 파일 이름을 원래 파일 이름과 동일하게 설정하면 변경 사항이 반영되지 않습니다. iTextSharp에 익숙하지 않은 경우, 잘못된 작업이 있습니까? 내 책 iText in Action에 설명 된대로새 PDF를 만들지 않고 PDF를 업데이트하는 방법은 무엇입니까?

private void ListFieldNames(string s) 
    { 
     try 
     { 
      string pdfTemplate = @"z:\TEMP\PDF\PassportApplicationForm_Main_English_V1.0.pdf"; 
      string newFile = @"z:\TEMP\PDF\PassportApplicationForm_Main_English_V1.0.pdf"; 
      PdfReader pdfReader = new PdfReader(pdfTemplate); 

      for (int page = 1; page <= pdfReader.NumberOfPages; page++) 
      { 
       PdfReader reader = new PdfReader((string)pdfTemplate); 
       using (PdfStamper stamper = new PdfStamper(reader, new FileStream(newFile, FileMode.Create, FileAccess.ReadWrite))) 
       { 
        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("Address")) 
         { 
          form.SetField(fieldKey, s); 
         }  
        } 
        stamper.FormFlattening = true; 
        stamper.Close(); 

       } 

      } 
     } 

답변

5

을 사용하고 도와주세요 .. 내가 코드의 조각을 제공하고, 당신은 파일을 동시에 읽고 쓸 수 없습니다. Word의 작동 방식을 생각해보십시오. Word 문서를 열고 직접 쓸 수는 없습니다. Word는 항상 임시 파일을 만들고 변경 내용을 기록한 다음 원본 파일을 임시 파일로 바꾼 다음 임시 파일을 버립니다. 당신도 그렇게 할 수

:

  • PdfReader 원본 파일을 읽고이 완료되면
  • PdfStamper에 대한 임시 파일을 생성하고,
  • 임시로 원본 파일을 대체 파일.

또는 :

  • byte[]PdfReader을 만듭니다 byte[]로 원본 파일을 읽고,
  • PdfStamper에 대한 원본 파일의 경로를 사용합니다.

PdfStamper에서 예외가 발생하는 경우 원본 파일을 잃어 버리므로이 두 번째 옵션은 더 위험합니다.

+0

나는 첫 번째 접근법을 따라 왔으며 나중에 원래 파일을 대체하는 데 사용 된 스탬퍼를 사용하여 임시 파일을 만들었습니다. 그러나 PDF가 SDL Tridion에서 게시되고 Tridion 파일 시스템에 저장되므로 원본을 수정하거나 삭제할 수 없습니다. Evrytime 원본을 삭제하려고하면 다음 오류가 발생합니다. e : \ Web \ Compliance \ NonPCI \ SDL \ wwwroot \ xyzrights \ updatePdf.aspx : 경로 150Access 'E : \ Web \ Compliance \ NonPCI \ SDL \ wwwroot \ xyzrights \ Images \ ListPrograming_Part1_AcroForm.pdf '가 거부되었습니다. 도와주세요 .. – tk2013

+1

파일을 삭제할 수있는 권한이 없으면 파일을 업데이트 할 수있는 권한이 없을 수도 있습니다. 그 사용 권한은 아마도 읽기 전용으로 설정됩니다. sysadmin에게 문의해야합니다. 이것은 더 이상 iText 질문이 아니라 파일 권한에 관한 질문입니다. –

+0

@ BrunoLowagie 좀 더 설명해 주시겠습니까? => ** PdfStamper에 원본 파일의 경로를 사용 ** ** – jason

관련 문제