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