Как сохранить изображение диаграммы Extjs4 для печати в отчете PDF? - PullRequest
2 голосов
/ 28 ноября 2011

У меня есть несколько диаграмм в моей панели инструментов extjs4application .. я хочу создать отчет в формате PDF, используя изображения этих диаграмм для этого я использую iTextSharp

есть ли способ получить изображения из диаграмм, чтобы включить их в мой отчет?

идеал для меня - использовать его с itextsharp

MyImageStream = new MemoryStream();
myChart.SaveImage(MyImageStream);

мой график будет объектом графика

Я спрашивал на форумах, которые мне сказали, что я сгенерирую и отобразлю свою диаграмму на клиенте (уже сделано), а затем я получу svg, отправлю его на сервер, и сервер будет использовать его для генерации pdf ... но я не знаю, как работать с SVG и как отправить его на сервер

EDIT

я пытаюсь использовать wkhtmltoimage, чтобы сохранить мою диаграмму в изображение

но он не работает, когда я указываю mapPath для моего .aspx

но он работает нормально, если я укажу URL сайта или путь к локальному хосту (см. Htem в комментарии)

не работает, я имею в виду без ошибок, но png не создан!

мой код:

var url = HttpContext.Current.Server.MapPath("~/chartImage.aspx");//dosnt work
//works : // "google.com";  //"localhost/chartImage.aspx";//
        var fileName = " pie13.png ";
        var wkhtmlDir = HttpContext.Current.Server.MapPath("~/wkhtmltopdf/pdf/");//"C:\\Program Files\\wkhtmltopdf\\";
        var wkhtml = HttpContext.Current.Server.MapPath("~/wkhtmltopdf/wkhtmltoimage.exe");//"C:\\Program Files\\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();

заранее спасибо

Ответы [ 3 ]

2 голосов
/ 28 ноября 2011

Хорошо, вот пересмотренная версия после прочтения вашего комментария выше.Ext JS - это библиотека на стороне клиента, поэтому вам нужно запустить ее в браузере, чтобы получить свои графики, и это нельзя изменить.Если вам действительно нужно получить эти диаграммы на сервере, то вы должны прибегнуть к более или менее грязным взломам.Один из них:

  1. Подготовьте специальную веб-страницу, которая содержит только диаграмму, которая будет включена в PDF
  2. Используйте программу wkhtmltoimage, чтобы преобразовать ее в файл изображения (насервер)
  3. Вставьте это изображение в документ PDF с помощью iTextSharp

Но в этом случае я бы предпочел переосмыслить выбор инструментов или способов создания отчетов.

1 голос
/ 28 ноября 2011

Используйте пакет wkhtmltopdf (http://code.google.com/p/wkhtmltopdf/)), чтобы преобразовать веб-страницу с вашими диаграммами в pdf-файл, а затем разрешить пользователям загружать этот pdf. Для этого вам нужно запустить wkhtmltopdf на стороне сервера (обратите внимание на аутентификацию / userолицетворение). Поскольку wkhtmltopdf основан на Safari, он должен без проблем работать с extjs.

0 голосов
/ 10 декабря 2013

Я исследую этот вопрос. Думаю, вам сначала нужно преобразовать диаграмму в рисунок, а затем использовать библиотеку генератора PDF и включить эту картинку в нее. Чтобы преобразовать диаграмму в картинку: http://dev.sencha.com/deploy/ext-4.1.0-gpl/examples/charts/Area.js

Для генерации PDF на c #, если вы используете его на стороне сервера, это может быть pdfsharp или itext

...