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;
 }
Пример #2
0
        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));
        }
Пример #11
0
        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);
        }
Пример #12
0
 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());
            }
        }
Пример #15
0
        /// <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("");
        }