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); } }