2016-03-02 2 views
0

Я использую визуальную базовую в сочетании с iTextSharp для заполнения формы PDF.Используйте VB.net и iTextSharp для удаления значения MAXLEN поля на acroform

Все замечательно, за исключением того факта, что длина одного из полей формы слишком короткая.

Из того, что я могу определить, мне нужно удалить значение MAXLEN для поля из словаря ... но я дрогнута, если могу узнать, как это сделать, используя VB и iTextSharp.

Само поле называется «internalP» и в настоящее время установлено на длину 4 символа. Мне нужно, чтобы оно было 10 символов.

Я предположил, что могу как-то изменить поле, но, проведя несколько часов, оглядываясь по сторонам, я думаю, что решение - это просто удалить свойство MAXLEN, просто я не могу найти какой-либо пример кода.

Помогите пожалуйста?

код я бегу до сих пор это:

Привет, мой код выглядит следующим образом:

Imports iTextSharp.text.pdf 
Imports iTextSharp.text 
Imports System.IO 


Public Class Form1 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

End Sub 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim pdfTemplate As String = "z:\shared\LP1F.pdf" 
    Dim newFile As String = "z:\shared\Final.pdf" 

    Dim pdfReader As New PdfReader(pdfTemplate) 
    Dim pdfStamper As New PdfStamper(pdfReader, New FileStream(newFile, FileMode.Create)) 

    Dim pdfFormFields As AcroFields = pdfStamper.AcroFields 


    ' set form pdfFormFields 
    ''' 
    'this was my first attempt but is not working 
    'I receive a compilation error saying that I can't use nul' 
    ''' 
    pdfFormFields.SetFieldProperty("internalP", "FieldMaxLength", 10, null) 
    pdfFormFields.RegenerateField("internalP") 
    pdfFormFields.SetField("internalP", "1234567890") 


    ''' 
    ' therefore I started with this code, but then got stuck!! 
    ''' 
    Dim item As AcroFields.Item 
    item = pdfFormFields.GetFieldItem("internalP") 
    Dim pdfDictionary As PdfDictionary = item.GetWidget(0) 
    pdfDictionary.Remove(PdfName.MAXLEN) 


    MessageBox.Show("Finished") 

    ' flatten the form to remove editting options, set it to false 
    ' to leave the form open to subsequent manual edits 
    pdfStamper.FormFlattening = False 

    ' close the pdf 
    pdfStamper.Close() 

End Sub 

End Class 
+0

Пожалуйста, покажите код, который у вас уже есть. –

+0

Привет, я обновил свой пост с моим кодом, поскольку он в настоящее время стоит –

+0

Вам нужно программно изменять размер поля каждый раз, или вы можете просто перейти в программу редактирования, такую ​​как Adobe Acrobat, внести изменения один раз и сделать это с помощью Это? –

ответ

1

Bruno's answer here дает вам глубокое понимание того, что происходит, и я очень рекомендую вам прочитать Это. Однако для другого свойства этот код должен работать для вас.

''//Get the form item 
Dim fi = pdfFormFields.GetFieldItem("internalP") 

''//Get the merged propertoes 
Dim props = fi.GetMerged(0) 

''//Set a new value 
props.Put(PdfName.MAXLEN, New PdfNumber(10)) 

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

+0

Hi Chris, Спасибо !!!! –

Смежные вопросы