using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Resources; using System.Text; using System.Xml.Linq; using Aspose.Pdf.Operators; using Aspose.Pdf.Optimization; using Kreta.BusinessLogic.Classes.AsposeHelpers; using Kreta.BusinessLogic.HelperClasses.Dokumentum.TorzslapEsBizonyitvany; using Kreta.BusinessLogic.HelperClasses.NemzetisegiDokumentumokCOs; using Kreta.BusinessLogic.Helpers.DokumentumHelpers; using Kreta.Enums.ManualEnums; using Kreta.Resources; using AsposePdf = Aspose.Pdf; using AsposeWords = Aspose.Words; namespace Kreta.BusinessLogic.Helpers { public partial class AsposeHelper { public (string szorgalom, string magatartas) GetSzorgalomMagatartasNev() { var rm = new ResourceManager(typeof(SzorgalomEsMagatartas)); var resourceSet = rm.GetResourceSet(options.Culture, true, true); var szorgalom = resourceSet.GetString("Szorgalom"); var magatartas = resourceSet.GetString("Magatartas"); return (szorgalom, magatartas); } public MemoryStream GetTorzslap(Stream sablonStream, int formatumId) { var rm = new ResourceManager(typeof(NemzetisegiTorzslap24)); var resourceSet = rm.GetResourceSet(options.Culture, true, true); string nyomtatvanyTemplate; object resultDoc; object htmlOptions; if (formatumId == (int)NyomtatvanyFormatumEnum.PDF) { InitializeDocument(sablonStream, out nyomtatvanyTemplate, out AsposePdf.Document pdfDoc, out AsposePdf.HtmlLoadOptions pdfHtmlOptions); resultDoc = pdfDoc; htmlOptions = pdfHtmlOptions; } else { InitializeDocument(sablonStream, out nyomtatvanyTemplate, out AsposeWords.Document wordDoc, out AsposeWords.HtmlLoadOptions wordHtmlOptions); resultDoc = wordDoc; htmlOptions = wordHtmlOptions; } XDocument xDoc = XDocument.Parse(nyomtatvanyTemplate); if (!options.DocumentParameters.SNIMegjelenites) { RemoveTrDokumentumElem(xDoc, "sniadatok"); } if (!options.DocumentParameters.FelmentesekMegjelenitese) { RemoveTrDokumentumElem(xDoc, "felmentesadatok"); } if (!options.DocumentParameters.FeljegyzesekMegjelenitese) { RemoveTrDokumentumElem(xDoc, "feljegyzesadatok"); } if (!options.DocumentParameters.KozossegiSzolgalatMegjelenitese) { RemoveTrDokumentumElem(xDoc, "kozossegiszolgalatadatok"); } if (!options.DocumentParameters.OKJMegjelenitese) { RemoveDivDokumentumElem(xDoc, "okjadat"); } if (!options.DocumentParameters.TorvenyesKepviseloMegjelenites) { RemoveDivDokumentumElem(xDoc, "torvenyeskepviseloadat"); } if (!options.DocumentParameters.AdatokMegjelenitese) { RemoveDivDokumentumElem(xDoc, "adatok"); } if (!options.DocumentParameters.FejlecMegjelenitese) { var hideFejlecCss = @"#fejlec { color: white; } #fejlec td { border: 0; } "; var styleElemHtml = xDoc.Descendants("style").FirstOrDefault(); if (styleElemHtml != null) { styleElemHtml.Value += hideFejlecCss; } } var idegenDiv = xDoc.Element("html").Element("body").Elements("div").FirstOrDefault(e => e.Attribute("data-lang").Value == "idegen"); var helyettesitettTextNyomtatvany = new StringBuilder(idegenDiv.ToString()); var textCo = new NemzetisegiTorzslapTextCo(resourceSet); ReplaceSubtitutions(helyettesitettTextNyomtatvany, textCo, isLower: true); idegenDiv.ReplaceWith(XElement.Parse(helyettesitettTextNyomtatvany.ToString())); var huDiv = xDoc.Element("html").Element("body").Elements("div").FirstOrDefault(e => e.Attribute("data-lang").Value == "hu-HU"); helyettesitettTextNyomtatvany = new StringBuilder(huDiv.ToString()); textCo = new NemzetisegiTorzslapTextCo(rm.GetResourceSet(CultureInfo.GetCultureInfo("hu-HU"), true, true)); ReplaceSubtitutions(helyettesitettTextNyomtatvany, textCo, isLower: true); huDiv.ReplaceWith(XElement.Parse(helyettesitettTextNyomtatvany.ToString())); var helyettesitettNyomtatvany = xDoc.ToString(); if (options.DocumentParameters.BetuMeret != BetuMeretEnum.Normal) { helyettesitettNyomtatvany = PotlapBetumeretAllitas(helyettesitettNyomtatvany); } var rootCo = new TorzslapEsBizonyitvanyCo(_ds); var (szorgalom, magatartas) = GetSzorgalomMagatartasNev(); var dokumentumNyelvesitesHelper = new DokumentumNyelvesitesHelper(); foreach (var tanuloDetails in rootCo.TanuloDetailsList) { dokumentumNyelvesitesHelper.SetErtekelesek(tanuloDetails.TanuloErtekelesDetailsList, szorgalom, magatartas); var nyomtatvany = new StringBuilder(helyettesitettNyomtatvany); ReplaceSubtitutions(nyomtatvany, tanuloDetails, isLower: true); GenerateDocument(resultDoc, htmlOptions, nyomtatvany.ToString()); } return FinalizeDocument(resultDoc); } private string PotlapBetumeretAllitas(string helyettesitettNyomtatvany) { var matches = System.Text.RegularExpressions.Regex.Matches(helyettesitettNyomtatvany, @"(?font-size: ?(?\d{1,2})px;)", System.Text.RegularExpressions.RegexOptions.Singleline); var sb = new StringBuilder(helyettesitettNyomtatvany.Length); int pos = 0; // position in original string foreach (System.Text.RegularExpressions.Match match in matches) { sb.Append(helyettesitettNyomtatvany, pos, match.Index - pos); // Append the portion of the original we skipped pos = match.Index; sb.Append(match.Groups["teljes"].Value.Replace(match.Groups["meret"].Value, (int.Parse(match.Groups["meret"].Value) - (options.DocumentParameters.BetuMeret == BetuMeretEnum.Small ? 1 : 2)).ToString())); pos += match.Value.Length; } sb.Append(helyettesitettNyomtatvany, pos, helyettesitettNyomtatvany.Length - 1 - pos); helyettesitettNyomtatvany = sb.ToString(); return helyettesitettNyomtatvany; } private static void RemoveTrDokumentumElem(XDocument xDoc, string elemId) { RemoveCommonDokumentumElem(xDoc, "tr", elemId); } private static void RemoveDivDokumentumElem(XDocument xDoc, string elemId) { RemoveCommonDokumentumElem(xDoc, "div", elemId); } private static void RemoveSpanDokumentumElem(XDocument xDoc, string elemId) { RemoveCommonDokumentumElem(xDoc, "span", elemId); } private static void RemoveCommonDokumentumElem(XDocument xDoc, string elem, string elemId) { foreach (var a in xDoc.Descendants(elem).Where(x => x.Attribute("id")?.Value == elemId).ToList()) { a.Remove(); } } public MemoryStream GetBizonyitvany(Stream sablonStream, int formatumId) { string nyomtatvanyTemplate; object resultDoc; object htmlOptions; if (formatumId == (int)NyomtatvanyFormatumEnum.PDF) { InitializeDocument(sablonStream, out nyomtatvanyTemplate, out AsposePdf.Document pdfDoc, out AsposePdf.HtmlLoadOptions pdfHtmlOptions); resultDoc = pdfDoc; htmlOptions = pdfHtmlOptions; } else { InitializeDocument(sablonStream, out nyomtatvanyTemplate, out AsposeWords.Document wordDoc, out AsposeWords.HtmlLoadOptions wordHtmlOptions); resultDoc = wordDoc; htmlOptions = wordHtmlOptions; } XDocument xDoc = XDocument.Parse(nyomtatvanyTemplate); foreach (var notNeeded in xDoc.Element("html").Element("body").Elements("div").Where(e => e.Attribute("id").Value != options.BizonyitvanypotlapEvfolyamDivId.ToString()).ToList()) { notNeeded.Remove(); } var evfolyamDivElem = xDoc.Element("html").Element("body").Element("div"); var szuksegesNyelvek = new List() { "hu-HU", options.Culture.Name }; foreach (var notNeeded in evfolyamDivElem.Elements("div").Where(e => !szuksegesNyelvek.Contains(e.Attribute("data-lang")?.Value)).ToList()) { notNeeded.Remove(); } if (options.DocumentParameters.ErtekelesMegjelenitesFormatum == (int)NyomtatvanyErtekelesMegjelenitesEnum.FolyamatosSzoveggel) { RemoveTrDokumentumElem(xDoc, "ertekelestablazatos"); RemoveTrDokumentumElem(xDoc, "tantargyfejlec"); } else { RemoveTrDokumentumElem(xDoc, "ertekelesfolyamatos"); } if (!options.DocumentParameters.IsEvesOraszamMegjelenites) { RemoveSpanDokumentumElem(xDoc, "evesoraszam"); } if (!options.DocumentParameters.IsAtlagMegjelenites) { RemoveTrDokumentumElem(xDoc, "atlag"); } else { RemoveTrDokumentumElem(xDoc, "nincsatlag"); } if (options.DocumentParameters.IsMulasztasokUjLapra) { switch (options.BizonyitvanypotlapEvfolyamDivId) { case BizonyitvanypotlapEvfolyamDivIdEnum.masodiknegyedikosztaly: foreach (var mulasztasok in xDoc.Descendants("tr").Where(x => x.Attribute("id")?.Value == "mulasztasoksor")) { if (options.DocumentParameters.IsAtlagMegjelenites) { var atlagsorclassattrib = (mulasztasok.PreviousNode as XElement).Attributes().FirstOrDefault(x => x.Name == "class"); if (atlagsorclassattrib != null) { atlagsorclassattrib.Value += " utolsosor"; } } else { mulasztasok.PreviousNode.AddAfterSelf(new XElement("tr", new XAttribute("class", "utolsosor"), new XElement("td"), new XElement("td"), new XElement("td"))); } XElement divPagebreak = new XElement("div", new XAttribute("class", "pagebreak")); divPagebreak.Add("\r\n"); XElement divKeret = new XElement("div", new XAttribute("class", "keret")); XElement table = new XElement("table", new XAttribute("class", "osztalyzatosszesito")); var atrakandok = mulasztasok.NodesAfterSelf(); mulasztasok.Parent.Parent.AddAfterSelf(divKeret); mulasztasok.Parent.Parent.AddAfterSelf(divPagebreak); var hosszubelyegzomegj = mulasztasok.Parent.Parent.Parent.Elements("div").FirstOrDefault(x => x.Attribute("id")?.Value == "hosszubelyegzomegj"); hosszubelyegzomegj.Remove(); divPagebreak.AddBeforeSelf(hosszubelyegzomegj); divKeret.Add(table); foreach (var atrakando in atrakandok.ToList()) { atrakando.Remove(); table.Add(atrakando); } mulasztasok.Remove(); table.AddFirst(mulasztasok); } break; case BizonyitvanypotlapEvfolyamDivIdEnum.felsoosztalyok: foreach (var hosszubelyegzomegj in xDoc.Descendants("div").Where(x => x.Attribute("id")?.Value == "hosszubelyegzomegj")) { XElement divPagebreak = new XElement("div", new XAttribute("class", "pagebreak")); divPagebreak.Add("\r\n"); hosszubelyegzomegj.AddAfterSelf(divPagebreak); } break; default: break; } } var helyettesitettNyomtatvany = xDoc.ToString(); if (options.DocumentParameters.BetuMeret != BetuMeretEnum.Normal) { helyettesitettNyomtatvany = PotlapBetumeretAllitas(helyettesitettNyomtatvany); } var rootCo = new TorzslapEsBizonyitvanyCo(_ds); rootCo.FejlecDetails.Keltezes = options.DocumentParameters.Kelt; AlairoKitoltese(rootCo); var (szorgalom, magatartas) = GetSzorgalomMagatartasNev(); var dokumentumNyelvesitesHelper = new DokumentumNyelvesitesHelper(); foreach (var tanuloDetails in rootCo.TanuloDetailsList) { dokumentumNyelvesitesHelper.SetErtekelesek(tanuloDetails.TanuloErtekelesDetailsList, szorgalom, magatartas); var nyomtatvany = new StringBuilder(helyettesitettNyomtatvany); ReplaceSubtitutions(nyomtatvany, tanuloDetails); GenerateDocument(resultDoc, htmlOptions, nyomtatvany.ToString()); } return FinalizeDocument(resultDoc); } public MemoryStream GetGimnaziumiBizonyitvany(Stream sablonStream, int formatumId) { string nyomtatvanyTemplate; object resultDoc; object htmlOptions; if (formatumId == (int)NyomtatvanyFormatumEnum.PDF) { InitializeDocument(sablonStream, out nyomtatvanyTemplate, out AsposePdf.Document pdfDoc, out AsposePdf.HtmlLoadOptions pdfHtmlOptions); resultDoc = pdfDoc; htmlOptions = pdfHtmlOptions; } else { InitializeDocument(sablonStream, out nyomtatvanyTemplate, out AsposeWords.Document wordDoc, out AsposeWords.HtmlLoadOptions wordHtmlOptions); resultDoc = wordDoc; htmlOptions = wordHtmlOptions; } XDocument xDoc = XDocument.Parse(nyomtatvanyTemplate); var szuksegesNyelvek = new List() { "hu-HU", options.Culture.Name }; foreach (var notNeeded in xDoc.Element("html").Element("body").Elements("div").Where(e => !szuksegesNyelvek.Contains(e.Attribute("data-lang")?.Value)).ToList()) { notNeeded.Remove(); } if (options.DocumentParameters.ErtekelesMegjelenitesFormatum == (int)NyomtatvanyErtekelesMegjelenitesEnum.FolyamatosSzoveggel) { RemoveTrDokumentumElem(xDoc, "ertekelestablazatos"); RemoveTrDokumentumElem(xDoc, "tantargyfejlec"); } else { RemoveTrDokumentumElem(xDoc, "ertekelesfolyamatos"); } if (!options.DocumentParameters.IsEvesOraszamMegjelenites) { RemoveSpanDokumentumElem(xDoc, "evesoraszam"); } if (!options.DocumentParameters.IsAtlagMegjelenites) { RemoveTrDokumentumElem(xDoc, "atlag"); } var helyettesitettNyomtatvany = xDoc.ToString(); if (options.DocumentParameters.BetuMeret != BetuMeretEnum.Normal) { helyettesitettNyomtatvany = PotlapBetumeretAllitas(helyettesitettNyomtatvany); } var rootCo = new TorzslapEsBizonyitvanyCo(_ds); rootCo.FejlecDetails.Keltezes = options.DocumentParameters.Kelt; AlairoKitoltese(rootCo); var (szorgalom, magatartas) = GetSzorgalomMagatartasNev(); var dokumentumNyelvesitesHelper = new DokumentumNyelvesitesHelper(); foreach (var tanuloDetails in rootCo.TanuloDetailsList) { dokumentumNyelvesitesHelper.SetErtekelesek(tanuloDetails.TanuloErtekelesDetailsList, szorgalom, magatartas); var nyomtatvany = new StringBuilder(helyettesitettNyomtatvany); ReplaceSubtitutions(nyomtatvany, tanuloDetails); GenerateDocument(resultDoc, htmlOptions, nyomtatvany.ToString()); } return FinalizeDocument(resultDoc); } public MemoryStream GetErettsegiBizonyitvany(Stream sablonStream, int formatumId) { string nyomtatvanyTemplate; object resultDoc; object htmlOptions; if (formatumId == (int)NyomtatvanyFormatumEnum.PDF) { InitializeDocument(sablonStream, out nyomtatvanyTemplate, out AsposePdf.Document pdfDoc, out AsposePdf.HtmlLoadOptions pdfHtmlOptions); resultDoc = pdfDoc; htmlOptions = pdfHtmlOptions; } else { InitializeDocument(sablonStream, out nyomtatvanyTemplate, out AsposeWords.Document wordDoc, out AsposeWords.HtmlLoadOptions wordHtmlOptions); resultDoc = wordDoc; htmlOptions = wordHtmlOptions; } XDocument xDoc = XDocument.Parse(nyomtatvanyTemplate); var szuksegesNyelvek = new List() { "hu-HU", options.Culture.Name }; foreach (var notNeeded in xDoc.Element("html").Element("body").Elements("div").Where(e => !szuksegesNyelvek.Contains(e.Attribute("data-lang")?.Value)).ToList()) { notNeeded.Remove(); } var helyettesitettNyomtatvany = xDoc.ToString(); if (options.DocumentParameters.BetuMeret != BetuMeretEnum.Normal) { helyettesitettNyomtatvany = PotlapBetumeretAllitas(helyettesitettNyomtatvany); } var rootCo = new TorzslapEsBizonyitvanyCo(_ds); rootCo.FejlecDetails.Keltezes = options.DocumentParameters.Kelt; AlairoKitoltese(rootCo); var (szorgalom, magatartas) = GetSzorgalomMagatartasNev(); var dokumentumNyelvesitesHelper = new DokumentumNyelvesitesHelper(); foreach (var tanuloDetails in rootCo.TanuloDetailsList) { dokumentumNyelvesitesHelper.SetErtekelesek(tanuloDetails.TanuloErtekelesDetailsList, szorgalom, magatartas); var nyomtatvany = new StringBuilder(helyettesitettNyomtatvany); ReplaceSubtitutions(nyomtatvany, tanuloDetails); GenerateDocument(resultDoc, htmlOptions, nyomtatvany.ToString()); } return FinalizeDocument(resultDoc); } private void AlairoKitoltese(TorzslapEsBizonyitvanyCo rootCo) { if (options.DocumentParameters.AlairoSzemely != null) { rootCo.FejlecDetails.AlairoNev = options.DocumentParameters.AlairoSzemely["Nev"]; rootCo.FejlecDetails.AlairoNevIdegenNyelven = options.DocumentParameters.AlairoSzemely["NevIdegenNyelven"]; rootCo.FejlecDetails.AlairoBeosztas = options.DocumentParameters.AlairoSzemely["Beosztas"]; rootCo.FejlecDetails.AlairoBeosztasIdegenNyelven = options.DocumentParameters.AlairoSzemely["BeosztasIdegennNyelven"]; } } private void ReplaceSubtitutions(StringBuilder nyomtatvany, T adat, string prefix = "", bool isLower = false) { foreach (var pi in adat.GetType().GetProperties()) { var phrase = string.Format("{{{0}{1}}}", prefix, (isLower) ? pi.Name.ToLower() : pi.Name); if (pi.PropertyType == typeof(DateTime)) { ReplaceDateTime(nyomtatvany, (DateTime)pi.GetValue(adat), pi, phrase); } else if (pi.PropertyType == typeof(DateTime?)) { var datum = (DateTime?)pi.GetValue(adat); if (datum.HasValue) { ReplaceDateTime(nyomtatvany, datum.Value, pi, phrase); } } else if (typeof(IEnumerable).IsAssignableFrom(pi.PropertyType)) { var listaElemHtmlMatches = System.Text.RegularExpressions.Regex.Matches(nyomtatvany.ToString(), string.Format(@"", pi.Name.ToLower()), System.Text.RegularExpressions.RegexOptions.Singleline); if (listaElemHtmlMatches.Count == 0) { continue; } foreach (System.Text.RegularExpressions.Match listaElemHtml in listaElemHtmlMatches) { var listaElemReplaceHtml = new StringBuilder(); var lista = (IEnumerable)(pi.GetValue(adat)); var minrowcount = System.Text.RegularExpressions.Regex.Match(listaElemHtml.Value, "(?<=data-minrownumber=\")\\d{1,2}(?!=\")", System.Text.RegularExpressions.RegexOptions.Singleline)?.Value; if (minrowcount != "") { var imax = lista.Count(); for (int i = 0; i < (int.Parse(minrowcount) - imax); i++) { lista = lista.Append(Activator.CreateInstance(pi.PropertyType.GenericTypeArguments[0])); } } for (int i = 0; i < lista.Count(); i++) { var elemCo = lista.ElementAt(i); var listaElemFilledHTML = new StringBuilder(listaElemHtml.Value); var rowspanHtml = System.Text.RegularExpressions.Regex.Match(listaElemHtml.Value, string.Format(@"", pi.Name.ToLower()), System.Text.RegularExpressions.RegexOptions.Singleline).Value; if (!string.IsNullOrWhiteSpace(rowspanHtml)) { if (i == 0) { listaElemFilledHTML.Replace("{db}", lista.Count().ToString()); } else { listaElemFilledHTML.Replace(rowspanHtml, ""); } } ReplaceSubtitutions(listaElemFilledHTML, elemCo, prefix, isLower); listaElemReplaceHtml.Append(listaElemFilledHTML); } listaElemReplaceHtml.Replace(string.Format(" data-{0}=\"{0}adat\"", pi.Name.ToLower()), ""); nyomtatvany.Replace(listaElemHtml.Value, listaElemReplaceHtml.ToString() + Environment.NewLine); } } else if (pi.PropertyType.IsClass && (pi.PropertyType != typeof(string))) { if (pi.GetValue(adat) != null) { ReplaceSubtitutions(nyomtatvany, pi.GetValue(adat), prefix, isLower); } } else { nyomtatvany.Replace(phrase, (pi.GetValue(adat) == null) ? "" : pi.GetValue(adat).ToString().Replace(Environment.NewLine, "
")); } } } private void ReplaceDateTime(StringBuilder nyomtatvany, DateTime datum, PropertyInfo pi, string phrase) { nyomtatvany.Replace(phrase.Insert(phrase.Length - 1, "IdegenNyelven"), datum.ToString(options.Culture.DateTimeFormat.ShortDatePattern)); nyomtatvany.Replace(phrase, datum.ToString(CultureInfo.GetCultureInfo("hu-HU").DateTimeFormat.ShortDatePattern)); nyomtatvany.Replace(phrase.Insert(phrase.Length - 1, "ev"), datum.ToString("yyyy")); nyomtatvany.Replace(phrase.Insert(phrase.Length - 1, "hoIdegenNyelven"), options.Culture.DateTimeFormat.GetMonthName(datum.Month)); nyomtatvany.Replace(phrase.Insert(phrase.Length - 1, "ho"), CultureInfo.GetCultureInfo("hu-HU").DateTimeFormat.GetMonthName(datum.Month)); nyomtatvany.Replace(phrase.Insert(phrase.Length - 1, "nap"), datum.ToString("dd")); } private void GenerateDocument(T resultDoc, U htmlOptions, string nyomtatvany) { if (resultDoc is AsposePdf.Document) { GeneratePDF(resultDoc as AsposePdf.Document, htmlOptions as AsposePdf.HtmlLoadOptions, nyomtatvany); } else { GenerateWord(resultDoc as AsposeWords.Document, htmlOptions as AsposeWords.HtmlLoadOptions, nyomtatvany); } } private void GeneratePDF(AsposePdf.Document resultDoc, AsposePdf.HtmlLoadOptions htmlOptions, string nyomtatvany) { using (var stream = new MemoryStream()) using (var writer = new StreamWriter(stream)) { writer.Write(nyomtatvany); writer.Flush(); stream.Position = 0; using (var document = new AsposePdf.Document(stream, htmlOptions)) { var start2 = 1; if (options.PageNumbering != PageNumberingEnum.None) { for (int i = start2; i <= document.Pages.Count; i++) { var textStamp = new AsposePdf.TextStamp((i - start2 + 1).ToString()) { BottomMargin = 10, HorizontalAlignment = AsposePdf.HorizontalAlignment.Center, VerticalAlignment = AsposePdf.VerticalAlignment.Bottom }; //textStamp.TextState.Font = resultDoc.Pages[i].Resources.Fonts["Times New Roman"]; //textStamp.TextState.FontSize = 20; if ((i == start2) && (options.PageNumbering == PageNumberingEnum.AllExceptFirst)) { continue; } document.Pages[i].AddStamp(textStamp); //resultDoc.Pages[i].Footer = new HeaderFooter(); //resultDoc.Pages[i].Footer.Paragraphs.Add(new TextFragment((i - start).ToString())); } } if (options?.DocumentParameters?.KotesmargoTipus >= KotesmargoTipusEnum.Ketoldalas) { var startPage = options.DocumentParameters.KotesmargoTipus == KotesmargoTipusEnum.Ketoldalas ? 2 : 1; for (int i = startPage; i <= document.Pages.Count; i += 2) { var pageFirstGIndex = document.Pages[i].Contents.First(x => (x.GetType() == typeof(ConcatenateMatrix)) && ((x as ConcatenateMatrix).Matrix.A == 1) && ((x as ConcatenateMatrix).Matrix.B == 0) && ((x as ConcatenateMatrix).Matrix.C == 0) && ((x as ConcatenateMatrix).Matrix.D == -1) && ((x as ConcatenateMatrix).Matrix.E == 0) && ((x as ConcatenateMatrix).Matrix.F == options.PageSize.Height) ).Index; document.Pages[i].Contents.Insert(pageFirstGIndex + 1, new ConcatenateMatrix(1, 0, 0, 1, -options.Margins.Left, 0)); } } // Az utolsó oldalon a generált kép 6 pixelllel feljebb csúszik, enneke a korrekciója van ebben a blokkban if (document.Pages.Count > 1) { var lastPageFirstGIndex = document.Pages[document.Pages.Count].Contents.First(x => (x.GetType() == typeof(ConcatenateMatrix)) && ((x as ConcatenateMatrix).Matrix.A == 1) && ((x as ConcatenateMatrix).Matrix.B == 0) && ((x as ConcatenateMatrix).Matrix.C == 0) && ((x as ConcatenateMatrix).Matrix.D == -1) && ((x as ConcatenateMatrix).Matrix.E == 0) && ((x as ConcatenateMatrix).Matrix.F == options.PageSize.Height) ).Index; document.Pages[document.Pages.Count].Contents.Insert(lastPageFirstGIndex + 1, new ConcatenateMatrix(1, 0, 0, 1, 0, 6)); } resultDoc.Pages.Add(document.Pages.ToArray()); } } } private void GenerateWord(AsposeWords.Document resultDoc, AsposeWords.LoadOptions htmlOptions, string nyomtatvany) { using (var stream = new MemoryStream()) using (var writer = new StreamWriter(stream)) { writer.Write(nyomtatvany); writer.Flush(); stream.Position = 0; var document = new AsposeWords.Document(stream, htmlOptions); { resultDoc.AppendDocument(document, AsposeWords.ImportFormatMode.KeepSourceFormatting); } } } private void InitializeDocument(Stream sablonStream, out string nyomtatvanyTemplate, out T document, out U htmlOptions) { var reader = new StreamReader(sablonStream); nyomtatvanyTemplate = reader.ReadToEnd(); reader.Dispose(); if (typeof(T) == typeof(AsposePdf.Document)) { var dataDir = System.Web.Hosting.HostingEnvironment.MapPath("/Resources/AsposeSablonok/"); var pdfHtmlOptions = new AsposePdf.HtmlLoadOptions(dataDir); pdfHtmlOptions.PageInfo.Margin.Bottom = options.Margins.Bottom; pdfHtmlOptions.PageInfo.Margin.Left = options.Margins.Left * (options.DocumentParameters?.KotesmargoTipus != KotesmargoTipusEnum.Nincs ? 2 : 1); pdfHtmlOptions.PageInfo.Margin.Right = options.Margins.Right; pdfHtmlOptions.PageInfo.Margin.Top = options.Margins.Top; pdfHtmlOptions.PageInfo.Height = options.PageSize.Height; pdfHtmlOptions.PageInfo.Width = options.PageSize.Width; htmlOptions = (U)Convert.ChangeType(pdfHtmlOptions, typeof(U)); var pdfDoc = new AsposePdf.Document(); pdfDoc.PageInfo.Width = options.PageSize.Width; pdfDoc.PageInfo.Height = options.PageSize.Height; document = (T)Convert.ChangeType(pdfDoc, typeof(T)); } else { var wordDoc = new AsposeWords.Document(); document = (T)Convert.ChangeType(wordDoc, typeof(T)); var wordHtmlOptions = new AsposeWords.HtmlLoadOptions(); htmlOptions = (U)Convert.ChangeType(wordHtmlOptions, typeof(U)); } } private MemoryStream FinalizeDocument(T document) { return document is AsposePdf.Document ? FinalizePDF(document as AsposePdf.Document) : FinalizeWord(document as AsposeWords.Document); } private static MemoryStream FinalizePDF(AsposePdf.Document resultDoc) { foreach (var page in resultDoc.Pages) { if (page.Resources.Fonts != null) { foreach (var pageFont in page.Resources.Fonts) { if (!pageFont.IsEmbedded) { pageFont.IsEmbedded = true; } } } } var ms = new MemoryStream(); var optimizationOptions = new OptimizationOptions { RemoveUnusedObjects = true, RemoveUnusedStreams = true, AllowReusePageContent = true, LinkDuplcateStreams = true, UnembedFonts = true }; optimizationOptions.ImageCompressionOptions.CompressImages = true; optimizationOptions.ImageCompressionOptions.ImageQuality = 50; optimizationOptions.ImageCompressionOptions.ResizeImages = true; resultDoc.OptimizeResources(optimizationOptions); resultDoc.Optimize(); resultDoc.Save(ms, AsposePdf.SaveFormat.Pdf); resultDoc.Dispose(); return ms; } private MemoryStream FinalizeWord(AsposeWords.Document document) { document.Sections.RemoveAt(0); for (int i = 0; i < document.Sections.Count; i++) { Aspose.Words.Section section = document.Sections[i]; section.PageSetup.PaperSize = ConvertPdfPageSizeToWordPaperSize(options.PageSize); double left, right; left = options.Margins.Left; right = options.Margins.Right; if (options?.DocumentParameters?.KotesmargoTipus != KotesmargoTipusEnum.Nincs) { section.PageSetup.Gutter = options.Margins.Left; if (options.DocumentParameters.KotesmargoTipus >= KotesmargoTipusEnum.Ketoldalas) { if (options.DocumentParameters.KotesmargoTipus == KotesmargoTipusEnum.ForditottKetoldalas) { section.PageSetup.RtlGutter = true; } section.PageSetup.MultiplePages = Aspose.Words.Settings.MultiplePagesType.MirrorMargins; } } section.PageSetup.PaperSize = ConvertPdfPageSizeToWordPaperSize(options.PageSize); section.PageSetup.LeftMargin = left; section.PageSetup.RightMargin = right; section.PageSetup.TopMargin = options.Margins.Top; section.PageSetup.BottomMargin = options.Margins.Bottom; } var ms = new MemoryStream(); document.Save(ms, Aspose.Words.SaveFormat.Docx); return ms; } private static AsposeWords.PaperSize ConvertPdfPageSizeToWordPaperSize(AsposePdf.PageSize pageSize) { int temp = (pageSize == AsposePdf.PageSize.A5) ? 0 : 1; switch (temp) { case 0: return AsposeWords.PaperSize.A5; default: return AsposeWords.PaperSize.A4; } } private void SetWordDocumentKotesMargo(AsposeWords.Document document) { for (int i = 0; i < document.Sections.Count; i++) { AsposeWords.Section section = document.Sections[i]; double left, right; left = options.Margins?.Left ?? section.PageSetup.LeftMargin; right = options.Margins?.Right ?? section.PageSetup.RightMargin; if (options?.DocumentParameters?.KotesmargoTipus != KotesmargoTipusEnum.Nincs) { section.PageSetup.Gutter = left / 2; right -= left / 2; if (options.DocumentParameters.KotesmargoTipus >= KotesmargoTipusEnum.Ketoldalas) { if (options.DocumentParameters.KotesmargoTipus == KotesmargoTipusEnum.ForditottKetoldalas) { section.PageSetup.RtlGutter = true; var temp = left; left = right; right = temp; } section.PageSetup.MultiplePages = Aspose.Words.Settings.MultiplePagesType.MirrorMargins; } } section.PageSetup.LeftMargin = left; section.PageSetup.RightMargin = right; section.PageSetup.TopMargin = options.Margins?.Top ?? section.PageSetup.TopMargin; section.PageSetup.BottomMargin = options.Margins?.Bottom ?? section.PageSetup.BottomMargin; } } } }