2014-10-21 2 views
1

Я использую wkhtmltopdf.exe на своем сервере, чтобы конвертировать некоторые .aspx-отчеты на основе страниц в pdf-файлы, которые затем загружаются на клиентский компьютер. После обширных исследований я нашел это blog post с примером, который, казалось, достиг того, чего я хочу достичь. Я попытался адаптировать его к своим собственным применениям, но я не могу заставить его работать. Ответ со страницы - это .pdf-файл, но длина 0 байтов. Я изучал решения для конвертирования отображаемой страницы aspx в .pdf в течение почти полутора дней без везения - это самое близкое мне решение, и я думаю, что я просто пропустил что-то простое, и оно будет работать.wkhtmltopdf output to html response, производящий 0 байтовый файл

См. Код ниже - Буду признателен за любые рекомендации, которые вы можете предоставить, чтобы сделать эту работу!

public partial class PDFOut : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string args = string.Format("\"{0}\" - ", Request.Form["url"]);//'http://www.google.com' is what I'm passing for testing 
     var startInfo = new ProcessStartInfo(Server.MapPath("\\tools\\wkhtmltopdf.exe"), args) 
     { 
      UseShellExecute = false, 
      RedirectStandardOutput = true 
     }; 
     var proc = new Process { StartInfo = startInfo }; 
     proc.Start(); 

     string output = proc.StandardOutput.ReadToEnd(); 
     byte[] buffer = proc.StandardOutput.CurrentEncoding.GetBytes(output); 
     proc.WaitForExit(); 
     proc.Close(); 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("content-disposition", "attachment; filename=test.pdf"); 
     Response.BinaryWrite(buffer); 
     Response.End(); 
    } 
} 
+0

Я прочитал 'wkhtmltopdf' в названии из основного фида, и я был уверен, что это спам. 'Wkhtmltopdf'? у нас действительно заканчиваются имена ...: P – gdoron

+0

Мне всегда приходилось писать PDF в временную директорию. Я не знал, что он напишет pdf на стандарт. Вы пытались запустить свою команду из реальной командной строки? – Will

+0

Я не верю, что в wkhtmltopdf есть примеры вывода полученного файла в стандартную версию. http://wkhtmltopdf.org/usage/wkhtmltopdf.txt Я мог ошибаться. – Will

ответ

1

Будет что-то вроде этой работы для вас? Напишите PDF в каталог temp, затем прочитайте PDF и, наконец, удалите временный файл?

protected void Page_Load(object sender, EventArgs e) 
    { 
     string outputFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName(), ".pdf"); 
     string args = string.Format("\"{0}\" \"{1}\"", Request.Form["url"], outputFile); 
     var startInfo = new ProcessStartInfo(Server.MapPath("\\tools\\wkhtmltopdf.exe"), args) 
     { 
      UseShellExecute = false, 
      RedirectStandardOutput = true 
     }; 
     var proc = new Process { StartInfo = startInfo }; 
     proc.Start(); 

     proc.WaitForExit(); 
     proc.Close(); 

     var buffer= File.ReadAllBytes(outputFile); 
     File.Delete(outputFile); 

     Response.ContentType = "application/pdf"; 
     Response.AddHeader("content-disposition", "attachment; filename=test.pdf"); 
     Response.BinaryWrite(buffer); 
     Response.End(); 
    } 
+0

Я должен был внести некоторые корректировки туда, где вы поместили временный файл, но в остальном Он работал как шарм! Спасибо!! – kdavej