Jak drukować za pomocą okna dialogowego w języku C
Okno dialogowe drukowania to standardowe okno systemu operacyjnego, które pozwala użytkownikom wybrać drukarkę, ustawić liczbę kopii, wybrać zakres stron i dostosować opcje papieru przed drukowaniem. W przypadku aplikacji desktopowych, w których użytkownicy muszą mieć kontrolę nad tym, jak i gdzie drukowane są ich dokumenty, wyświetlenie tego okna dialogowego jest oczekiwanym zachowaniem.
IronPrint udostępnia jedną metodę — Printer.ShowPrintDialog() — która wyświetla natywny dialog drukowania, stosuje wybory użytkownika i wysyła dokument do wybranej drukarki. Instalujemy jeden pakiet NuGet i piszemy jedną linię kodu.
Szybki start: Drukowanie za pomocą okna dialogowego
- Zainstaluj IronPrint za pośrednictwem NuGet:
Install-Package IronPrint - Dodaj
using IronPrint;do pliku - Wywołaj
Printer.ShowPrintDialog("filepath"), aby otworzyć natywny dialog drukowania - (Opcjonalnie) Przekaż obiekt
PrintSettings, aby wstępnie skonfigurować domyślne ustawienia dialogu - Użytkownik wybiera drukarkę, liczbę kopii i opcje, a następnie klika "PRINT"
-
Install IronPrint with NuGet Package Manager
PM > Install-Package IronPrint -
Skopiuj i uruchom ten fragment kodu.
using IronPrint; // Display the print dialog and print the document Printer.ShowPrintDialog("document.pdf"); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronPrint w swoim projekcie już dziś z darmową wersją próbną
Minimalny proces (5 kroków)
- Zainstaluj bibliotekę IronPrint C#
- Wywołaj
Printer.ShowPrintDialog("ścieżka_do_pliku") - Użytkownik wybiera drukarkę, liczbę kopii i zakres stron
- Kliknij PRINT, aby wysłać dokument do wybranej drukarki
- Sprawdź, czy dokument drukuje się z wybranymi ustawieniami PRINT
Jak działa okno dialogowe PRINT w języku C#?
Metoda Printer.ShowPrintDialog() otwiera natywne okno dialogowe drukowania systemu operacyjnego. Użytkownik widzi pełny zestaw opcji drukowania — wybór drukarki, liczbę kopii, zakres stron, orientację i rozmiar papieru — i klika PRINT, aby wysłać zadanie, lub Anuluj, aby zamknąć okno dialogowe bez drukowania.
Za kulisami, natywne podejście .NET wymaga utworzenia instancji System.Windows.Forms.PrintDialog, podłączenia jej do PrintDocument, obsługi zdarzenia PrintPage, aby narysować zawartość na powierzchni graficznej drukarki, sprawdzenia DialogResult, a następnie wywołania PrintDocument.Print(). Taka konfiguracja zazwyczaj obejmuje 15–25 linii kodu. Nie obejmuje to również wbudowanego renderowania plików PDF lub obrazów — drukowanie pliku PDF za pomocą natywnego okna dialogowego oznacza najpierw parsowanie pliku PDF na strony nadające się do rysowania, co wymaga jeszcze jednej biblioteki.
IronPrint obsługuje cały proces w jednym wywołaniu:
:path=/static-assets/print/content-code-examples/how-to/print-with-dialog/print-with-dialog-show-print-dialog-open-and-print.cs
using IronPrint;
// Open the dialog, let the user configure settings, and print
Printer.ShowPrintDialog("quarterly-report.pdf");
Imports IronPrint
' Open the dialog, let the user configure settings, and print
Printer.ShowPrintDialog("quarterly-report.pdf")
Metoda akceptuje ścieżkę pliku jako string lub dane surowego pliku jako byte[]. IronPrint wykrywa format dokumentu, renderuje go za pomocą odpowiedniego silnika i wyświetla okno dialogowe. Po potwierdzeniu przez użytkownika dokument zostanie wydrukowany zgodnie z wybranymi ustawieniami. Samouczek dotyczący drukowania dokumentów szczegółowo omawia cały cykl drukowania.
Jak wstępnie skonfigurować ustawienia okna dialogowego?
Możemy ustawić wartości domyślne przed otwarciem okna dialogowego, tworząc obiekt PrintSettings i przekazując go jako drugi parametr. Okno dialogowe otworzy się z wstępnie zaznaczonymi wartościami, a użytkownik może je zaakceptować bez zmian lub zmienić dowolne ustawienie.
:path=/static-assets/print/content-code-examples/how-to/print-with-dialog/print-with-dialog-preconfigure-dialog-settings.cs
using IronPrint;
// Pre-configure defaults for the dialog
var settings = new PrintSettings
{
PrinterName = "HP LaserJet Pro",
PaperSize = PaperSize.A4,
PaperOrientation = PaperOrientation.Portrait,
Dpi = 300,
NumberOfCopies = 2,
Grayscale = false
};
// Open dialog with pre-filled settings
Printer.ShowPrintDialog("invoice.pdf", settings);
Imports IronPrint
' Pre-configure defaults for the dialog
Dim settings As New PrintSettings With {
.PrinterName = "HP LaserJet Pro",
.PaperSize = PaperSize.A4,
.PaperOrientation = PaperOrientation.Portrait,
.Dpi = 300,
.NumberOfCopies = 2,
.Grayscale = False
}
' Open dialog with pre-filled settings
Printer.ShowPrintDialog("invoice.pdf", settings)
Jest to przydatne, gdy aplikacja z góry zna prawdopodobny format drukarki lub papieru. Na przykład, system punktu sprzedaży, który zawsze drukuje paragony na określonej drukarce termicznej, może domyślnie ustawić PrinterName na to urządzenie. Użytkownik nadal ma możliwość zmiany go w dialogu.
Aby odkryć, które drukarki są dostępne w systemie, wywołujemy Printer.GetPrinterNames(), co zwraca List<string> wszystkich zainstalowanych drukarek. Podobnie, Printer.GetPrinterTrays() zwraca dostępne zasobniki papieru dla danej drukarki.
Pełna lista konfigurowalnych właściwości obejmuje PrinterName, PaperSize, PaperOrientation, Dpi, NumberOfCopies, Grayscale, PaperMargins, Flatten (dla pól formularzy PDF) oraz Tray. Poradnik dotyczący ustawień drukowania omawia każdą właściwość wraz z przykładami kodu. Każda właściwość, która nie jest ustawiona w PrintSettings, ustawia się na domyślną konfigurację wybranej drukarki.
Jak wyświetlić okno dialogowe asynchronicznie?
Metoda Printer.ShowPrintDialogAsync() zwraca Task, co czyni ją kompatybilną z await. Zapobiega to blokowaniu wątku interfejsu użytkownika przez okno dialogowe — co jest niezbędne w przypadku WPF, MAUI i każdej aplikacji, w której zawieszony interfejs powoduje słabe wrażenia użytkownika.
:path=/static-assets/print/content-code-examples/how-to/print-with-dialog/print-with-dialog-show-print-dialog-async.cs
using IronPrint;
// Non-blocking dialog — the UI remains responsive
await Printer.ShowPrintDialogAsync("report.pdf");
Imports IronPrint
' Non-blocking dialog — the UI remains responsive
Await Printer.ShowPrintDialogAsync("report.pdf")
ShowPrintDialogAsync() akceptuje te same parametry co wersja synchroniczna: ścieżkę pliku lub tablicę bajtów, plus opcjonalny obiekt PrintSettings. Wzorzec asynchroniczny opiera się na tym samym wzorcu asynchronicznym opartym na zadaniach, który jest stosowany we współczesnym programowaniu w środowisku .NET.
IronPrint działa w aplikacjach WinForms, WPF, MAUI i konsolowych. Wygląd okna dialogowego dostosowuje się do platformy hosta i wersji systemu operacyjnego, dzięki czemu użytkownik zawsze widzi natywne okno drukowania, którego oczekuje.
Kiedy należy używać drukowania z oknem dialogowym, a kiedy drukowania w tle?
Wybór zależy od tego, czy użytkownik potrzebuje kontroli nad zadaniem drukowania.
| Kryteria | Drukuj z oknem dialogowym | Ciche drukowanie |
|---|---|---|
| Interakcja z użytkownikiem | Użytkownik wybiera drukarkę, liczbę kopii, zakres stron | Brak interakcji — drukuje natychmiast |
| Najlepsze dla | Aplikacje desktopowe, pojedyncze wydruki, funkcje dla użytkowników | Zadania wsadowe, usługi działające w tle, aplikacje kioskowe |
| Wybór drukarki | Użytkownik dokonuje wyboru w oknie dialogowym | Ustawiane programowo za pomocą PrintSettings |
| Metoda IronPrint | Printer.ShowPrintDialog() |
Printer.Print() |
| Wariant asynchroniczny | ShowPrintDialogAsync() |
PrintAsync() |
Użyj tego okna dialogowego, gdy użytkownicy muszą zweryfikować lub zmienić ustawienia przed drukowaniem — eksport raportów, drukowanie faktur lub w każdej sytuacji, w której niewłaściwa drukarka powoduje zmarnowanie strony. Użyj drukowania cichego, gdy aplikacja kontroluje całe zadanie i nie jest wymagana decyzja człowieka. Samouczek dotyczący drukowania dokumentów przedstawia oba podejścia obok siebie.
Jakie formaty plików obsługuje okno dialogowe PRINT?
Printer.ShowPrintDialog() obsługuje te same formaty co ciche drukowanie: PDF, PNG, TIFF, JPEG, GIF, HTML i BMP. Przekazujemy ścieżkę pliku niezależnie od formatu, a IronPrint obsługuje renderowanie i komunikację z buforem drukowania. Dane pliku jako byte[] są również akceptowane, co jest przydatne, gdy dokument jest generowany w pamięci lub pobierany z bazy danych.
:path=/static-assets/print/content-code-examples/how-to/print-with-dialog/print-with-dialog-print-dialog-image-and-byte-array.cs
using IronPrint;
// Print an image with the dialog
Printer.ShowPrintDialog("product-photo.png");
// Print from a byte array
byte[] reportData = File.ReadAllBytes("monthly-report.pdf");
Printer.ShowPrintDialog(reportData);
Imports IronPrint
' Print an image with the dialog
Printer.ShowPrintDialog("product-photo.png")
' Print from a byte array
Dim reportData As Byte() = File.ReadAllBytes("monthly-report.pdf")
Printer.ShowPrintDialog(reportData)
Strona z przykładami kodu przedstawia dodatkowe scenariusze specyficzne dla poszczególnych formatów. W przypadku procesów związanych z plikami PDF — generowania pliku PDF i natychmiastowego drukowania — IronPDF naturalnie współdziała z IronPrint. Porównanie IronPrint i IronPDF wyjaśnia, kiedy należy używać każdego z nich.
Kolejne kroki
Drukowanie z dialogiem sprowadza się do dwóch metod: Printer.ShowPrintDialog() dla wywołań synchronicznych i Printer.ShowPrintDialogAsync() dla wykonania nieblokującego. Wstępnie skonfiguruj domyślne ustawienia za pomocą PrintSettings i pozwól użytkownikowi na wprowadzenie dalszych zmian. Obie metody obsługują wszystkie formaty dokumentów IronPrint i działają w projektach WinForms, WPF, MAUI oraz konsolowych.
Zapoznaj się z samouczkami IronPrint, aby uzyskać pełne instrukcje, Dokumentacją API klasy Printer zawierającą wszystkie dostępne metody lub instrukcją dotyczącą ustawień drukowania, aby uzyskać informacje na temat zaawansowanej konfiguracji. Lista zmian zawiera informacje o ostatnich ulepszeniach i nowych funkcjach.
Rozpocznij bezpłatny 30-dniowy okres próbny, aby przetestować drukowanie okien dialogowych w rzeczywistym projekcie — nie jest wymagana karta kredytowa. Gdy produkt będzie gotowy do wysyłki, zapoznaj się z opcjami licencyjnymi już od 749 USD.

