51 lines
No EOL
1.7 KiB
Text
51 lines
No EOL
1.7 KiB
Text
@using System.Reflection;
|
||
@using System.IO;
|
||
@using Microsoft.Extensions.WebEncoders;
|
||
@using System.Diagnostics;
|
||
@using System.Text;
|
||
@using Yavsc.Formatters;
|
||
@model Estimate
|
||
@{
|
||
if (ViewBag.TempDir==null) { throw new InvalidOperationException(); }
|
||
|
||
ViewBag.Pdf = "";
|
||
ViewBag.TeX = "";
|
||
var writer = new System.IO.StringWriter();
|
||
var content = await Html.PartialAsync("Estimate.tex", Model );
|
||
content.WriteTo(writer, new TexEncoder());
|
||
var contentStr = writer.ToString();
|
||
string name = $"estimate-{Model.Id}";
|
||
string fullname = new FileInfo(
|
||
System.IO.Path.Combine(ViewBag.TempDir,name)).FullName;
|
||
string ofullname = new FileInfo(
|
||
System.IO.Path.Combine(ViewBag.BillsDir,name)).FullName;
|
||
|
||
FileInfo fi = new FileInfo(fullname + ".tex");
|
||
FileInfo fo = new FileInfo(ofullname + ".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);
|
||
}
|
||
}
|
||
ViewBag.Success = fo.Exists;
|
||
fi.Delete();
|
||
var uri = $"~/api/pdfestimate/{Model.Id}";
|
||
|
||
}
|
||
|
||
<a href="@uri" >@uri</a> |