779 lines
37 KiB
C#
779 lines
37 KiB
C#
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, @"(?<teljes>font-size: ?(?<meret>\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<string>() { "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<string>() { "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<string>() { "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<T>(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<object>).IsAssignableFrom(pi.PropertyType))
|
|
{
|
|
var listaElemHtmlMatches = System.Text.RegularExpressions.Regex.Matches(nyomtatvany.ToString(), string.Format(@"<tr data-{0}(.*?)</tr>", 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<object>)(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(@"<td rowspan=""{{db}}""(.*?)</td>", 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, "<br/>"));
|
|
}
|
|
}
|
|
}
|
|
|
|
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, U>(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<T, U>(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>(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;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|