3
votes

I have an application where customers fill out a PDF form and then post it to a sharepoint library. Once the document is posted, we want to kick of an event handler to extract the user data from the form and post it into one or more sharepoint lists.

Any ideas on how I get started- I'm a novice with PDF forms but have a good understanding of SharePoint development.

3

3 Answers

3
votes

Take a look at www.pdfsharepoint.com. Their product allows filling in Pdf forms and submitting them in to SharePoint. Fields can be mapped to SharePoint columns.

Dmitry

0
votes

You can write a custom handler that catches a PDF Form submit as explained here (includes sample code).

Alternatively you can use a workflow that is triggered when a PDF Form is saved and extract the data from the form using a third party library.

If you prefer to use SharePoint Designer workflows then you can embed your .net code directly into the workflow using a product such as the Workflow Power Pack. (Disclaimer, I worked on this product and it is fab ;-).

You probably have a good reason to use PDF Forms, but you could also consider using InfoPath or even MS-Word to fill out your forms. It is easy to extract Word and InfoPath data from SharePoint and if you wish you can convert the documents to PDF as well.

0
votes

If you can use PDF form submit action then you can have the form submit the data directly to the SharePoint list. To do this, you will need to create a custom http handler and save it to _Layouts folder with ".ashx" extension.

In PDF form, set the submit action to submit the data in XML and point it to the URL of the http handler.

Here is example code of the handler;

<%@ Assembly Name="Microsoft.SharePoint,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %>
<%@ WebHandler Language="C#" Class="SP_PDFSubmitHandler" %>

using System;
using System.Web;
using Microsoft.SharePoint;
using System.Xml;

public class SP_PDFSubmitHandler : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        SPSite site = SPContext.Current.Site;
        SPWeb web = site.OpenWeb();

        try
        {
            string rawXML = "";
            XmlTextReader reader = new XmlTextReader(context.Request.InputStream);
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(reader);
            string _xmlString = xmlDoc.InnerXml;
            System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
            string _fileTime = DateTime.Now.ToFileTime().ToString();

            byte[] docAsBytes = encoding.GetBytes(_xmlString);

            //Insert Document 
        web.AllowUnsafeUpdates = true;

            SPList list = web.Lists["Purchase Order"];
            SPListItem item = list.Items.Add();

            item["Title"] = "PurchaseOrder_" + _fileTime + ".xml";
            item["Company Name"] = xmlDoc.GetElementsByTagName("txtOrderedByCompanyName").Item(0).InnerText;
            item["Date"] = xmlDoc.GetElementsByTagName("dtmDate").Item(0).InnerText;
            item["Order Total"] = xmlDoc.GetElementsByTagName("numGrandTotal").Item(0).InnerText;
            item.Attachments.Add("PurchaseOrder_" + _fileTime + ".xml", docAsBytes);
            item.Update();

        //Redirect the browser to the Purchase Order list so we can see our submisison.
        context.Response.Redirect("http://myserver/Lists/Purchase%20Order/AllItems.aspx");   

        }
        catch (Exception ex)
        {
            context.Response.Write(ex.Message);
        }


    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}

Here is a great post which describes the process http://blogs.adobe.com/mtg/2009/03/submitting-data-from-an-pdf-form-to-ms-sharepoint.html

Here is the MSDN post about Handlers https://msdn.microsoft.com/en-us/library/bb457204.aspx