Использовал wkhtmltopdf для генерации pdf, он работает нормально, но иногда выдает «Отказано в доступе» в System.Diagnostics.Process.StartWithCreateProcess (ProcessStartInfo startInfo). Например: в одном go он генерирует 20 файлов, из которых для одного pdf-файла он выбрасывает «Отказано в доступе» и remianing 19 генерируются нормально. И в большинстве случаев все PDF генерируются нормально. Что делать в этом случае.
public byte[] WKHtmlToPdf(string url)
{
var fileName = string.Format("{0}.pdf", Guid.NewGuid());
//var wkhtmlDir = "C:\\Program Files\\wkhtmltopdf\\";
//var wkhtml = "C:\\Program Files\\wkhtmltopdf\\wkhtmltopdf.exe";
var wkhtmlDir = HttpContext.Server.MapPath(@"~/wkhtmltopdf");
var wkhtml = HttpContext.Server.MapPath(@"~/wkhtmltopdf/wkhtmltopdf.exe");
var p = new Process();
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = wkhtml;
p.StartInfo.WorkingDirectory = wkhtmlDir;
string switches = "";
switches += "--print-media-type ";
switches += "--margin-top 10mm --margin-bottom 10mm --margin-right 10mm --margin-left 10mm ";
switches += "--page-size Letter ";
p.StartInfo.Arguments = switches + " " + url + " " + fileName;
p.Start();
// wait or exit
p.WaitForExit(60000);
// read the exit code, close process
int returnCode = p.ExitCode;
p.Close();
var outputFile = string.Format("{0}\\{1}", p.StartInfo.WorkingDirectory, fileName);
byte[] bytes = System.IO.File.ReadAllBytes(outputFile);
return returnCode == 0 ? bytes: null;
}