2011-08-04 2 views
9

Я пытаюсь создать PDF-диаграмму javascript, которая у меня есть в окне модели (моя диаграмма представляет собой комбинацию javascript и css в представлении .aspx). Единственное, что в рендерированном PDF-файле - это статическое содержимое из окна, фактической диаграммы javascript там нет.Создать pdf с wkhtmltopdf и отрисовкой javascript

Мой призыв создать PDF выглядит следующим образом:

public byte[] WKHtmlToPdf(string url) 
    { 
     var fileName = " - "; 
     var wkhtmlDir = "C:\\Temp\\wkhtml"; 
     var wkhtml = "C:\\Temp\\wkhtml\\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 0mm --margin-bottom 0mm --margin-right 0mm --margin-left 0mm "; 
     switches += "--page-size Letter "; 
     p.StartInfo.Arguments = switches + " " + url + " " + fileName; 
     p.Start(); 

     //read output 
     byte[] buffer = new byte[32768]; 
     byte[] file; 
     using (var ms = new MemoryStream()) 
     { 
      while (true) 
      { 
       int read = p.StandardOutput.BaseStream.Read(buffer, 0, buffer.Length); 

       if (read <= 0) 
       { 
        break; 
       } 
       ms.Write(buffer, 0, read); 
      } 
      file = ms.ToArray(); 
     } 

     // wait or exit 
     p.WaitForExit(60000); 

     // read the exit code, close process 
     int returnCode = p.ExitCode; 
     p.Close(); 

     return returnCode == 0 ? file : null; 
    } 

Любые идеи о том, как я мог захватить яваскрипта диаграмму? Возможно, версия .Net была бы более подходящей, или мне нужно сохранить сгенерированную страницу в файл и передать ее в инструмент.

Спасибо.

+0

У меня была эта проблема и она была исправлена, если бы я использовал wkhtmltopdf 0.9.9. Версия «gem install» (0.8.3) не разрезала его. – dfrankow

ответ

9

В нашем проекте мы делаем что-то симулятивное, с успехом. Мы используем wkhtmltopdf 0.9.9 в сочетании с Highcharts на данный момент. С jQuery-флотом у нас тоже был успех после небольшой настройки. В нашем проекте мы сначала визуализируем представление строки и передаем ее в wkhtml, используя его stdin. Затем мы ловим stdout wkhtml и передаем его обратно в браузер.

Ваша настройка wkhtml кажется правильной, за исключением того, что мы используем stdin и stdout. Не знаю, может ли это быть проблемой.

Если вы используете одну из этих диаграмм, я думаю, что смогу вам помочь. Какой график вы используете?

последнее замечание: Wkhtmltopdf 0.10rc2, кажется, есть некоторые проблемы с загрузкой внешних ресурсов (JS/CSS) с локального хоста при использовании номер_порта, отличный от порта 80.

+0

благодарит за вас «Одна последняя заметка», im в настоящее время ищет, как ее исправить :) – AgelessEssence

+1

Получил это на работу, в основном я открыл скрытое окно браузера, отключив анимацию, сохранил изображение диаграммы, а затем создал html-строку с изображением внутри для рендеринга в PDF. –

+0

Вы упомянули о том, что разыгрывающий взгляд на строку? как это сделать? У меня есть диаграмма javascript и динамическая диаграмма тренда (из highchart) рендеринга. Но сама диаграмма не показана в pdf. Любые указатели? – Dhamayanthi

6

Похоже, вы пытаетесь получить вывод диаграммы, который, судя по тегам, написан из сценария Extjs 4.

Скрипт ext, вероятно, использует некоторые анимации диаграммы и, безусловно, будет ждать событий javascript для выполнения и отображения диаграммы. Вероятно, поэтому это не делается к моменту времени по умолчанию (200 мс).

Быстрое исправление было бы добавить опцию Javascript задержки страницы в командной строке:

wkhtmltopdf http://dev.sencha.com/deploy/ext-4.0.2a/examples/charts/Mixed.html --javascript-delay=2000 test.pdf, безусловно, работать на * NIX, и подобная вещь должна работать на окнах.

+0

Спасибо, хорошая идея. К сожалению, это ничего не меняет для меня. Я думаю, это может быть окно модели, в котором отображается диаграмма, и ваше предположение extjs верно. –

1

я использовал wkhtmltopdf 0.9.9 и pdfkit рубин драгоценный камень и с аналогичной проблемой.

Я исправил его, изменив все теги, чтобы использовать абсолютные URL-адреса. Кажется, что wkhtmltopdf не знал, к какому URL-адресу была обращена страница, так как относительные ресурсы не загружались. Я не знаю, является ли это ограничением pdfkit или wkhtmltopdf.

У меня есть идея от https://github.com/mileszs/wicked_pdf.

Смежные вопросы