init
This commit is contained in:
@@ -0,0 +1,778 @@
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user