2013-07-02 1 views
2

Я использую C# и iTextSharp для PDF-файлов. У меня есть шаблон PDF, который имеет поля формы для информации, а также поля формы для электронных подписей. Мне нужно, чтобы персонал заполнил нашу часть формы, затем в коде, сгладить эту часть (оставив поля подписи в одиночку), а затем я передам PDF в API DocuSign, чтобы пользователь подписал документ в электронном виде.Как сгладить некоторые поля в форме PDF, но не все из них

У меня есть требования, что только поля, которые должны быть изменены пользователем (подпись), являются полями формы, когда они достигают API DocuSign. Я должен сгладить все остальные поля, прежде чем передавать их в API DocuSign (DocuSign автоматически может заполнить поля формы тегов для Подписи).

Кто-нибудь знает, как это сделать? Я подумал о том, чтобы получить положение полей подписи, и после сглаживания всего PDF, добавляющего поля формы обратно в iTextSharp, но я чувствую, что это взломать.

ответ

4

Если вы хотите, чтобы сгладить определенную область, а не весь документ, то я считаю, вы можете использовать следующее:

Stamper.FormFlattening = true; 
Stamper.PartialFormFlattening("FieldName"); 

Единственный недостаток этого метода является то, что вам нужно перечислите каждое поле, которое должно быть сплющено. Я думаю, что они также должны содержать значение (т. Е. Вы не можете сгладить пустое поле).

+0

другой недостаток - это не работает для форм XFA –

0

Для РФА формы вы получите

Частичная форма сплющивания не поддерживается формами XFA.

исключение если вы используете PartialFormFlattening.

Для плоского некоторых полей я использовал

stamper.AcroFields.SetFieldProperty(fieldName, "setfflags", PdfFormField.FF_READ_ONLY, null); 

убедитесь, что вы используете полный FIELDNAME (например, для W-9 Имени использования в полевых условиях "topmostSubform [0] .Page1 [0] .f1_1 [0]" не «f1_1 "), иначе это не сработает.

Я также попытался удалить XFA с

PdfDictionary acro = 
    (PdfDictionary)PdfReader.GetPdfObject(
      pdfReader.Catalog.Get(PdfName.ACROFORM)); 
       acro.Remove(PdfName.XFA); 

, как это описано here, но я получил такое же исключение.