Example #1
0
        private void PersistParsedHtmlTemplateOfPdfDocument(PdfEntity entity, string html, JObject templateData)
        {
            var templatedHtml = _templatingEngine.Render(html, templateData);

            templatedHtml = TemplateUtils.AddWaitForAllPageElementsFixToHtml(templatedHtml);
            _pdfStorage.AddOrReplace(new StorageData(new StorageFileId(entity, "html"), Encoding.UTF8.GetBytes(templatedHtml)));
        }
Example #2
0
        public void CreatePdf(Guid pdfEntityId)
        {
            var entity          = _context.PdfFiles.Single(x => x.Id == pdfEntityId);
            var htmlFromStorage = _storage.Get(new StorageFileId(entity, "html"));
            var data            = GeneratePdfDataFromHtml(pdfEntityId, Encoding.UTF8.GetString(htmlFromStorage.Data),
                                                          entity.Options).GetAwaiter().GetResult();

            _storage.AddOrReplace(new StorageData(new StorageFileId(entity), data));

            entity.Processed = true;

            _mqMessages.PdfGenerated(entity.GroupId, entity.FileId);

            _context.SaveChanges();
        }
Example #3
0
        public void MergePdf(StorageFileId storageIdForMergedPdf, string[] pdfIds)
        {
            Debug.Assert(storageIdForMergedPdf.Extension == "pdf");

            var temp = ResolveTemporaryDirectory();

            _logger.LogInformation($"Using temporary folder: {temp}");

            try
            {
                var mergedFile = _context.PdfFiles.Single(x => x.GroupId == storageIdForMergedPdf.Group && x.FileId == storageIdForMergedPdf.Id);

                var pdfEntities = _context.PdfFiles
                    .Where(x => x.GroupId == storageIdForMergedPdf.Group)
                    .Where(x => pdfIds.Any(id => x.FileId == id))
                    .ToList();

                if(pdfEntities.Any(x => !x.Processed))
                    throw new InvalidOperationException(
                        $"Tried to merge files that are not ready, non ready pdf list is '{pdfEntities.Where(x => !x.Processed).Select(x => x.FileId).Aggregate("", (a, b) => $"{a}, {b}").Trim(',')}'");

                var pdfs = pdfIds
                    .Select(id => _pdfStorage.Get(new StorageFileId(storageIdForMergedPdf.Group, id, "pdf")))
                    .Select(pdf => (tempFile: Path.Combine($@"{temp}", $"{pdf.StorageFileId.Id}.pdf"), data: pdf.Data)).ToList();

                pdfs.ForEach(x => File.WriteAllBytes(x.tempFile, x.data));

                var mergedPdf = MergeFiles(temp, pdfs.Select(x => x.tempFile));

                _pdfStorage.AddOrReplace(new StorageData(storageIdForMergedPdf, mergedPdf));

                mergedFile.Processed = true;

                _context.SaveChanges();
            }
            finally
            {
                _logger.LogInformation($"Removing temporary folder: {temp}");
                Directory.Delete(temp, true);
            }
        }