@using System.Reflection @using System.IO @using Microsoft.Extensions.WebEncoders @using System.Diagnostics @using System.Text @using Yavsc.Formatters @model Estimate @{ Layout = null; ViewBag.Pdf = ""; ViewBag.TeX = ""; var writer = new System.IO.StringWriter(); var content = await Html.PartialAsync("TestTex", Model ); content.WriteTo(writer, new TexEncoder()); var contentStr = writer.ToString(); string name = $"tmpestimtex-{Model.Id}"; string fullname = new FileInfo( System.IO.Path.Combine(ViewBag.TempDir,name)).FullName; FileInfo fi = new FileInfo(fullname + ".tex"); FileInfo fo = new FileInfo(fullname + ".pdf"); using (StreamWriter sw = new StreamWriter (fi.FullName)) { sw.Write (contentStr); } if (!fi.Exists) { throw new Exception ("Source write failed"); } using (Process p = new Process ()) { p.StartInfo.WorkingDirectory = ViewBag.TempDir; p.StartInfo = new ProcessStartInfo (); p.StartInfo.UseShellExecute = false; p.StartInfo.FileName = "/usr/bin/texi2pdf"; p.StartInfo.Arguments = $"--batch --build-dir=. -o {fo.FullName} {fi.FullName}"; p.Start (); p.WaitForExit (); if (p.ExitCode != 0) { throw new Exception ("Pdf generation failed with exit code:" + p.ExitCode); } } if (fo.Exists) { UTF8Encoding utf8 = new UTF8Encoding(); using (StreamReader sr = new StreamReader (fo.FullName)) { byte[] buffer = File.ReadAllBytes (fo.FullName); ViewBag.Pdf = utf8.GetString(buffer,0,buffer.Length); } fo.Delete(); } fi.Delete(); } @ViewBag.Pdf