Paweł Łukasiewicz
2019-10-26
Paweł Łukasiewicz
2019-10-26
Udostępnij Udostępnij Kontakt
Wprowadzenie

Pomysł na ten artykuł pojawił się w wyniku wymagań związanych z jednym z projektów pisananych w technologii .NET Core. Starsza wersja aplikacja działająca od kilkunastu lat (wraz z licznymi update’ami) wspierała blisko 100 różnych raportów generowanych do pliku pdf. Niestety, biblioteka nie przewiduje wsparcia dla technologii .NET Core...

Nic nie stoi na przeszkodzie postawienia dedykowanej maszyny ze wsparciem dla technologii .NET Framework, wydzielenie logiki bizesowej do postaci API a następnie wykonywanie specjalnych zapytań w celu wygenerowania raportów i przesłania ich do nowej wersji aplikacji. Nie będziemy teraz zastanawiać się na tym rozwiązaniem (plusy i minusy) ponieważ pierwszy krok to sprawdzenie możliwości innych bibliotek w celu jak najszybszej adaptacji obecnej logiki do możliwości generowania raportów przy pomocy bibliotek dostępnych dla .NET Core.

W moim przypadku wybór padł na bibliotekę IronPdf.

IronPdf

Instalacja jest niezwykle prosta. Korzystając z konsoli zarządzania paczkami możemy skorzystać z poniższego polecenia:

install-package IronPdf
Po poprawnej instalacji jesteśmy gotowi do pracy. Dodajmy jeszcze bibliotekę do przestrzeni nazw naszego przykładowego projektu (w moim przypadku aplikacja konsolowa):
using IronPdf;

Biblioteka pozwala na tworzenie dokumentów pdf na bazie znaczników HTML oraz kaskadowego arkusza stylów CSS. W pierwszej kolejności wygenerujemy prosty dokument korzystając jedynie ze znaczników.

Wykorzystamy silnik biblioteki oraz jeden z podstawowych znaczników:

static void CreatePdfExample()
{
    var renderer = new HtmlToPdf();

    // tworzymy prosty template oraz ścieżkę zapisu pliku
    string template = "<h1>Nasz pierwszy PDF</h1>";
    var path = "Sample.pdf";

    var PDF = renderer.RenderHtmlAsPdf(template);
    PDF.SaveAs(path);
}
Cały kod "programu" wygląda w następujący sposób:
using IronPdf;

namespace IronPDF_Library
{
    class Program
    {
        static void Main(string[] args)
        {
            CreatePdfExample();
        }

        static void CreatePdfExample()
        {
            var renderer = new HtmlToPdf();

            // tworzymy prosty template oraz ścieżkę zapisu pliku
            string template = "<h1>Nasz pierwszy PDF</h1>";
            string path = "Sample.pdf";

            var PDF = renderer.RenderHtmlAsPdf(template);
            PDF.SaveAs(path);
        }
    }
}
Wykonanie skutkuje utworzeniem pliku, który możecie znaleźć w folderze swojego projeku. Jeżeli jednak nie chciecie szukać tego pliku możecie skorzystać z poniższego polecenia, które po utworzeniu dokumentu dokona natychmiastowego otwarcia:
var process = new Process();
process.StartInfo.UseShellExecute = true;
process.StartInfo.FileName = path;
process.Start();
Rezultatem wykonania naszego programu będzie utworzenie i otwarcie nowego dokumentu: IronPdf: pierwszy dokument

Możecie zobaczyć, że wszystko co przygotowaliśmy zostało wygenerowane.

HTML Template

Powyższy przykład pokazuje jedynie podstawy użycia i wg. mnie nie ma większego zastosowania. Dużo lepiej prezentuje się tworzenie dokumentów pdf na podstawie szablonu HTML.

Możemy przygotować szablon z uwzględnieniem kaskadowego arkusza stylów, następnie wczytać plik .html i dokonać jego konwersji:

<!doctype html>

<html>
<head>
    <meta charset="utf-8">

    <title>Testowanie IronPDF</title>

    <style>
        .header-center-text {
            width: 100px;
            margin-left: auto;
            margin-right: auto
        }
    </style>
</head>

<body>
                <h1 class="header-center-text">Witajcie!</h1>
</body>
</html>
Po przygotowaniu naszego wzorca możemy przejść do modyfikacji kodu:
using System.Diagnostics;
using IronPdf;

namespace IronPDF_Library
{
    class Program
    {
        static void Main(string[] args)
        {
            CreatePdfExample();
        }

        static void CreatePdfExample()
        {
            var renderer = new HtmlToPdf();

            string path = "Sample.pdf";
            string templatePath = @"C:\Users\plukasie\Desktop\sample-template.html";

            // tym razem korzystamy z metody: RenderHTMLFileAsPdf
            var PDF = renderer.RenderHTMLFileAsPdf(templatePath);       
            PDF.SaveAs(path);

            var process = new Process();
            process.StartInfo.UseShellExecute = true;
            process.StartInfo.FileName = path;
            process.Start();
        }
    }
}
W realnym przykładzie nasza logika bizesowa byłaby odpowiedzialna za utworzenie szablonu a przy pomocy tej biblioteki moglibyśmy dokonać konwersji na format pdf w celu prezentacji użytkownikowi.

Nasz dokument utworzony na bazie szablonu prezentuje się w poniższy sposób: IronPdf: dokument utworzony na bazie HTML Template

Tworzenie dokumentu na bazie adresu URL

Kolejną możliwością tej biblioteki jest tworzenie dokumentu na bazie dostarczonego adresu URL. Nasze szablony możemy umieszczać na wewnętrzym sewerze FTP a następnie dokonywać odpowiedniej konwersji dla użytkowników końcowych. W przypadku aplikacji konsolowej wykorzystamy serwer IIS, aby pokazać jak ta funkcjonalność działa w praktyce:

static void CreatePdfFromUrl()
{
    var renderer = new HtmlToPdf();

    string path = "Sample.pdf";
    var uri = new Uri("http://localhost/sample-template.html");

    // tym razem korzystamy z metody: RenderUrlAsPdf
    var PDF = renderer.RenderUrlAsPdf(uri);       
    PDF.SaveAs(path);

    var process = new Process();
    process.StartInfo.UseShellExecute = true;
    process.StartInfo.FileName = path;
    process.Start();
}
Efekt wykonania powyższego kodu jest identyczny jak w poprzednich przypadku ponieważ korzystaliśmy z tego samego wzorca.

Podsumowanie

W artykule skupiłem się na bibliotece IronPdf pozwalającej na tworzenie dokumentów pdf na podstawie różnych, wbudowanych funkcjonalności – mam nadzieję, że w przejrzysty sposób.

Jak wiecie z poprzedniego artykułu – testowanie różnych bibliotek pozwala odkryć najlepszą dla naszych potrzeb. Dlatego poniżej zamieszczam krótką listę bibliotek, które również możecie wypróbować: