Przejdź do treści stopki
KORZYSTANIE Z IRONPDF

Tworzenie PDF w bibliotece C# .NET

Twórz pliki PDF w języku C# za pomocą zaledwie jednej linii kodu, korzystając z biblioteki .NET IronPDF, która upraszcza generowanie plików PDF na podstawie ciągów znaków HTML, adresów URL lub formularzy dzięki wbudowanym funkcjom renderowania i łatwej integracji z Visual Studio.

Tworzenie plików PDF w bibliotece C# .NET jest łatwe i wydajne, jeśli korzysta się z odpowiednich przewodników. Korzystając z IronPDF, można w prosty sposób tworzyć i edytować funkcje plików PDF zgodnie z wymaganiami aplikacji. Ten przykładowy samouczek pokazuje, jak efektywnie wykorzystać oprogramowanie w swoim projekcie i utworzyć plik PDF za pomocą jednego kliknięcia!

Biblioteka PDF .NET

  • Zainstaluj bibliotekę IronPDF C# .NET
  • Jedna linijka kodu do tworzenia plików PDF w języku C#
  • Konwertuj formularz do formatu PDF jednym kliknięciem

Krok 1

Jak zainstalować bibliotekę C# PDF .NET?

Dwa główne sposoby uzyskania dostępu do biblioteki to:

  1. Download and unpack the [IronPDF Package](https://ironpdf.com/packages/IronPdf.zip) DLL file
  2. Navigate to [NuGet](https://www.nuget.org/packages/IronPdf) and install the package via Visual Studio.

Dla początkujących, którzy uczą się generowania plików PDF w środowisku .NET, menedżer pakietów NuGet zapewnia najprostszą metodę instalacji. Automatycznie obsługuje zależności i zapewnia korzystanie z najnowszej stabilnej wersji. Przegląd instalacji zawiera szczegółowe wskazówki dotyczące różnych środowisk programistycznych.


Którą metodę instalacji wybrać?

# Use the NuGet package manager to install IronPDF
nuget install IronPdf
# Use the NuGet package manager to install IronPDF
nuget install IronPdf
SHELL

NuGet jest zalecanym rozwiązaniem dla większości programistów, zwłaszcza tych, którzy dopiero zaczynają przygodę z programowaniem w środowisku .NET. Integruje się płynnie z Visual Studio i innymi środowiskami IDE, dzięki czemu idealnie nadaje się do tworzenia plików PDF w języku C#. Menedżer pakietów automatycznie zajmuje się wszystkimi skomplikowanymi ustawieniami, w tym:

  • Rozwiązywanie zależności i zgodność wersji
  • Pliki binarne przeznaczone dla systemów Windows, Linux lub Mac
  • Automatyczne aktualizacje za pośrednictwem menedżera pakietów Visual Studio
  • Integracja z procesem kompilacji projektu

Jakie są typowe problemy związane z instalacją?

Podczas instalacji IronPDF programiści napotykają czasami kilka typowych wyzwań. Przewodnik dotyczący rozwiązywania problemów obejmuje większość scenariuszy, ale oto te najczęstsze:

  1. Brak środowiska uruchomieniowego Visual C++: IronPDF wymaga pakietów redystrybucyjnych Visual C++. Jeśli pojawią się błędy dotyczące brakujących bibliotek DLL, zainstaluj najnowszą wersję środowiska uruchomieniowego Visual C++ firmy Microsoft.

  2. Zapora sieciowa blokująca NuGet: Środowiska korporacyjne mogą blokować dostęp do serwisu NuGet.org. W tym przypadku można pobrać pakiet offline i zainstalować go ręcznie.

  3. Niezgodności platform: Upewnij się, że projekt jest skierowany do właściwej platformy (x86, x64 lub AnyCPU). IronPDF działa najlepiej przy ukierunkowaniu na konkretną platformę, a nie na AnyCPU.

Dlaczego warto korzystać z NuGet zamiast ręcznej instalacji?

Dla programistów uczących się konwersji HTML do PDF NuGet oferuje kilka zalet:

  • Automatyczne aktualizacje: automatycznie pobieraj poprawki zabezpieczeń i nowe funkcje
  • Kontrola wersji: Łatwe przywracanie poprzednich wersji w razie potrzeby
  • Współpraca w zespole: wszyscy programiści otrzymują tę samą wersję pakietu
  • Kompatybilność z serwerami kompilacji: płynna współpraca z potokami CI/CD
  • Przywracanie pakietów: brakujące pakiety są pobierane automatycznie podczas kompilacji

Dokumentacja pakietów NuGet zawiera zaawansowane opcje konfiguracyjne dla konkretnych scenariuszy, takich jak wdrażanie w Azure lub kontenery Docker.


Poradnik "Jak to zrobić"

Jak korzystać z biblioteki PDF .NET?

Logo języka programowania C# – fioletowa sześciokątna plakietka z białym napisem
Kolorowe strzałki w kształcie szewronu w gradientzie od fioletowego do turkusowego, pokazujące kierunek przepływu pracy podczas konwersji plików PDF
Ikona narzędzi do projektowania i pomiarów – czarny długopis skrzyżowany z niebieską linijką, symbolizująca funkcje adnotacji w plikach PDF
Wielokolorowe strzałki w kształcie szewronu przedstawiające proces przekształcania dokumentów w IronPDF
Ikona dokumentu Adobe PDF przedstawiająca standardowy format pliku PDF używany w aplikacjach .NET

Teraz, gdy mamy już oprogramowanie, możemy generować pliki PDF, dostosowywać ustawienia, dodawać własny tekst i obrazy oraz modyfikować pliki PDF, aby spełniały wymagania naszego projektu. IronPDF oferuje kompleksowe funkcje do tworzenia nowych plików PDF, edycji istniejących, a nawet konwersji różnych formatów, takich jak obrazy do PDF lub XML do PDF.

Czym zajmuje się ChromePdfRenderer?

W poniższym kodzie wykorzystaliśmy formularz C#, aby zademonstrować, jak utworzyć plik PDF za pomocą biblioteki C# .NET. W tym przykładzie mamy TextBox, aby napisać własny tekst, a następnie po prostu kliknąć przycisk, aby utworzyć plik PDF. Klasa ChromePdfRenderer oferuje najprostszy sposób generowania plików PDF z różnych źródeł, w tym ciągu znaków HTML, adresów URL stron internetowych lub plików doc w innym rendererze.

ChromePdfRenderer stanowi serce silnika renderującego IronPDF. Wykorzystuje tę samą technologię co przeglądarka Google Chrome, aby zapewnić, że pliki PDF wyglądają dokładnie tak, jak w nowoczesnej przeglądarce internetowej. Oznacza to pełną obsługę:

Jak radzić sobie z błędami podczas generowania plików PDF?

Obsługa błędów ma kluczowe znaczenie dla niezawodnego generowania plików PDF. IronPDF udostępnia szczegółowe informacje o błędach, które pomagają szybko zidentyfikować problemy. Oto solidne podejście do generowania plików PDF z obsługą błędów:

using IronPdf;
using System;
using System.IO;

public class PdfGenerator
{
    public static bool CreatePdfSafely(string htmlContent, string outputPath)
    {
        try
        {
            var renderer = new ChromePdfRenderer();

            // Configure rendering options for better results
            renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
            renderer.RenderingOptions.MarginTop = 20;
            renderer.RenderingOptions.MarginBottom = 20;
            renderer.RenderingOptions.PrintHtmlBackgrounds = true;

            // Generate the PDF
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);

            // Ensure directory exists
            string directory = Path.GetDirectoryName(outputPath);
            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }

            // Save the PDF
            pdf.SaveAs(outputPath);

            return true;
        }
        catch (Exception ex)
        {
            // Log the error (you can use your preferred logging framework)
            Console.WriteLine($"PDF generation failed: {ex.Message}");
            return false;
        }
    }
}
using IronPdf;
using System;
using System.IO;

