Как обновить PDF без создания нового PDF?

asp.net itextsharp tridion tridion-2011 tridion-core-services

3366 просмотра

1 ответ

11 Репутация автора

Мне необходимо заменить слово в существующем PDF AcroField на другое слово. Я использую PDFStamper из iTEXTSHARP, чтобы сделать то же самое, и он работает нормально. Но при этом необходимо создать новый PDF, и я бы хотел, чтобы это изменение было отражено в самом существующем PDF. Если я задаю имя файла назначения так же, как и исходное имя файла, то никакие изменения не отображаются. Я новичок в iTextSharp, есть ли что-то, что я делаю неправильно? Пожалуйста, помогите .. Я предоставляю часть кода, который я использую

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

                }

            }
        }
Автор: tk2013 Источник Размещён: 18.04.2013 11:34

Ответы (1)


5 плюса

65288 Репутация автора

Как описано в моей книге « iText in Action» , вы не можете читать файл и записывать в него одновременно. Подумайте, как работает Word: вы не можете открыть документ Word и писать прямо в него. Word всегда создает временный файл, записывает в него изменения, затем заменяет исходный файл им и затем выбрасывает временный файл.

Вы можете сделать это тоже:

  • прочитайте оригинальный файл PdfReader,
  • создать временный файл для PdfStamper, и когда вы закончите,
  • замените исходный файл временным файлом.

Или же:

  • прочитать исходный файл в byte[],
  • создать PdfReaderс этим byte[], и
  • используйте путь к исходному файлу для PdfStamper.

Этот второй вариант более опасен, поскольку вы потеряете исходный файл, если сделаете что-то, что вызывает исключение в PdfStamper.

Автор: Bruno Lowagie Размещён: 18.04.2013 12:13
32x32