54 lines
1.7 KiB
Plaintext
54 lines
1.7 KiB
Plaintext
|
|
@using System.Reflection
|
|
@using System.IO
|
|
@using Microsoft.Extensions.WebEncoders
|
|
@using System.Diagnostics
|
|
@using System.Text
|
|
@using YavscWeb.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 |