public class PdfGenerator
{
    public static bool CreatePdfSafely(string htmlContent, string outputPath)
    {
        try
        {
            var renderer = new ChromePdfRenderer();

            // Configure rendering options for better results
            renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
            renderer.RenderingOptions.MarginTop = 20;
            renderer.RenderingOptions.MarginBottom = 20;
            renderer.RenderingOptions.PrintHtmlBackgrounds = true;

            // Generate the PDF
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);

            // Ensure directory exists
            string directory = Path.GetDirectoryName(outputPath);
            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }

            // Save the PDF
            pdf.SaveAs(outputPath);

            return true;
        }
        catch (Exception ex)
        {
            // Log the error (you can use your preferred logging framework)
            Console.WriteLine($"PDF generation failed: {ex.Message}");
            return false;
        }
    }
}
Imports IronPdf
Imports System
Imports System.IO

Public Class PdfGenerator
    Public Shared Function CreatePdfSafely(htmlContent As String, outputPath As String) As Boolean
        Try
            Dim renderer As New ChromePdfRenderer()

            ' Configure rendering options for better results
            renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait
            renderer.RenderingOptions.MarginTop = 20
            renderer.RenderingOptions.MarginBottom = 20
            renderer.RenderingOptions.PrintHtmlBackgrounds = True

            ' Generate the PDF
            Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)

            ' Ensure directory exists
            Dim directory As String = Path.GetDirectoryName(outputPath)
            If Not Directory.Exists(directory) Then
                Directory.CreateDirectory(directory)
            End If

            ' Save the PDF
            pdf.SaveAs(outputPath)

            Return True
        Catch ex As Exception
            ' Log the error (you can use your preferred logging framework)
            Console.WriteLine($"PDF generation failed: {ex.Message}")
            Return False
        End Try
    End Function
