2015-07-08 4 views
0

У меня есть Acroform PDF (PDF, который можно редактировать), но я использую API для подписи PDF, который требует, чтобы PDF был нормальным и никогда не был Acroform.AcroForm PDF to normal PDF in C#

Есть ли способ преобразовать PDF-файл AcroForm в обычный?

Я пробовал делать это только для чтения, но даже если его нельзя отредактировать, он по-прежнему является Acroform PDF.

+0

Я считаю, что вы должны выравнивать форму, дайте мне двойную проверку. – JasonWilczak

+0

PDF с полями формы AcroForm *** является ** нормальным *. То, что вы называете * Acroform PDF *, скорее всего, представляет собой PDF-файл с полями AcroForm, который был * Reader-enabled *, то есть который содержит подписывания прав использования. Подпись прав использования также является обычным PDF-файлом, но некоторые простые API подписывания могут иметь проблемы с ранее подписанными PDF-файлами. – mkl

ответ

2

В ответ на мой комментарий, я полагаю, вы используете iTextSharp, даже если вы не укажете. Используя iTextSharp, я считаю, что вам нужно сгладить форму, когда закончите. Вот простой пример:

public void GeneratePDF(string filePath, List<PDFField> modifiedFields) 
     { 
      var pdfReader = new PdfReader(filePath); 
      var folderStructure = filePath.Split('\\'); 
      if (folderStructure.Length == 0) return; 
      var currentFileName = folderStructure.Last(); 
      var newFilePath = string.Format("{0}{1}", Constants.SaveFormsPath, 
       currentFileName.Replace(".pdf", DateTime.Now.ToString("MMddyyhhmmss") + ".pdf")); 
      var pdfStamper = new PdfStamper(pdfReader, new FileStream(newFilePath, FileMode.Create)); 
      foreach (var field in modifiedFields.Where(f=>f.Value != null)) 
      { 
       pdfStamper.AcroFields.SetField(field.Name, field.Value); 
      } 
      pdfStamper.FormFlattening = true; 
      pdfStamper.Close(); 
     } 

Игнорирование части о имени файла, оно сводится к тому, переходящим в некоторых ключевом списке значений относительно значений полей, чтобы установить. Это может быть то, где вы делаете свою часть подписи, а затем устанавливаете свойство FormFlattening на значение stamper в true.

Вот еще SO пост, где они использовали похожую технику для немного другого вопроса, это может быть полезным: How to flatten already filled out PDF form using iTextSharp

+0

Я действительно использую iTextSharp, да. Я собираюсь проверить это сразу. Благодарю. –