private OASResponse StartPPTConversion(OASModels.ConversionSettings settings, SPUserToken userToken)
        {
            OASResponse oasResponse = new OASResponse();

            using (SPSite site = (userToken == null ? new SPSite(ConfigurationManager.AppSettings["SiteUrl"]) : new SPSite(ConfigurationManager.AppSettings["SiteUrl"], userToken)))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    try
                    {
                        web.AllowUnsafeUpdates = true;

                        byte[] input = Convert.FromBase64String(settings.Content);

                        SPFolder lib = GetOASLibrary(web);

                        //add source file to library
                        string source  = Guid.NewGuid().ToString();
                        SPFile srcfile = lib.Files.Add(source, input, true);

                        string dest = source + EXTENSION;


                        //Set up the job
                        MemoryStream ms = new MemoryStream();
                        Microsoft.Office.Server.PowerPoint.Conversion.FixedFormatSettings ppsettings = FillPowerPointConversionOptions(settings.Options);

                        PdfRequest request = new PdfRequest(new MemoryStream(input), ".pptx", ppsettings, ms);

                        PPTJob job = new PPTJob();
                        job.source  = source;
                        job.dest    = dest;
                        job.web     = web;
                        job.output  = ms;
                        job.request = request;

                        IAsyncResult result = request.BeginConvert(SPServiceContext.GetContext(web.Site), PPTConversionFinished, job);

                        // put file to the processing list
                        AddFileToList(web, job.jobId.ToString(), dest, DocType.PPTX);

                        oasResponse.FileId    = job.jobId.ToString();
                        oasResponse.ErrorCode = OASErrorCodes.Success;
                    }
                    catch (Exception ex)
                    {
                        oasResponse.ErrorCode = OASErrorCodes.ErrFailedConvert;
                        oasResponse.Message   = ex.Message;
                    }
                }
            }

            return(oasResponse);
        }
        static void PPTConversionFinished(IAsyncResult result)
        {
            // Get the state object associated with this request.
            PPTJob request = (PPTJob)result.AsyncState;

            try
            {
                //finish converrsion
                request.request.EndConvert(result);

                // Save result to the file
                SPFolder lib     = GetOASLibrary(request.web);
                SPFile   srcfile = lib.Files.Add(request.dest, request.output.ToArray(), true);
                srcfile.Update();

                // Set conversion record to finished state
                SetFileFinished(request.web, request.jobId);
            }
            catch (Exception ex)
            {
                // In case of any error need cleanup file records
                RemoveConversionFiles(request.web, request.jobId);
            }
        }