End Class
$vbLabelText   $csharpLabel

W przypadku bardziej zaawansowanych scenariuszy błędów należy zapoznać się z przewodnikami dotyczącymi rozwiązywania problemów, które obejmują typowe kwestie, takie jak zarządzanie pamięcią i opóźnienia w renderowaniu.

Kiedy należy używać renderowania HTML, a kiedy bezpośredniego tworzenia plików PDF?

Zrozumienie, kiedy należy stosować renderowanie HTML, a kiedy bezpośrednie tworzenie plików PDF, pomaga w wyborze właściwego podejścia. IronPDF wyróżnia się w renderowaniu HTML, ponieważ zapewnia:

Zalety renderowania HTML:

  • Wykorzystaj posiadane umiejętności w zakresie tworzenia stron internetowych
  • Do stylizacji używaj znanego CSS
  • Łatwe projektowanie responsywne z ustawieniami okna wyświetlania
  • Dynamiczna zawartość z obsługą JavaScript
  • Szybkie prototypowanie i iteracja

Użyj renderowania HTML, gdy:

  • Konwersja istniejących stron internetowych lub stron ASPX
  • Tworzenie raportów o złożonym układzie
  • Praca z projektami responsywnymi
  • Generowanie faktur lub paragonów na podstawie szablonów
  • Tworzenie formularzy PDF na podstawie formularzy HTML

Bezpośrednia obróbka plików PDF jest lepsza w przypadku:

// C# Program to create PDF from TextBox input using IronPDF
using IronPdf;
using System.Windows.Forms;

namespace readpdf
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // Event handler for the button click
        private void button1_Click(object sender, System.EventArgs e)
        {
            // Create a ChromePdfRenderer object to convert HTML to PDF
            var HtmlLine = new ChromePdfRenderer();

            // Retrieve the text from the TextBox
            string text = textBox1.Text;

            // Render the HTML as a PDF, wrapping the text in an <h1> tag
            using var pdf = HtmlLine.RenderHtmlAsPdf("<h1>" + text + "</h1>");

            // Save the PDF to a file called "custom.pdf"
            pdf.SaveAs("custom.pdf");

            // Show a confirmation message to the user
            MessageBox.Show("Done!");
        }
    }
}
// C# Program to create PDF from TextBox input using IronPDF
using IronPdf;
using System.Windows.Forms;

namespace readpdf
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // Event handler for the button click
        private void button1_Click(object sender, System.EventArgs e)
        {
            // Create a ChromePdfRenderer object to convert HTML to PDF
            var HtmlLine = new ChromePdfRenderer();

            // Retrieve the text from the TextBox
            string text = textBox1.Text;

            // Render the HTML as a PDF, wrapping the text in an <h1> tag
            using var pdf = HtmlLine.RenderHtmlAsPdf("<h1>" + text + "</h1>");

            // Save the PDF to a file called "custom.pdf"
            pdf.SaveAs("custom.pdf");

            // Show a confirmation message to the user
            MessageBox.Show("Done!");
        }
    }
}
' C# Program to create PDF from TextBox input using IronPDF
Imports IronPdf
Imports System.Windows.Forms

Namespace readpdf
	Partial Public Class Form1
		Inherits Form

		Public Sub New()
			InitializeComponent()
		End Sub

		' Event handler for the button click
		Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
			' Create a ChromePdfRenderer object to convert HTML to PDF
			Dim HtmlLine = New ChromePdfRenderer()

			' Retrieve the text from the TextBox
