void FillDefaultParagraphSettings(Paragraph par, PdfSettingDto settings) { par.Format.Alignment = settings.Aligment; par.Format.Font.Name = settings.FontName; par.Format.Font.Size = settings.FontSize; par.Format.Font.Color = Colors.Black; }
public byte[] PdfPreview(PdfSettingDto setting, bool isBase64Encode = true, string currency = "$") { setting.Date = DateTime.Now; var trans = _transactionService.GetAnyPayment(); LetterFieldsDto fields = _letterService.GetLetterFields((int)trans.TransactionId, currency: currency); var addresses = _addressService.GetAddressesByFamilyId(trans.FamilyId); MapAddressesForPdfSetting(setting, addresses.FirstOrDefault()); //check if we have alresdy pdf template if ((string.IsNullOrEmpty(setting.Template) || string.IsNullOrEmpty(setting.SignatureImage)) && setting.PDFSettingID != null) { var templ = _letterService.GetPdfSetting((int)setting.PDFSettingID); if (string.IsNullOrEmpty(setting.Template)) { setting.Template = templ.Template; } if (string.IsNullOrEmpty(setting.SignatureImage)) { setting.SignatureImage = templ.SignatureImage; } } //PdfSettingDto setting = PreparePdfSetting(letter, department, addresses, transaction); var country = _settingsProvider.GetSetting(Settings.DefaultCountry).Value; var response = _pdfTemplate.GetPdfPreview(setting, country, fields); if (isBase64Encode) { return(EncodeBase64(response)); } return(response); }
private string GetAddress(PdfSettingDto settings, string countryInSettings) { var addressLine = new StringBuilder(); if (!string.IsNullOrEmpty(settings.Label)) { addressLine.Append($"{settings.Label}\n"); } if (!string.IsNullOrEmpty(settings.CompanyName)) { addressLine.Append($"{settings.CompanyName}\n"); } addressLine.Append($"{settings.Address1}\n"); if (!string.IsNullOrEmpty(settings.Address2)) { addressLine.Append($"{settings.Address2}\n"); } addressLine.Append(GetCSZByTemplate(settings.CSZ, settings.City, settings.State, settings.Zip)); if (string.IsNullOrEmpty(countryInSettings) || !string.Equals(settings.Country, countryInSettings, StringComparison.InvariantCultureIgnoreCase)) { addressLine.Append($" \n{settings.Country}\n"); } return(addressLine.ToString()); }
/// <summary> /// Save File end return path(use for batch letter /// </summary> /// <param name="settings"></param> /// <param name="countryInSettings"></param> /// <param name="fields"></param> /// <param name="path">path for saving</param> /// <returns></returns> public string GetBatchPdfFromTamplate(PdfSettingDto settings, string countryInSettings, LetterFieldsDto fields, string path) { PdfDocument document = PrepareDocument(ReadOrCreateDocument(settings, PdfDocumentOpenMode.Modify), settings, countryInSettings, fields); document.Save(path); document.Dispose(); return(path); }
private void AddAddress(Section sec, PdfSettingDto settings, string countryInSettings) { Paragraph para = sec.AddParagraph(); para = sec.AddParagraph(); FillDefaultParagraphSettings(para, settings); para.Format.Alignment = settings.AddressAligment; para.Format.LeftIndent = Unit.FromInch(settings.AddressIndent); para.AddText(GetAddress(settings, countryInSettings)); AddEmptyLineForSpacing(sec, Unit.FromInch(settings.BlockSpacing)); }
PdfDocument PrepareDocument(PdfDocument document, PdfSettingDto settings, string countryInSettings, LetterFieldsDto fields, int pageNum = 0, bool isBase64 = false) { PdfPage page = document.Pages[pageNum]; XGraphics gfx = XGraphics.FromPdfPage(page); // HACK² gfx.MUH = PdfFontEncoding.Unicode; Document doc = new Document(); Section sec = doc.AddSection(); DocumentRenderer docRenderer = new DocumentRenderer(doc); sec.PageSetup.LeftMargin = Unit.FromInch(settings.LeftMargin); sec.PageSetup.RightMargin = Unit.FromInch(settings.RightMargin); sec.PageSetup.TopMargin = Unit.FromInch(settings.TopMargin); sec.PageSetup.BottomMargin = Unit.FromInch(settings.BottomMargin); //date if (settings.ShowDate) { AddDate(sec, settings); } //address if (settings.ShowAddress) { AddAddress(sec, settings, countryInSettings); } // body AddBody(sec, settings); //signature if (settings.ShowSingnature) { AddSignature(sec, settings, isBase64); } //fields if (settings.HasReceiptStub) { FillFields(document, fields, settings, countryInSettings); } docRenderer.PrepareDocument(); int pageCount = docRenderer.FormattedDocument.PageCount; for (int idx = 0; idx < pageCount; idx++) { docRenderer.RenderPage(gfx, idx + 1, PageRenderOptions.All); } gfx.Dispose(); return(document); }
void AddSignaturePS(Section sec, PdfSettingDto settings) { if (string.IsNullOrEmpty(settings.PS)) { return; } var para = sec.AddParagraph(); FillDefaultParagraphSettings(para, settings); para.Format.LineSpacingRule = LineSpacingRule.Exactly; para.Format.LineSpacing = Unit.FromInch(settings.LineSpacing); para.Format.LeftIndent = Unit.FromInch(settings.SignatureIndent); para.AddText(settings.PS); }
PdfDocument CreateDocumentForPreview(PdfSettingDto settings, PdfDocumentOpenMode mode) { //todo implement sending template return(new PdfDocument()); string directory = ""; PdfDocument document; if (string.IsNullOrEmpty(settings.Template)) { // check if user didn't setup manual page size, will setup it like A4 format if (settings.PageHeight == null) { settings.PageHeight = 11.7; } if (settings.PageWidth == null) { settings.PageWidth = 8.3; } document = new PdfDocument(); var initPage = document.AddPage(); initPage.Height = XUnit.FromInch(settings.PageHeight.Value); initPage.Width = XUnit.FromInch(settings.PageWidth.Value); //document should be imported so I have to reopen it using (MemoryStream ms = new MemoryStream()) { document.Save(ms, false); document = PdfReader.Open(ms, mode); } } else { if (settings.Template.IsBase64()) { var pdfArr = Convert.FromBase64String(settings.Template); MemoryStream pdfStream = new MemoryStream(pdfArr, 0, pdfArr.Length); document = PdfReader.Open(pdfStream, mode); } else { //var serverUtil = WorkingContext.HttpContext.Server; //directory = serverUtil.MapPath($"/PDFs/{ExecutingUser.Schema}/Templates"); //if (!Directory.Exists(directory)) throw new DirectoryNotFoundException($"{directory} not found"); //string path = Path.Combine(directory, settings.Template); //document = PdfReader.Open(path, mode); } } return(document); }
private void AddBody(Section sec, PdfSettingDto settings) { if (string.IsNullOrEmpty(settings.BodyText)) { return; } var para = sec.AddParagraph(); FillDefaultParagraphSettings(para, settings); para.Format.LineSpacingRule = LineSpacingRule.Exactly; para.Format.LineSpacing = Unit.FromInch(settings.LineSpacing); para.Format.FirstLineIndent = Unit.FromInch(settings.FirstLineIntent); para.AddText(settings.BodyText.CleaupHtmlSpecificSymbols()); }
private void AddDate(Section sec, PdfSettingDto settings) { Paragraph para = sec.AddParagraph(); FillDefaultParagraphSettings(para, settings); para.Format.Alignment = settings.DateAligment; para.Format.LeftIndent = Unit.FromInch(settings.DateIndent); para.AddText(settings.UseLongDateFormat ? settings.Date.Date.ToString("MMMM d, yyyy") : settings.Date.Date.ToShortDateString()); if (settings.ShowHebrewDate) { para.AddText(Environment.NewLine + new JewishDate(settings.Date.Date).ToString()); } AddEmptyLineForSpacing(sec, Unit.FromInch(settings.BlockSpacing)); }
public PdfSettingDto PreparePdfSetting(LetterDto letter, DepartmentDto department, List <FamilyAddressDto> addresses, PaymentDto transaction, LetterFieldsDto fields) { PdfSettingDto setting = letter?.PDFSettingID == null ? department.PdfSettings : letter.PdfSettings; if (string.IsNullOrEmpty(letter.PDFLetterText)) { throw new Exception("Letter doesn't contain pdf text"); } setting.BodyText = letter.PDFLetterText; setting.Date = DateTime.Now; MapAddressesForPdfSetting(setting, addresses.FirstOrDefault(r => r.AddressId == transaction.AddressId)); setting.Label = fields.Label; return(setting); }
void MapAddressesForPdfSetting(PdfSettingDto settings, FamilyAddressDto address) { if (address == null) { return; } settings.City = address.City; settings.Address1 = address.Address; settings.Country = address.Country; settings.Zip = address.Zip; settings.State = address.State; // settings.Label = address.Label; settings.Address2 = address.Address2; settings.AddressId = address.AddressId; settings.CompanyName = address.Company; }
public byte[] GetPdfPreview(PdfSettingDto settings, string countryInSettings, LetterFieldsDto fields) { PdfDocument document = PrepareDocument(CreateDocumentForPreview(settings, PdfDocumentOpenMode.Modify), settings, countryInSettings, fields, isBase64: true); using (MemoryStream ms = new MemoryStream()) { document.Save(ms, false); byte[] buffer = new byte[ms.Length]; ms.Seek(0, SeekOrigin.Begin); ms.Flush(); ms.Read(buffer, 0, (int)ms.Length); ms.Close(); return(buffer); } }
private void AddEndYearBody(Section sec, PdfSettingDto settings, List <EndYearTransactions> transactionList, decimal totalAmount) { if (string.IsNullOrEmpty(settings.BodyText)) { return; } var para = sec.AddParagraph(); var bodyText = settings.BodyText; if (bodyText.Contains("<<TotalAmount>>")) { bodyText = bodyText.Replace("<<TotalAmount>>", totalAmount.ToMoneyString()); } var splittedBody = bodyText.Split(new string[] { "<<TransactionList>>" }, StringSplitOptions.None); var firstPart = splittedBody.Length > 0 ? splittedBody[0] : ""; var lastPart = splittedBody.Length > 1 ? splittedBody[1] : ""; //add the first part if (!string.IsNullOrEmpty(firstPart)) { FillDefaultParagraphSettings(para, settings); para.Format.LineSpacingRule = LineSpacingRule.Exactly; para.Format.LineSpacing = Unit.FromInch(settings.LineSpacing); para.Format.FirstLineIndent = Unit.FromInch(settings.FirstLineIntent); para.AddText(firstPart.CleaupHtmlSpecificSymbols()); } // add table with transaction list AddTransactionList(sec, transactionList); //add second part of text if (!string.IsNullOrEmpty(lastPart)) { para = sec.AddParagraph(); FillDefaultParagraphSettings(para, settings); para.Format.LineSpacingRule = LineSpacingRule.Exactly; para.Format.LineSpacing = Unit.FromInch(settings.LineSpacing); para.Format.FirstLineIndent = Unit.FromInch(settings.FirstLineIntent); para.AddText(lastPart.CleaupHtmlSpecificSymbols()); } }
/// <summary> /// CreatePdf /// </summary> /// <param name="dto"></param> /// <returns></returns> public byte[] PdfDoc(BatchLetterDto dto, bool isBase64Encode = true, string currency = "$") { LetterDto letter = null; DepartmentDto department = null; var transaction = _transactionService.GetPaymentById(dto.TransactionId); if (dto.LetterId != null) { transaction.LetterId = (short)dto.LetterId; } if (transaction.LetterId != null) { letter = _letterService.GetLetterById(transaction.LetterId.Value); } if (letter == null) { throw new Exception("Transaction don't contain letter"); } LetterFieldsDto fields = _letterService.GetLetterFields(dto.TransactionId, currency: currency); if (!string.IsNullOrEmpty(letter.PDFLetterText)) { letter.PDFLetterText = _templatesProvider.ReplaceFieldsTemplate(letter.PDFLetterText, fields); } if (letter.PDFSettingID == null) { department = _departmentService.GetDepartment(transaction.DepartmentId); } var addresses = _addressService.GetAddressesByFamilyId(transaction.FamilyId); PdfSettingDto setting = PreparePdfSetting(letter, department, addresses, transaction, fields); var country = _settingsProvider.GetSetting(Settings.DefaultCountry).Value; var response = _pdfTemplate.GetPdfFromTamplate(setting, country, fields); if (isBase64Encode) { return(EncodeBase64(response)); } return(response); }
private PdfDocument PrepareDocumentForEndYearBatch(PdfDocument document, PdfSettingDto settings, string countryInSettings, LetterFieldsDto fields, decimal totalAmount, List <EndYearTransactions> transactionList) { Document doc = new Document(); // PdfPage page = document.Pages[0]; Section sec = doc.AddSection(); sec.PageSetup.LeftMargin = Unit.FromInch(settings.LeftMargin); sec.PageSetup.RightMargin = Unit.FromInch(settings.RightMargin); sec.PageSetup.TopMargin = Unit.FromInch(settings.TopMargin); sec.PageSetup.BottomMargin = Unit.FromInch(settings.BottomMargin); //date if (settings.ShowDate) { AddDate(sec, settings); } //address if (settings.ShowAddress) { AddAddress(sec, settings, countryInSettings); } // body AddEndYearBody(sec, settings, transactionList, totalAmount); //signature //if (settings.ShowSingnature) // AddSignature(sec, settings); //fields //if (settings.HasReceiptStub) // FillFields(document, fields, settings, countryInSettings, true); ConvertMigraDocToPdfSharp(ref document, doc); return(document); }
void FillFields(PdfDocument document, LetterFieldsDto fields, PdfSettingDto settings, string countryInSettings, bool isEndYear = false) { PdfAcroForm form = document.AcroForm; if (form == null || fields == null) { return; } var acroFields = form.Fields; var names = acroFields.DescendantNames; if (!names.Any()) { names = acroFields.Names; } foreach (string name in names) { var t = form.Fields[name]; var text = GetValueByName(name, fields, settings, countryInSettings); t.Value = new PdfString(text); ((PdfTextField)t).BackColor = XColor.FromKnownColor(XKnownColor.White); t.ReadOnly = true; } //Ensure the new values are displayed if (document.AcroForm.Elements.ContainsKey("/NeedAppearances") == false) { document.AcroForm.Elements.Add("/NeedAppearances", new PdfBoolean(true)); } else { document.AcroForm.Elements["/NeedAppearances"] = new PdfBoolean(true); } }
private void AddSignature(Section sec, PdfSettingDto settings, bool isBase64 = false) { //todo implement sending signatures to service return; AddEmptyLineForSpacing(sec, Unit.FromInch(settings.ClosingAdj)); var para = sec.AddParagraph(); FillDefaultParagraphSettings(para, settings); para.Format.LineSpacingRule = LineSpacingRule.Exactly; para.Format.LineSpacing = Unit.FromInch(settings.LineSpacing); para.Format.LeftIndent = Unit.FromInch(settings.SignatureIndent); if (!string.IsNullOrEmpty(settings.Closing)) { para.AddText(settings.Closing); } if (!string.IsNullOrEmpty(settings.SignatureImage) && settings.SignatureImage.IsBase64()) { Image image = sec.AddImage("base64:" + settings.SignatureImage); image.LockAspectRatio = true; if (settings.SignatureWidth != null) { image.Width = Unit.FromInch(settings.SignatureWidth.Value); } if (settings.SignatureHeight != null) { image.Width = Unit.FromInch(settings.SignatureHeight.Value); } image.Left = Unit.FromInch(settings.SignatureIndent); } else { ////var serverUtil = WorkingContext.HttpContext.Server; ////var directory = serverUtil.MapPath($"/PDFs/{ExecutingUser.Schema}/Templates/Signatures"); //if (Directory.Exists(directory) && !string.IsNullOrEmpty(settings.SignatureImage)) //{ // string path = Path.Combine(directory, settings.SignatureImage); // if (File.Exists(path)) // { // Image image = sec.AddImage(path); // image.LockAspectRatio = true; // if (settings.SignatureWidth != null) // image.Width = Unit.FromInch(settings.SignatureWidth.Value); // if (settings.SignatureHeight != null) // image.Width = Unit.FromInch(settings.SignatureHeight.Value); // image.Left = Unit.FromInch(settings.SignatureIndent); // } //} } //add sign name if (!string.IsNullOrEmpty(settings.SignatureName)) { AddSignatureName(sec, settings); } //add sign title if (!string.IsNullOrEmpty(settings.SignatureTitle)) { AddSignatureTitle(sec, settings); } //add singnature PS if (!string.IsNullOrEmpty(settings.PS)) { AddEmptyLineForSpacing(sec, Unit.FromInch(settings.BlockSpacing)); AddSignaturePS(sec, settings); } }
string GetValueByName(string name, LetterFieldsDto fields, PdfSettingDto settings, string countryInSettings) { switch (name) { case "Name": return(fields.Name); case "CompanyName": return(fields.CompanyName); case "Address": return(fields.Address); case "Address2": return(fields.Address2); case "City": return(fields.City); case "State": return(fields.State); case "Zip": return(fields.Zip); case "Country": return(fields.Country); case "NameAddress": return(GetAddress(fields, countryInSettings, settings.CSZ)); case "CityStateZip": return(GetCSZByTemplate(settings.CSZ, fields.City, fields.State, fields.Zip)); case "Amount": return(fields.Amount); case "GoodsAmount": //todo implement return(""); case "GoodsDescription": //todo implement return(""); case "TaxDeductibleAmount": //todo implement return(""); case "TextAmount": //todo implement return(""); case "HonorMemory": return(fields.HonorMemory); case "DonationDate": return(fields.DonationDate); case "DonationLongDate": return(fields.DonationLongDate); case "Method": return(fields.PaymentMethod); case "CheckNumber": return(fields.CheckNo); case "ReceiptNumber": return(fields.ReceiptNo.ToString()); case "Category": return(fields.Category); case "Subcategory": return(fields.Subcategory); case "Purpose": return(fields.Subcategory); case "Solicitor": return(fields.Solicitor); case "Organization": return(fields.Department); case "TransactionNote": //todo implement return(""); case "HebrewDate": return(fields.TodayHebrewDate); case "TodayDate": return(fields.TodayDate); case "TodayLongDate": return(fields.TodayLongDate); } return(""); }