...

вторник, 20 августа 2013 г.

Генерируем PDF из HTML-шаблона с условиями, при помощи wkhtmltopdf и RazorEngine


сегодня в 11:11


Не смотря на то, что пост предлагает заготовку, рецепт под ASP.NET, по аналогичным принципа вполне возможно реализовать решение и под другие платформы.

Задача:



  • генерировать DOC или PDF из шаблона файла, с подстановкой значений

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




Под катом — очень простое и короткое решение, примеры кода на C#. Не смотря на это, что пост предлагает заготовку-рецепт под ASP.NET, по аналогичным принципам вполне возможно реализовать решение и под другие платформы.



Решение:

  1. Генерируем временный HTML-файл. Файл будет генерироваться движком RazorEngine (можно установить через NuGet). Код будет выглядеть примерно так:

    string template = File.ReadAllText("template1.cshtml");
    string result = Razor.Parse(template, new { Name = "Пользователь", ShowBlock1 = false, ShowBlock2 = true });
    File.WriteAllText("C:/tests/input.html", result);




    Содержимое template1.cshtml

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
    </head>
    <body>
    <h1>Просто текст.</h1>
    <p>имя тебе - @Model.Name</p>
    <p style="display:@( Model.ShowBlock1 ? "block" : "none")">Блок 1</p>
    <p style="display:@( Model.ShowBlock2 ? "block" : "none")">Блок 2</p>
    <table style="border:1px solid black" border="1" style="width:100%" width="100%">
    <tr>
    <td>111</td>
    <td><img src="C:/tests/1.png"/></td>
    <td>333</td>
    </tr>
    </table>
    </body>
    </html>




  2. Теперь генерируем файл с помощью вызова внешней утилиты — wkhtmltopdf, скачать можно тут.

    var process = new Process
    {
    StartInfo =
    {
    FileName = "C:/Program Files (x86)/wkhtmltopdf/wkhtmltopdf.exe",
    Arguments = "C:/tests/input.html C:/tests/output.pdf"
    }
    };
    process.Start();




  3. По окончанию временный файл можно удалить.

    File.Delete("C:/tests/input.html");







Получившийся PDF:


У wkhtmltopdf есть версии под различные ОС, есть исходники.


Шаблонизатор, конечно, можно использовать иной.


Минус идеи — используется внешняя утилита.





Developers, stick with Russians – work in London




Переводы с

карты на карту


Переводы

через QR-Код


Новая функция

«Мой контроль»




Возьми Lumia 925 на тест-драйв сейчас.




Впечатляющие возможности

в стильном тонком корпусе из металла



Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Комментариев нет:

Отправить комментарий