private static async Task RenderPdfAFromDocumentLink(this DocumentGenerationClient documentGenerationClient, ConvertedDocumentDetails convertedDocumentDetails) { var ext = convertedDocumentDetails.DocumentFormat; try { DiagnosticLog($"Requesting document conversion from url {convertedDocumentDetails.Description}"); var documentGenerationProgress = await documentGenerationClient.RequestDocumentConversionToPdfA( convertedDocumentDetails.ConfigurationId, new DocumentConversionToPdfARequestDetails( convertedDocumentDetails.SourceDocumentUrl, convertedDocumentDetails.SourceDocumentFormat)) .ConfigureAwait(false); const int secondsToTimesUp = 30; var stopWatch = Stopwatch.StartNew(); while (stopWatch.Elapsed.TotalSeconds < secondsToTimesUp) { var documentGenerationRequestStatusCheck = await documentGenerationClient.GetDocumentGenerationProgress(documentGenerationProgress.Id) .ConfigureAwait(false); switch (documentGenerationRequestStatusCheck.State) { case DocumentGenerationState.Failed: DiagnosticLog( $"Document conversion failed for {convertedDocumentDetails.Description}: {documentGenerationRequestStatusCheck.FailReason}"); throw new Exception("Document generation failed for template: "); case DocumentGenerationState.Requested: DiagnosticLog($"{convertedDocumentDetails.Description}: document not yet ready."); Thread.Sleep(300); continue; case DocumentGenerationState.Completed: break; } var documentUri = await documentGenerationClient.GetDocumentGenerationUri(documentGenerationProgress.Id) .ConfigureAwait(false); if (documentUri?.Uri != null) { var filename = GetTempFilename(convertedDocumentDetails.Description, ext.Ext()); await using (var fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None)) { var response = await new HttpClient().GetAsync(documentUri.Uri).ConfigureAwait(false); await response.Content.CopyToAsync(fs).ConfigureAwait(false); } DiagnosticLog( $"{convertedDocumentDetails.Description}: Rendered document written to {filename}"); convertedDocumentDetails.LocalDownloadPath = filename; convertedDocumentDetails.FileSize = new FileInfo(filename).Length; convertedDocumentDetails.AnchorDetails = new AnchorDetails { Href = documentUri.Uri, Expiry = documentUri.UriExpiryTime, LinkText = $"download.{ext.Ext()}", }; } return; } DiagnosticLog($"{convertedDocumentDetails.Description}: Gave up after {secondsToTimesUp} seconds."); } catch (Exception e) { DiagnosticLog($"{e.Message}/{e.StackTrace}"); } }
private static async Task GenerateDocumentFromTemplate(this DocumentGenerationClient documentGenerationClient, GeneratedDocumentDetails documentDetails) { try { DiagnosticLog($"Requesting document generation from template {documentDetails.Template.TemplateId}"); var documentGenerationProgress = await documentGenerationClient.RequestDocumentGeneration( documentDetails.ConfigurationId, new DocumentGenerationRequestDetails( documentDetails.HierarchyPath, documentDetails.Template.TemplateId, documentDetails.Template.Languages.FirstOrDefault() ?? string.Empty, documentDetails.DocumentFormat, documentDetails.MergeData, null, false, new Guid("11111111-1111-1111-1111-111111111111"))) .ConfigureAwait(false); const int secondsToTimesUp = 30; var stopWatch = Stopwatch.StartNew(); while (stopWatch.Elapsed.TotalSeconds < secondsToTimesUp) { var generationProgress = await documentGenerationClient.GetDocumentGenerationProgress(documentGenerationProgress.Id) .ConfigureAwait(false); switch (generationProgress.State) { case DocumentGenerationState.Failed: DiagnosticLog( $"Document generation failed for template: {documentDetails.Template.TemplateId}: {generationProgress.FailReason}"); throw new Exception("Document generation failed for template: "); case DocumentGenerationState.Requested: DiagnosticLog($"{documentDetails.Template.TemplateId}: document not yet ready."); Thread.Sleep(300); continue; case DocumentGenerationState.Completed: break; } var documentUri = await documentGenerationClient.GetDocumentGenerationUri(documentGenerationProgress.Id) .ConfigureAwait(false); if (documentUri?.Uri != null) { var filename = GetTempFilename(documentDetails.Template.TemplateId, documentDetails.DocumentFormat.Ext()); await using (var fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None)) { var response = await new HttpClient().GetAsync(documentUri.Uri).ConfigureAwait(false); await response.Content.CopyToAsync(fs).ConfigureAwait(false); } DiagnosticLog( $"{documentDetails.Template.TemplateId}: Generated document written to {filename}"); documentDetails.LocalDownloadPath = filename; documentDetails.FileSize = new FileInfo(filename).Length; documentDetails.AnchorDetails = new AnchorDetails { Href = documentUri.Uri, Expiry = documentUri.UriExpiryTime, LinkText = $"download.{documentDetails.DocumentFormat.Ext()}", }; } return; } DiagnosticLog($"{documentDetails.Template.TemplateId}: Gave up after {secondsToTimesUp} seconds."); } catch (Exception e) { DiagnosticLog($"{e.Message}/{e.StackTrace}"); } }