'INSTANT VB NOTE: The variable text was renamed since Visual Basic does not handle local variables named the same as class members well:
			Dim text_Conflict As String = textBox1.Text

			' Render the HTML as a PDF, wrapping the text in an <h1> tag
			Dim pdf = HtmlLine.RenderHtmlAsPdf("<h1>" & text_Conflict & "</h1>")

			' Save the PDF to a file called "custom.pdf"
			pdf.SaveAs("custom.pdf")

			' Show a confirmation message to the user
			MessageBox.Show("Done!")
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

Jak przekonwertować formularz C# do formatu PDF?

Użyliśmy aplikacji C# Windows Forms, aby pokazać idealny wynik z niestandardowym tekstem. Wystarczy jedno kliknięcie, aby tekst w TextBox został przekształcony w niestandardowy plik PDF. Wymaga to tylko jednej linii kodu i jest łatwe do zrozumienia. W przypadku bardziej złożonych scenariuszy warto zapoznać się z konwersją CSHTML do PDF dla aplikacji MVC lub generowaniem plików PDF w Blazorze dla nowoczesnych aplikacji internetowych.

Dlaczego ta metoda "jednego kliknięcia" działa?

Metoda "jednego kliknięcia" działa skutecznie, ponieważ IronPDF wewnętrznie obsługuje wszystkie złożone operacje renderowania. Po wywołaniu RenderHtmlAsPdf(), IronPDF:

  1. Inicjuje silnik Chrome: wykorzystuje ten sam silnik renderujący, co przeglądarka Chrome
  2. Przetwarza kod HTML: analizuje ciąg HTML i stosuje wszelkie style wbudowane
  3. Renders to PDF: Konwertuje wyrenderowaną treść do formatu PDF
  4. Optymalizuje wynik: stosuje kompresję i optymalizację

Ta prostota sprawia, że IronPDF idealnie nadaje się do scenariuszy szybkiego tworzenia oprogramowania, w których potrzebne są szybkie wyniki. Biblioteka automatycznie obsługuje zarządzanie czcionkami, osadzanie obrazów, a nawet wykonywanie kodu JavaScript.

Do jakich formatów plików mogę eksportować?

Chociaż PDF jest głównym formatem wyjściowym, IronPDF obsługuje różne opcje eksportu i konwersji:

Ponadto IronPDF może importować dane z różnych źródeł:

Jak dostosować plik PDF?

IronPDF oferuje szerokie możliwości dostosowywania poprzez klasę RenderingOptions. Oto przykład pokazujący typowe dostosowania:

using IronPdf;

// Create renderer with custom settings
var renderer = new ChromePdfRenderer();

// Page setup options
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;

// Margins (in millimeters)
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Header and footer configuration
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    Height = 15,
    HtmlFragment = "<div style='text-align: center;'>{page} of {total-pages}</div>",
    DrawDividerLine = true
};

// Additional options
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.GrayScale = false;
renderer.RenderingOptions.Zoom = 100;
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

// Apply custom CSS for print
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;

// Generate PDF with all customizations
var pdf = renderer.RenderHtmlAsPdf("<h1>Customized PDF Output</h1>");
pdf.SaveAs("customized.pdf");
using IronPdf;

// Create renderer with custom settings
var renderer = new ChromePdfRenderer();

// Page setup options
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;

// Margins (in millimeters)
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Header and footer configuration
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    Height = 15,
    HtmlFragment = "<div style='text-align: center;'>{page} of {total-pages}</div>",
    DrawDividerLine = true
};

// Additional options
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.GrayScale = false;
renderer.RenderingOptions.Zoom = 100;
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

// Apply custom CSS for print
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;

// Generate PDF with all customizations
var pdf = renderer.RenderHtmlAsPdf("<h1>Customized PDF Output</h1>");
pdf.SaveAs("customized.pdf");
Imports IronPdf

' Create renderer with custom settings
Dim renderer = New ChromePdfRenderer()

' Page setup options
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait

' Margins (in millimeters)
renderer.RenderingOptions.MarginTop = 25
renderer.RenderingOptions.MarginBottom = 25
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20

' Header and footer configuration
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
    .Height = 15,
    .HtmlFragment = "<div style='text-align: center;'>{page} of {total-pages}</div>",
    .DrawDividerLine = True
}

' Additional options
renderer.RenderingOptions.PrintHtmlBackgrounds = True
renderer.RenderingOptions.GrayScale = False
renderer.RenderingOptions.Zoom = 100
renderer.RenderingOptions.CreatePdfFormsFromHtml = True

