¿Cómo actualizar un PDF sin crear un nuevo PDF?

Estoy obligado a reemplazar una palabra en un PDF AcroField existente con otra palabra. Estoy usando PDFStamper de iTEXTSHARP para hacer lo mismo y está funcionando bien. Pero, al hacerlo, se requiere crear un nuevo PDF y me gustaría que el cambio se refleje en el PDF existente. Si estoy configurando el nombre del archivo de destino igual que el nombre del archivo original, entonces no se refleja ningún cambio. Soy nuevo en iTextSharp, ¿hay algo que esté haciendo mal? Por favor ayuda … Proporciono el código que estoy usando

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(); } } } 

Como se documenta en mi libro iText in Action , no puede leer un archivo y escribir en él simultáneamente. Piense en cómo funciona Word: no puede abrir un documento de Word y escribir directamente en él. Word siempre crea un archivo temporal, escribe los cambios en él, luego reemplaza el archivo original con él y luego descarta el archivo temporal.

Tu también puedes hacer eso:

  • lea el archivo original con PdfReader ,
  • crea un archivo temporal para PdfStamper , y cuando hayas terminado,
  • reemplace el archivo original con el archivo temporal.

O:

  • lea el archivo original en un byte[] ,
  • crear PdfReader con este byte[] , y
  • usa la ruta al archivo original para PdfStamper .

Esta segunda opción es más peligrosa, ya que perderá el archivo original si hace algo que causa una excepción en PdfStamper .