Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PDFSharp filling in form fields

Tags:

c#

pdf

pdfsharp

I would like to fill in form fields in a premade PDF doc, but I'm receiving a Null Refrence error with AcroForm when running.

 string fileN4 = TextBox1.Text + " LOG.pdf";

  File.Copy(Path.Combine(textBox4.Text + "\\", fileN4),
               Path.Combine(Directory.GetCurrentDirectory(), fileN4), true);

  // Open the file
  PdfDocument document = PdfReader.Open(fileN4, PdfDocumentOpenMode.Modify);

  PdfTextField currentField = (PdfTextField)(document.AcroForm.Fields["<CASENUM>"]);
  //const 
        string caseName = TextBox1.Text;
  PdfString caseNamePdfStr = new PdfString(caseName);

  //set the value of this field
  currentField.Value = caseNamePdfStr;


  // Save the document...
  document.Save(fileN4);

So PdfTextField currentField = (PdfTextField)(document.AcroForm.Fields["<CASENUM>"]); is where the error happens. It seams that AcroForm is not even recognizing the fields.

Another option would be a find and replace text in a PDF (without using itextsharp as cannot use due to licensing).

Any help would be awesome!

like image 581
user770344 Avatar asked Jun 05 '11 02:06

user770344


People also ask

How to fill fields in an existing PDF document?

Below are the steps to fill fields in an existing PDF document: 1 Load source PDF document 2 Get Textbox Fields and fill values 3 Get Radio button field and select an option from the group 4 Save filled PDF form

How do I add a form to a PDF file?

First, make a new PDF document, and add a new PDF page to document. Second, create CheckBox, ComboBox, ListBox, RadioButton, TextBox FormField, initialize each Form field value, define each Form field size and position, and insert each Form field to page.

Does the form contain a PDF file?

The form itself contains only a docked textbox used to display all of the field names from an existing PDF document. The completed PDF is generated and stored in the local file system; the PDF is not opened for display by the application.

How to use JavaScript in PDF form fields with Aspose?

You can use JavaScript in PDF form fields with Aspose.PDF for .NET API. Let us follow the below steps to achieve this requirement: Aspose. Pdf. Document pdfdoc = new Aspose. Pdf. Document (); pdfdoc. Pages. Add (); Aspose. Pdf.


3 Answers

You also need this if you are attempting to populate PDF form fields, you also need to set the NeedsAppearances element to true. Otherwise the PDF will "hide" the values on the form. Here is the VB code.

If objPdfSharpDocument.AcroForm.Elements.ContainsKey("/NeedAppearances") = False Then     objPdfSharpDocument.AcroForm.Elements.Add("/NeedAppearances", New PdfSharp.Pdf.PdfBoolean(True)) Else     objPdfSharpDocument.AcroForm.Elements("/NeedAppearances") = New PdfSharp.Pdf.PdfBoolean(True) End If 
like image 99
Marc Ferree Avatar answered Sep 19 '22 15:09

Marc Ferree


I've been working on this today and I've managed to create a working solution. I've pasted my working code below. The only real differences I can see between my code and the OP's is the following:

  • I included Marc Ferree's code to set NeedAppearances (+1 and Many thanks!!)
  • I set the Text property of the field using a String variable, and not the Value property using a PdfString.

Hopefully this will be of use to somebody trying to do the same.

string templateDocPath = Server.MapPath("~/Documents/MyTemplate.pdf"); PdfDocument myTemplate = PdfReader.Open(templateDocPath, PdfDocumentOpenMode.Modify); PdfAcroForm form = myTemplate.AcroForm;  if (form.Elements.ContainsKey("/NeedAppearances")) {     form.Elements["/NeedAppearances"] = new PdfSharp.Pdf.PdfBoolean(true); } else {     form.Elements.Add("/NeedAppearances", new PdfSharp.Pdf.PdfBoolean(true)); }  PdfTextField testField = (PdfTextField)(form.Fields["TestField"]); testField.Text = "012345";  myTemplate.Save(Server.MapPath("~/Documents/Amended.pdf"));  // Save to new file. 
like image 45
paulH Avatar answered Sep 19 '22 15:09

paulH


I have just experienced something similar to this. The first pdf file I opened did not contain acroform data and resulted in a null exception as described above. The issue is not with the opening of the pdf but the reference to the Acroform member variable having a value of null. You can test your pdf using the following code example:

    OpenFileDialog ofd = new OpenFileDialog();
    if (ofd.ShowDialog() == DialogResult.OK)
    {
        PdfDocument _document = null;
        try
        {
            _document = PdfReader.Open(ofd.FileName, PdfDocumentOpenMode.Modify);
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message,"FATAL");
            //do any cleanup and return
            return;
        }

        if (_document != null)
        {
            if (_document.AcroForm != null)
            {
                MessageBox.Show("Acroform is object","SUCCEEDED");
                //pass acroform to some function for processing
                _document.Save(@"C:\temp\newcopy.pdf");
            }
            else
            {
                MessageBox.Show("Acroform is null","FAILED");
            }
        }
        else
        {
            MessageBox.Show("Uknown error opening document","FAILED");
        }
    }

ADENDUM

I also noticed the key in this line of code should not have angle brackets

document.AcroForm.Fields["<CASENUM>"]

Change it to

document.AcroForm.Fields["CASENUM"]
like image 43
Moog Avatar answered Sep 19 '22 15:09

Moog