Мой метод создает PDF из содержимого HTML с помощью программы Wkhtmltopdf
с Process
. Я не могу найти причину, почему он зависает. Когда есть большая строка с HTML, я предполагаю, что она зависает, когда есть 30 страниц или больше. Но все работает нормально, если страниц меньше. Процесс Wkhtmltopdf.exe, который я вижу на Task Manager
, не завершается вечно. Когда я останавливаю свой проект MVC с hanged
Wkhtmltopdf, it creates normally
PDF, как будто он чего-то ждет ... Вручную, конечно, Wkhtmltopdf создает все без проблем. Это не дубликат этого поста . Здесь у меня проблемы при попытке прочитать байтов в int.
public IActionResult createPdf()
{
string html = "content";
Process p;
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "...\\wkhtmltopdf.exe";
psi.WorkingDirectory = "...\\wkhtmltopdf\\bin";
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.StandardOutputEncoding = System.Text.Encoding.UTF8;
psi.Arguments = "-O landscape --footer-left qwe --footer-center [page]/[topage] --footer-right --footer-font-size 9 --no-stop-slow-scripts --zoom 0.8 --dpi 300 - - ";
p = Process.Start(psi);
byte[] pdf = null;
try
{
// Get PDF as bytes without temp files
using(StreamWriter stdin = new StreamWriter(p.StandardInput.BaseStream, Encoding.UTF8))
{
stdin.AutoFlush = true;
stdin.Write(html);
}
byte[] buffer = new byte[32768];
using(var ms = new MemoryStream())
{
while(true)
{
// HANGS HERE!!!
int read = p.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length);
if(read <= 0)
{
break;
}
ms.Write(buffer, 0, read);
}
pdf = ms.ToArray();
}
}
...
}