' Apply custom CSS for print
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print

' Generate PDF with all customizations
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Customized PDF Output</h1>")
pdf.SaveAs("customized.pdf")
$vbLabelText   $csharpLabel

Aby uzyskać bardziej zaawansowane opcje dostosowywania, zapoznaj się z:

~ Formularz C# ~

~ PDF ~


Szybki dostęp do biblioteki

Documentation related to Szybki dostęp do biblioteki

Udostępnij dokumentację API

Read through and share the API Reference for all the functionality you need to work with PDFs in your .NET project. The comprehensive documentation covers everything from basic [PDF creation](https://ironpdf.com/tutorials/csharp-create-pdf-complete-tutorial/) to advanced features like [digital signatures](https://ironpdf.com/tutorials/csharp-pdf-security-complete-tutorial/) and [form handling](https://ironpdf.com/how-to/edit-forms/).

Dokumentacja API dla IronPDF

Często Zadawane Pytania

Jak zainstalować bibliotekę PDF w moim projekcie C#?

Bibliotekę PDF, taką jak IronPDF, można zainstalować, pobierając bezpośrednio plik DLL pakietu lub korzystając z NuGet w celu zainstalowania jej za pośrednictwem programu Visual Studio.

Jak utworzyć plik PDF z języka C# przy użyciu biblioteki PDF?

Korzystając z biblioteki PDF, takiej jak IronPDF, można utworzyć plik PDF, wykorzystując klasę ChromePdfRenderer do konwersji ciągów znaków HTML lub adresów URL na pliki PDF przy użyciu minimalnej ilości kodu.

Czy mogę przekonwertować formularz C# na plik PDF za pomocą biblioteki PDF?

Tak, korzystając z IronPDF, można przekonwertować formularz C# na plik PDF. Wymaga to przechwycenia danych z formularza i renderowania ich jako pliku PDF przy użyciu funkcji renderowania biblioteki.

Jaka jest najprostsza metoda generowania plików PDF za pomocą biblioteki PDF?

Najprostszym sposobem generowania plików PDF za pomocą IronPDF jest użycie obiektu ChromePdfRenderer do bezpośredniego renderowania treści HTML do formatu PDF.

Jak dodać własny tekst i obrazy do pliku PDF za pomocą biblioteki PDF?

Możesz dodawać własny tekst i obrazy do pliku PDF, modyfikując zawartość HTML przed przekształceniem jej do formatu PDF przy użyciu funkcji IronPDF.

Czy można edytować istniejące pliki PDF za pomocą biblioteki PDF?

Tak, IronPDF oferuje funkcje umożliwiające manipulowanie i edycję istniejących plików PDF, co pozwala na aktualizację treści w razie potrzeby.

Jak mogę przekonwertować adres URL bezpośrednio na plik PDF za pomocą biblioteki PDF?

IronPDF pozwala na bezpośrednią konwersję adresu URL strony internetowej do formatu PDF przy użyciu obiektu ChromePdfRenderer, co upraszcza ten proces.

Jakie są główne cechy biblioteki PDF dla .NET?

Biblioteka PDF, taka jak IronPDF, oferuje funkcje takie jak tworzenie plików PDF, edycja, konwersja z HTML oraz dodawanie niestandardowego tekstu i obrazów, co czyni ją wszechstronnym narzędziem dla programistów .NET.

Czy mogę dostosować ustawienia plików PDF za pomocą biblioteki PDF?

Tak, IronPDF pozwala dostosować różne ustawienia plików PDF, w tym rozmiar strony, orientację i marginesy, aby dopasować je do konkretnych wymagań projektu.

Jak rozwiązywać problemy podczas korzystania z biblioteki PDF w języku C#?

W przypadku problemów technicznych można skorzystać z dokumentacji i zasobów udostępnionych przez IronPDF lub poszukać rozwiązań typowych problemów na forach społeczności.

Czy IronPDF jest kompatybilny z .NET 10 i jakie korzyści niesie ze sobą .NET 10?

Tak, IronPDF jest w pełni kompatybilny z .NET 10. Obsługuje ulepszenia środowiska uruchomieniowego i języka wprowadzone w .NET 10, w tym ulepszone wykorzystanie pamięci, wzrost wydajności, taki jak dewirtualizacja metod interfejsu tablic, oraz zmniejszone obciążenie podczas generowania i manipulacji plikami PDF.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie