예제 #1
0
        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}");
            }
        }
예제 #2
0
        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}");
            }
        }